JavaWeb--Servlet
作者:互联网
JavaWeb--Servlet
为了实现动态和前端用户交流的服务器程序,定制了servlet服务器程序规范(类似JDBC接口)
Tomcat等java程序遵守servlet接口规范,它可以直接调用servlet实现类,我们可以编写实现servlet子类,嫁接到不同的服务器容器使用(指Tomcat类的web服务器程序)
浏览器请求Servlet流程UML
浏览器请求静态资源的流程分析
浏览器调用Servlet流程分析
生命周期
-
init() 初始化阶段
-
Servlet 容器(比如: Tomcat)加载 Servlet,加载完成后,Servlet 容器会创建一个 Servlet 实例 并调用 init()方法,init()方法只会调用一次, Servlet 容器在下面的情况装载 Servlet:
-
Servlet 容器(Tomcat)启动时自动装载某些servlet,实现这个需要在 web.xml 文件中添加
<load-on-startup>1</load-on-startup> 1 表示装载的顺序
-
在Servlet 容器启动后,浏览器首次向 Servlet 发送请求
-
Servlet 重新装载时(比如 tomcat 进行 redeploy【redeploy 会销毁所有的 Servlet 实例】), 浏览器再向 Servlet 发送请求的第 1 次
-
-
-
service()处理浏览器请求阶段
- 每收到一个 http 请求,服务器就会产生一个新的线程去处理[线程]
- 创建一个用于封装 HTTP 请求消息的 ServletRequest 对象和一个代表HTTP响应消息的ServletResponse对象
- 然后调用 Servlet 的 service()方法并将请求和响应对象作为参数传递进去
-
destroy()终止阶段
- 当 web 应用被终止,或者 Servlet 容器终止运行,或者 Servlet 类重新装载时,会调用destroy()方法,比如重启 tomcat ,或者 redeploy web 应用
HttpServlet
在实际项目中,都是使用继HttpServlet类开发Servlet程序
它主要实现了对Http使用Servlet的流程代码基本封装,使用时只要重写doGet、doPost等方法即可快速实现服务
注意事项与细节
-
Servlet 是一个供其他 Java 程序(Servlet 引擎)调用的 Java 类,不能独立运行
-
针对浏览器的多次 Servlet 请求,通常情况下,服务器只会创建一个 Servlet 实例对象, 也就是说 Servlet 实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web 容器退出/或者 redeploy 该 web 应用,servlet 实例对象才会销毁 【示意图】
-
在 Servlet 的整个生命周期内,init 方法只被调用一次。而对每次请求都导致 Servlet 引
擎调用一次 servlet 的 service 方法。
-
对于每次访问请求,Servlet 引擎都会创建一个新的 HttpServletRequest 请求对象和一个
新的 HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet
的 service()方法,service 方法再根据请求方式分别调用 doXXX 方法
-
如果在<servlet>元素中配置了一个<load-on-startup>元素,那么 WEB 应用程序在启动时, 就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init()方法, (定时发送邮件的服务/自动启动->完成任务)
注解方式
通过使用注解可以不需要使用xml来配置servlet相关参数,即可让servlet类被web服务容器实例化使用
@WebServlet(urlPatterns = {"/ok1", "/ok2"})
-
urlPatterns
-
匹配
- 精确匹配urlPatterns = "/ok/zs"
- 目录匹配urlPatterns = "/ok/*"
- 扩展名匹配urlPatterns = "*.action" | urlPatterns = "*.do"
- 任意匹配urlPatterns = "/" | urlPatterns = "/*"
-
注意
-
当 Servlet 配置了 "/", 会覆盖 tomcat 的 DefaultServlet, 当其他的 utl-pattern 都匹配不上时 ,都 会 走 这 个 Servlet, 这 样 可 以 拦 截 到 其 它 静 态 资 源 , 比 如 D:\hspedu_javaweb_temp\hspedu_servlet\web\hi.html
The default servlet for all web applications, that serves static resources. (这个DefaultServlet是处理静态资源的,一旦拦截,静态资源不能处理)
-
当 Servelt 配置了 "/*", 表示可以匹配任意访问路径
-
建议不要使用 / 和 /*, 建议尽量使用精确匹配
-
-
优先级遵守: 精确路径 > 目录路径 > 扩展名路径 > /* > /
-
标签:web,调用,JavaWeb,--,Servlet,urlPatterns,servlet,请求 来源: https://www.cnblogs.com/shaozelong/p/16157331.html