深入解析:初识Servlet与Web交互

什么是Servlet

通过下面三个角度理解Servlet

  • Servlet是JavaEE平台下的技术规范,基于Java语言编写并建立Servlet规范的程序称为服务端程序(服务端应用狭义上也称为Servlet)
  • Web服务器(比如Tomcat、Jetty等)完成了Servelt规范中定义的接口和服务,为Servlet提供了运行环境,同时也称Web服务器为Servlet容器
Servlet与Tomcat的关系
  • 开发者只要按照Servlet规范开发的Servlet,理论上许可部署到任何实现了该规范的Web服务器中,无需修改代码,保证了JAVA Web应用的跨容器移植性

实现了Servlet规范的服务端工具就是从广义上讲Servlet指的是JAVAEE中的Servlet规范,从狭义上讲Servlet指的

Servlet广义与狭义

再理解一下什么是规范和实现:在JAVA中规范指的是为实现特定机制定义的接口和抽象类,而实现类指的是接口和抽象类的实现类,也就是说我们只要熟悉了Servlet规范中的核心接口和抽象类,就允许通过构建它们而开发出服务端脚本

Web应用交互工作流程

1. 用户执行触发请求:访问URL)就是用户在浏览器查询窗口输入URL,比如http://localhost:8080/OnlineStore/user/login?username=test&pwd=123,或者点击页面按钮(点击页面按钮或者链接本质也

URL

什么是URL以及URI:

日常生活中所说的链接就是URL就
URL包含协议(http)、IP/域名(localhost)、端口(8080)、应用上下文(OnlineStore)、Servlet映射路径(user/login)、请求参数(username/pwd)

URL中去除协议、IP/域名以及端口号剩余的部分称为URI

URL与URI

这里要明白浏览器上输入的网址叫做URL,本质是Web资源的访问路径

2. 浏览器解析URL同时查询DNS(使用域名访问网页的话):

  1. URL拆解:浏览器拆分URL中的协议(http)、主机(localhost)、端口(8080)、路径(/OnlineStore/user/login)以及参数(?username=test&pwd=123)
  2. DNS 解析:若借助域名(如www.onlinestore.com)访问Web资源,浏览器会查询DNS服务器解析域名为IP地址

这里要明白什么是域名,域名与URL之间是什么关系以及如何进行转换

3. 浏览器与Web服务器(Tomcat)之间凭借TCP\IP协议建立连接

4. 浏览器发送HTTP请求报文:浏览器构造HTTP请求报文,将请求报文通过已建立的TCP连接发送给服务器(Tomcat)

HTTP请求

HTTP报文包括请求行、请求头、空白行和请求体四部分结构:

  • 请求行:包括请求方法、请求URL、请求协议以及协议版本号
  • 请求头:包括客户端信息、请求体大小等信息
  • 空白行:分割请求头和请求体部分,表示请求头结束
  • 请求体:包含客户端发送给服务器的信息(部分请求方法才会有请求体)

如下所示:

通常在构建中使用的请求方法为GET和POST,其中GET方法的请求信息会存储在URL中,而POST方法的请求信息会存储在请求体中,通常当客户端向服务器发送信息时使用GET请求方法,当客户端向服务器请求信息时使用POST请求方法

这里要明白在访问URL的时候浏览器会向服务器发送请求报文,其中包含着请求的信息

5. 服务器(Tomcat)接收并解析浏览器发送的请求:Tomcat作为Servlet容器,监听8080端口自己配置的端口),通常在接受请求后会执行以下操作:就是(HTTP协议默认监听8080端口,也可以

  1. 连接管理:通过线程池分配线程处理请求,避免频繁创建线程

  2. 请求解析:

    1. 解析HTTP报文,提取请求方法(GET/POST)、请求路径(/OnlineStore/user/login)、请求头(Host/User-Agent等)以及请求参数
    2. 根据Tomcat配置的应用上下文以及URL路径前缀,找到已部署的 Web应用

这里要明白服务器接受请求的端口号、协议与浏览器中URL中输入的端口号和协议要一致,否则服务器无法接收到请求(就好比连连看,只有相同的才能消除),同时必须明白Tomcat在接收到请求后会根据URL中的应用上下文(就是用来指定服务器中哪个项目的)匹配Tomcat中的具体项目

6. Tomcat匹配Servlet(核心):Tomcat需找到哪个Servlet处理当前请求,依赖以下映射规则:

  1. 查找部署描述符:

    1. 传统方式:解析Web应用的web.xml,查找<servlet-mapping>标签,匹配url-pattern(如/user/login)对应的Servlet类(如LoginServlet)
    2. 注解方式:扫描@WebServlet("/user/login")注解,关联Servlet类
  2. 加载Servlet(首次访问时):若Servlet未加载,Tomcat通过类加载器加载LoginServlet类并创建实例,接着调用Servlet接口中的init()手段(初始化,仅执行一次)

这里需明白Tomcat在找到指定的具体项目后会解析浏览器请求的资源路径或者业务处理的Servlet路径,这个路径与Servlet构建类的匹配包括xml配置文件中进行配置和注解两种方式

7. Tomcat调用Servlet的service()方式:Tomcat为当前请求分别创建HttpServletRequest以及HttpServletResponse对象,其中分别包含了请求的关键信息以及响应的关键信息(请求头、请求体、响应头、响应体等),然后调用Servlet的service()方式,在service()办法中完成业务逻辑通过(同时HttpServletRequest以及HttpServletResponse对象会以参数的形式传递到技巧中,能够调用其中的方法获取或添加信息)

8. Servlet构建响应:Servlet在完成业务逻辑后通过HttpServletResponse对象构建响应,响应内容均需要在service()方法达成,包括响应头、响应体和转发、重定向等

9. Tomcat返回HTTP响应报文:Tomcat将Servlet构建的HttpServletResponse转换为HTTP响应报文经过之前建立的TCP连接发送回浏览器

HTTP响应报文结构包括响应行、响应头、空白行和响应体

  • 响应行:包括响应协议以及协议版本号、响应状态码和状态码描述
  • 响应头:包含了服务器和响应的元信息,比如:服务器的类型、返回数据的类型、缓存控制等
  • 空白行:分割响应头和响应体部分,表示响应头结束
  • 响应体:服务器返回给客户端的具体内容,包含了请求所获取的资源信息

结构如下:

​10. 浏览器渲染响应:浏览器在接收到服务器Tomcat发送的响应后将响应内容渲染到浏览器中进行展示

​如有错误请指出,不喜勿喷

posted @ 2025-09-01 14:18  yjbjingcha  阅读(7)  评论(0)    收藏  举报