为了实现动态和前端用户交流的服务器程序,定制了servlet服务器程序规范(类似JDBC接口)
Tomcat等java程序遵守servlet接口规范,它可以直接调用servlet实现类,我们可以编写实现servlet子类,嫁接到不同的服务器容器使用(指Tomcat类的web服务器程序)
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()处理浏览器请求阶段
destroy()终止阶段
在实际项目中,都是使用继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
匹配
注意
当 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 配置了 "/*", 表示可以匹配任意访问路径
建议不要使用 / 和 /*, 建议尽量使用精确匹配
优先级遵守: 精确路径 > 目录路径 > 扩展名路径 > /* > /