0
点赞
收藏
分享

微信扫一扫

【Servlet】实例测试+Servlet接口源码分析+原理图

zibianqu 2022-11-02 阅读 86


因为本文的环境准备、具体步骤以及实例都是围绕最后Servlet原理的阐述这一目的来进行的,因此,把Servlet原理图的位置放在此处,也未尝不可,如下图:

【Servlet】实例测试+Servlet接口源码分析+原理图_servlet

文章目录

  • ​​一、环境准备​​
  • ​​1.Tomcat的安装​​
  • ​​2.Maven的安装​​
  • ​​二、具体步骤​​
  • ​​1.创建Maven工程​​
  • ​​2.添加Servlet相关依赖​​
  • ​​3.编写HttpServlet的继承类​​
  • ​​4.配置web.xml​​
  • ​​5.配置Tomcat服务器​​
  • ​​6.启动项目​​
  • ​​三、Servlet原理(码分析+原理图)​​

一、环境准备

1.Tomcat的安装

之前文章的链接:​​【详细步骤】Tomcat安装+主要目录分析+样例学习+IDEA中配置​​ (注:在IDEA中配置Tomcat服务器时,指定此引用路径)

作用:作为Web服务器,并在本地进行测试

2.Maven的安装

之前文章链接:​​【详细步骤】Maven的安装与配置+使用+镜像配置​​ (注:用IDEA自带的Maven配置起来不灵活,可事先自行下载并配置好镜像和仓库地址后,再在IDEA中指定此引用路径)

作用:进行项目管理,在Maven仓库中引用所需依赖(也可自动引入某些依赖的依赖)

二、具体步骤

1.创建Maven工程

【Servlet】实例测试+Servlet接口源码分析+原理图_maven_02


【Servlet】实例测试+Servlet接口源码分析+原理图_maven_03

2.添加Servlet相关依赖

新建的Maven工程中并无Servlet相关依赖,但当初Tomcat服务器中的examples文件夹中却有Servlet的相关例子,如图,其中右下角便有import javax.servlet.xxx

【Servlet】实例测试+Servlet接口源码分析+原理图_tomcat_04


因此,在Tomcat根目录下存放jar包的目录,即lib目录中,一定有与此相关的jar包(此联想方式是受B站中一位大佬:狂神说Java的影响),如图,存在servlet-api.jar

【Servlet】实例测试+Servlet接口源码分析+原理图_java_05

因此去Maven仓库网中搜索servlet-api,选择较新的这个

【Servlet】实例测试+Servlet接口源码分析+原理图_xml_06


再选择使用人数较多的这个

【Servlet】实例测试+Servlet接口源码分析+原理图_xml_07


【Servlet】实例测试+Servlet接口源码分析+原理图_xml_08


将其复制到自己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】实例测试+Servlet接口源码分析+原理图_maven_09


最终根据实际项目需要,写入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】实例测试+Servlet接口源码分析+原理图_java_10

三、Servlet原理(码分析+原理图)

我们自己的实现类

【Servlet】实例测试+Servlet接口源码分析+原理图_tomcat_11


进入HttpServlet类

【Servlet】实例测试+Servlet接口源码分析+原理图_tomcat_12


进入HttpServlet类的父类GenericServlet类

【Servlet】实例测试+Servlet接口源码分析+原理图_xml_13


最终进入Servlet接口

【Servlet】实例测试+Servlet接口源码分析+原理图_xml_14


【Servlet】实例测试+Servlet接口源码分析+原理图_java_15


Servlet并未实现service方法,再回溯至上一个类,即HttpServlet类的父类GenericServlet类,发现其也未实现service方法

【Servlet】实例测试+Servlet接口源码分析+原理图_servlet_16


再回溯至上一个类,即HttpServlet类,发现它实现了service方法

【Servlet】实例测试+Servlet接口源码分析+原理图_maven_17

由源码可以看出,service就是一个综合的服务入口,来检查请求类型,并调用正确的请求方法,因此,结合之前的流程,可以总结出下图:

【Servlet】实例测试+Servlet接口源码分析+原理图_xml_18


举报

相关推荐

0 条评论