利用Servlet编写第一个"hello world"
- 🔎创建 Maven 项目
- 🔎引入依赖
- 🔎创建目录
- 🔎编写代码
- 🔎打包代码
- 🔎部署
- 🔎程序验证
- 🔎结尾
🔎创建 Maven 项目
Maven 是一个构建工具
功能是帮助我们去构建, 测试, 打包一个项目
- Java 中的构建工具包括
- Ant(一款较老的构建工具)
- Maven(当前比较主流的构建工具)
- Gradle(一款较新的构建工具, 当前主要是 Android 生态使用)
首次创建 Maven 项目, Idea 会从互联网加载很多的依赖(需要花费一定的时间)
创建 Maven 项目后, 会有一个 pom.xml 配置文件
🔎引入依赖
Servlet 是 Tomcat 提供的 API(不是标准库提供)
表示需要额外下载 Servlet
登录 Maven 中央仓库
Maven 中央仓库
在搜索框中输入 servlet
确认后弹出如下界面
选择第一个 Java Servlet API
选择版本号为 3.1.0
Servlet 3.1.0 版本对应的 Tomcat 版本为 8.5
复制代码到 pom.xml 配置文件中
在 pom.xml 配置文件中手动输入 <dependencies></dependencies>
此处的 jar 包, 默认被下载在本地的隐藏目录中
🔎创建目录
创建 webapp
创建 WEB-INF
创建 web.xml
web.xml 应用于 Tomcat
pom.xml 应用于 Maven
复制如下代码到 web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
这里可能出现报红
但不会影响到程序
🔎编写代码
创建一个类
继承 HttpServlet
HttpServlet 来自 Servlet 的 jar 包(引入的依赖)
重写 doGet() 方法
- HttpServletRequest, Http 请求
- HttpServletResponse, Http 响应
- doGet, 根据请求计算响应
一个服务器程序, 其基本工作流程大致如下
- 读取请求并解析
- 根据请求计算响应
- 将响应返回到客户端
此处需要将 super.doGet(req, resp);
注释掉
因为 doGet() 方法会返回 405 页面
405 Method Not Allowed 表示方法不被允许
打印 hello world
- 在服务器打印 hello world,
System.out.println("hello world");
- 在客户端打印 hello world,
resp.getWriter().write("hello world");
为 HelloServlet 添加注解
代码编写完毕
此处并不需要编写 main 方法
这是因为上述代码并非独立运行, 而是插入到 Tomcat 中, 由 Tomcat 调用
🔎打包代码
由于程序不能独立运行(需部署到 Tomcat 运行)
因此需要将代码进行打包操作
类似于搬家, 需要先收拾物品(打包)
然后再将其搬运到新的地方(部署)
- 在 Java 中, 使用的压缩包
- jar(普通的 Java 程序打成 jar 包)
- war (部署到 Tomcat 的程序打成 war 包)
点击右侧 Maven, 弹出如下界面
- 点击 Servlet_s
- 点击 Lifecycle
- 找到 package, 双击进行打包
- 双击 package 后, 执行如下操作
- 检查代码中是否存在一些依赖, 依赖是否下载好
- 将代码进行编译, 生成一堆 .class 文件
- 将 .class 文件, web.xml 按照一定格式进行打包
弹出如下界面表示打包成功
此时左侧界面会生成 target 目录
仔细查看发现此时的压缩包格式是 jar 包
将压缩包格式调整为 war 包
需要调整 pom.xml 描述生成的包的包格式
将<packaging>war</packaging>
复制到 pom.xml 即可
此处也可以修改打出的包的名称
将打出的包的名称修改为 hello_servlet
打出的 war 包, 且名称为 hello_servlet
🔎部署
部署
将打好的 war 包, 拷贝到 Tomcat 的 webapps 目录中
启动 Tomcat 后, 自动将 war 包进行了解压缩
🔎程序验证
浏览器效果
Tomcat 效果(服务器)
- hello_servlet, 称为 Context Path / Application Path
标识了一个 webapp(就是这个 webapp 的目录名 / war 包名)
- hello, 称为 Servlet Path
- 标识当前请求调用哪个 Servlet 类的 doGet()
- 一个 webapp, 可以有多个 Servlet
🔎结尾
创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油