目录
Servlet 概念
它是一个在 Web 服务器上的 JVM 内运行的 java 程序。它用于开发动态 Web 应用。
CGI 是进程模型 ,Servlet 线程模型 更轻量
Servlet API
java.lang.Object
|_extended byjavax.servlet.GenericServlet
|_extended byjavax.servlet.http.HttpServlet
有 3 种方法来创建一个 servlet:
1)通过扩展HttpServlet类
2)通过扩展GenericServlet类
3)通过实现Servlet接口
javax.servlet 中的API
原理
生命周期
Servlet 生命周期包含五个步骤:1)加载 Servlet,2)创建 Servlet 实例,3)调用init()一次,4)为每个客户端请求重复调用service(),5)调用destroy()
步骤 1:加载 Servlet
当 Web 服务器(例如 Apache Tomcat)启动时,servlet 容器部署并加载所有 servlet。
步骤 2:创建 Servlet 实例
一旦加载了所有 Servlet 类,servlet 容器就会创建每个 servlet 类的实例。 Servlet 容器每个 servlet 类只创建一个实例,并且对 servlet 的所有请求都在同一个 servlet 实例上执行。
步骤 3:调用init()方法
一旦实例化了所有 servlet 类,就会为每个实例化的 servlet 调用init()方法。此方法初始化 servlet。您可以在部署描述符(web.xml)文件中指定某些init参数。例如,如果 servlet 的值>= 0,则在 Web 容器启动期间立即调用其init()方法。
您可以在web.xml文件中指定元素,如下所示:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.beginnersbook.MyServletDemo</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
现在,在 Web 容器启动期间将调用相应 servlet 类com.beginnersbook.MyServletDemo的 init()方法。
注意:init()方法在 servlet 的生命周期中只调用一次。
步骤 4:调用service()方法
每次 Web 服务器收到 servlet 请求时,它都会产生一个调用service()方法的新线程。如果 servlet 是GenericServlet,那么请求由service()方法本身提供,如果 servlet 是HttpServlet,则service()方法接收请求并根据请求的类型将其分派给正确的处理程序方法。
例如,如果它是Get请求,则service()方法会通过使用请求参数调用doGet()方法将请求分派给doGet()方法。类似地,诸如Post,Head,Put等的请求被 servlet 的service()方法分派给相应的处理程序doPost(),doHead(),doPut()等。
注意:与只调用一次的
init()和destroy()不同,在 servlet 生命周期中可以多次调用service()方法。只要不销毁 servlet,就会为每个客户端请求调用service()方法。
在生命周期的所有 5 个步骤中,这是多次执行的唯一步骤。
步骤 5:调用destroy()方法
当 servlet 容器关闭时(这通常在我们停止 Web 服务器时发生),它卸载所有 servlet 并为每个初始化的 servlet 调用destroy()方法。
工作原理
1)当 Web 服务器(例如 Apache Tomcat)启动时,servlet 容器部署并加载所有 servlet。在此步骤中,Servlet 容器创建ServletContext对象。ServletContex是一个接口,它定义了可以用来与 servlet 容器通信的方法集。
注:每个 webapp 只有一个
ServletContext,这对所有 servlet 都是通用的。ServletContext有几个有用的方法,如addListener(),addFilter()等。现在我不解释它们,因为我将在一个关于ServletContext的单独文本中介绍它们。
2)一旦加载了 servlet,servlet 容器就会创建 servlet 类的实例。对于每个实例化的 servlet,调用其init()方法。
3)客户端(用户浏览器)向某个端口上的 Web 服务器发送 Http 请求。每次 Web 服务器收到请求时,servlet 容器都会创建HttpServletRequest和HttpServletResponse对象。HttpServletRequest对象提供对请求信息的访问,HttpServletResponse对象允许我们在将 http 响应发送到客户端之前对其进行格式化和更改。
servlet 容器生成一个新线程,该线程为每个客户端请求调用service()方法。service()方法根据请求类型将请求调度到正确的处理程序方法。
例如,如果服务器收到Get请求,则service()方法会通过使用请求参数调用doGet()方法将请求分派给doGet()方法。类似地,诸如Post,Head,Put等的请求被 servlet 的service()方法分派给相应的处理程序doPost(),doHead(),doPut()等。
4)当 servlet 容器关闭时,它会卸载所有 servlet 并为每个初始化的 servlet 调用destroy()方法
配置
# Java EE: XML Schemas for Java EE Deployment Descriptors
## welcome-file-list
自定义的欢迎页面文件, 默认index.html(htm 、jsp)
## load-on-startup
启动时是否加载 >=0 的会在启动时加载, 默认懒加载(请求过来时再加载)
## ServletRequest 接口
## RequestDispatcher 方法
forword(): 对客户的最终回复在下一页
include(): 对客户的最终回复还在当前页
## ServletConfig 接口
每个Servlet一个 对应<init-param>
## ServletContext 接口
全局容器创建一个 对应<context-param>
## ServletResponse 接口
## HttpSession
## Cookie
## HttpServletMapping
## Servlet 分页
## Servlet Weld
带有Weld 的 依赖注入
## Servlet 上传文件
multipart/form-data
## 服务 XML
## foreach 标签
## jsGrid 组件
json
## Servlet JSON 使用
## Servlet Http 标头
## Servlet 复选框
## Servlet 发送图像
## Servlet JQuery 列表
## Servlet FreeMarker JdbcTemplate
## JQuery 自动补全
## Servlet PDF
itext
## Servlet WAR 内读取CSV文件
opencsv
## EasyUI datagrid
easy-ui
## Servlet Restful 客户端
## Servlet Log4j
## Servlet 图表
jfreechart
## Servlet 读取网页
commons-validator
## 嵌入式Tomcat

被折叠的 条评论
为什么被折叠?



