因为本文的环境准备、具体步骤以及实例都是围绕最后Servlet原理的阐述这一目的来进行的,因此,把Servlet原理图的位置放在此处,也未尝不可,如下图:
文章目录
一、环境准备
1.Tomcat的安装
之前文章的链接:【详细步骤】Tomcat安装+主要目录分析+样例学习+IDEA中配置
(注:在IDEA中配置Tomcat服务器时,指定此引用路径)
作用:作为Web服务器,并在本地进行测试
2.Maven的安装
之前文章链接:【详细步骤】Maven的安装与配置+使用+镜像配置
(注:用IDEA自带的Maven配置起来不灵活,可事先自行下载并配置好镜像和仓库地址后,再在IDEA中指定此引用路径)
作用:进行项目管理,在Maven仓库中引用所需依赖(也可自动引入某些依赖的依赖)
二、具体步骤
1.创建Maven工程
2.添加Servlet相关依赖
新建的Maven工程中并无Servlet相关依赖,但当初Tomcat服务器中的examples文件夹中却有Servlet的相关例子,如图,其中右下角便有import javax.servlet.xxx
因此,在Tomcat根目录下存放jar包的目录,即lib目录中,一定有与此相关的jar包(此联想方式是受B站中一位大佬:狂神说Java的影响),如图,存在servlet-api.jar
因此去Maven仓库网中搜索servlet-api,选择较新的这个
再选择使用人数较多的这个
将其复制到自己Maven工程的pom.xml文件中并让Maven导入
3.编写HttpServlet的继承类
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!asdfsadf</h1>");
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
4.配置web.xml
Maven工程根据webapp原型模板自动生成了一个web.xml的模板,但这不是最标准的,最标准的模板是,Tomcat目录下的样例中的web.xml配置文件,最后是将Tomcat配置到此工程中,因此,Tomcat的原生配置模板优于Maven自动生成的配置模板。
最终根据实际项目需要,写入Servlet映射:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.zlc.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/h</url-pattern>
</servlet-mapping>
</web-app>
5.配置Tomcat服务器
之前写过,不再赘述:【详细步骤】Tomcat安装+主要目录分析+样例学习+IDEA中配置
6.启动项目
三、Servlet原理(码分析+原理图)
我们自己的实现类
进入HttpServlet类
进入HttpServlet类的父类GenericServlet类
最终进入Servlet接口
Servlet并未实现service方法,再回溯至上一个类,即HttpServlet类的父类GenericServlet类,发现其也未实现service方法
再回溯至上一个类,即HttpServlet类,发现它实现了service方法
由源码可以看出,service就是一个综合的服务入口,来检查请求类型,并调用正确的请求方法,因此,结合之前的流程,可以总结出下图: