七步走,让你快速编写一个最简单的Servlet项目
Tomcat是一个HTTP服务器,Tomcat开放了一组API可以让开发人员基于Tomcat进行二次开发,写出更多的业务逻辑,而开放的这组API就叫做Servlet。
快速上手Servlet项目
-
创建一个maven项目
创建一个Servlet项目,即创建一个maven项目。maven项目可以帮助我们更好地进行依赖管理和项目打包。Servlet项目需要引入Servlet API的jar包。 -
引入Servlet API
去maven中央仓库中找到Servlet API 3.1版本。已经找到了
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
这段代码复制到maven项目的pom.xml
的<dependencies>
标签中等待一会儿,maven就会自动帮助我们下载完成Servlet
的API了。
其中<scpoe>
标签表示当前的jar包只会在开发调试阶段使用,在最终打包部署的时候,就不会引入这个jar包了。这是因为Tomcat
中内置了Servlet
,所以将Servlet
项目部署到Tomcat
之后就已经有Servlet
所依赖的环境了,就不用额外再将Servlet
打包在项目中了。
- 编写逻辑
基于Servlet的开发流程和一个一般的TCP/HTTP服务器是一样的。
- 进行初始化,即将一个Servlet项目的中的类和HTTP请求进行关联
- 读取HTTP请求,Servlet解析字符串,生成一个HttpServletRequest
- 根据HttpServletRequest请求对象,生成对应的响应返回HttpServletReponse
- 将HttpServletReponse对象转换成HTTP响应发送出去
其中初始化,读取HTTP请求,发送HTTP响应的工作都由Servlet帮助我们做好了,我们只需要根据特定HTTP请求转化成的HttpServletRequest进行计算和处理,然后构建一个HttpServletReponse对象返回响应即可。即需要进行中间数据处理逻辑的部分。
- 编写一个简单的hello world
// @WebServlet是Servlet提供的一个注解,作用就是将 HTTP路径请求 和 当前类 关联起来
// 如果当前请求是GET请求,就会调用doGET()
// 如果当前请求是POST请求,就会调用doPOST()
@WebServlet("/hello")
public class HelloServlet extends HttpServlet { // 需要继承HttpServlet类
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 一定要将HttpServlet这个父类中的doGet()删除,因为父类doGet()就是直接构造了一个状态码为405的错误响应
// super.doGet(req, resp);
resp.getWriter().write("hello Servlet");
}
}
我们只需要重写HttpServlet中的方法,在Tomcat中会自动创建HttpServlet对象,并调用请求对应的方法。
- 创建一些必要的目录和文件
在main
目录下创建webapp
目录,在webapp
目录下创建WEB-INF
目录,在WEB-INF
目录下创建一个web.xml
。最后在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>
- 打包
给项目代码进行编译之后进行压缩打包,直接基于maven进行项目的打包。
在终端显示BUILD SUCCESS
之后,就会生成一个target
文件夹,其中就会出现.jar
包。
但是Tomcat
不能识别jar
包,而只能识别war
包。jar
包是一个普通的java程序打包的结果,里面只会含有一些.class
文件。但是war
包是一个java web
程序,其中除了.class
文件之外,还会有html,css,js,图片等资源,这些资源被打包成war
包才能被Tomcat
识别。
如果想要让maven将项目打包成war
包的话,就需要在pom.xml
中添加<packaging>war<packaging>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>test_maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 用dependencies用来组织项目中的依赖(第三方库) -->
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<packaging>war</packaging>
</project>
war
包的名字会默认是项目的actifackId + version
,但是将war
包部署到Tomcat
上之后,Tomcat
会自动解压,生成一个同名的目录。之后在浏览器访问的时候都需要带上这个目录名,所以这个目录名最好起的比较简洁。
如果想要让maven打包的同时设置war
包的名字的话,对pom.xml
进行设置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>test_maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 用dependencies用来组织项目中的依赖(第三方库) -->
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<packaging>war</packaging>
<!-- build中嵌套一个finalName,那么打包的名字就是test_servlet -->
<build>
<finalName>test_servlet</finalName>
</build>
</project>
- 部署程序
将打包好的war
包复制到Tomcat
的webapps
目录下就完成了项目部署。
在启动了Tomcat
之后,在webapps
目录下就会生成一个同名的目录。
test_servler
项目中有两个文件夹META-INF
和WEB-INF
- MATE-INF:存放webapp依赖的第三方jar包
- WEB-INF:web.xml和编译生成好的.class文件
- 验证一些程序是否正常工作
通过浏览器来访问一下Tomcat
,构建一个请求,判断是否能够正正常构建响应。
通过localhost:8080
访问Tomcat
,然后加上war
包的目录名test_servlet
,最后加上GET
请求的路径hello
,就返回了HelloServlet
中返回的"hello Servlet“字符串。