Servlet的一点点简介:
①、Servlet是一个按照Servlet规范编写的Java类,基于HTTP协议,在服务器端运行。
②、当服务器收到客户端的请求是Servlet可以动态的生成HTML内容,对客户端进行响应。
一句话Servlet:响应 Web 应用程序上下文中的 HTTP 请求
Servlet生命周期:
加载、实例化—->初始化—>就绪状态—>销毁
①、加载和实例化:在第一次请求Servlet时,Servlet容器将会创建Servlet实例;
②、初始化:调用 init() 方法进行初始化,一般只调用一次;
③、响应请求的就绪状态:调用Service()处理接收到的客户端请求,且根据用户的请求方式,调用doPost或者doGet方法;
④、销毁:调用destory()实现销毁,Servlet 由 JVM 的垃圾回收器进行垃圾回收。
web应用终止运行、Servlet容器终止运行、Servlet容器装载新的实例化时Servlet调用destory方法释放所有占用资源。
Servlet容器装载Servlet的时间段:
a、web.XML文件中Servlet 的 load-on-startup 配置项大于 0,那么在 Context 容器启动的时候就会被实例化
b、在Servlet容器启动后,客户首次向Servlet发送请求
c、Servlet类文件被更新后,重新装载Servlet
※Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。
Servlet运行过程
①、由客户端发出Servlet请求到web服务器。
②、web服务器接到请求之后,首先检查是否已经创建了该Servlet的实例对象:
a、未装载Servlet实例对象:加载并初始化一个Servlet实例对象,调用init()方法;
b、已装载Servlet实例对象:
创建一个用于封装HTTP请求消息的HttpServletRequest对象
创建一个代表HTTP响应消息的HttpServletResponse对象,
然后调用Servlet的service()方法,并将请求和响应对象作为参数传递进去。
③、WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
Servlet细节介绍
https://www.ibm.com/developerworks/cn/java/j-lo-servlet/Servlet详尽介绍
https://www.ibm.com/developerworks/cn/education/java/j-intserv/index.html
Servlet接口的实现类
Servlet接口中的方法:
方法名称 | 功能描述 |
---|---|
void init(ServletConfig config) | 由 Servlet 容器调用,用于完成Servlet对象在处理客户请求前的初始化工作 |
void service(ServletRequest req, ServletResponse res) | 由 Servlet 容器调用,用来处理客户端的请求 |
void destroy ( ) | 由 Servlet 容器调用,释放Servlet对象所使用的资源 |
ServletConfig getServletConfig () | 返回ServletConfig 对象,该对象包含此 Servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init( ) 方法的对象 |
String getServletInfo ( ) | 返回有关 Servlet 的信息,比如作者、版本和版权。返回的字符串是纯文本,而不是任何种类的标记(如 HTML、XML等) |
ServletConfig接口:
在Servlet初始化过程中获取配置信息,一个Servlet只有一个ServletConfig对象
方法名称 | 功能描述 |
---|---|
String getInitParameter(String name) | 获取web.xml中设置的以name命名的初始化参数值 |
ServletContext getServletContext( ) | 返回Servlet的上下文对象引用 |
ServletContext接口:
获取Web应用上下文,与Servlet容器进行通信
方法名称 | 功能描述 |
---|---|
String getInitParameter(String name) | 获取名为name的系统范围的初始化参数值,系统范围的初始化参数可在部署描述符中使用<context-param> 元素定义 |
void setAttribute(String name, Object object) | 设置名称为name的属性 |
Object getAttribute(String name) | 获取名称为name的属性 |
String getRealPath(String path) | 返回参数所代表目录的真实路径 |
void log(String message) | 记录一般日志信息 |
GenericServlet抽象类:
提供了Servlet与ServletConfig接口方法的默认实现(service( )方法除外)
方法名称 | 功能描述 |
---|---|
public void init ( ServletConfig config ) | 对Servlet接口中init()方法的实现,对ServletConfig实例进行了保存。此方法还有一个无参的重载方法,可用于子类中重写 |
public String getInitParameter (String name ) | 返回web.xml中名称为name的初始化参数的值 |
public ServletContext getServletContext() | 返回ServletContext对象的引用 |
HttpServlet抽象类:继承自GenericServlet
处理HTTP协议的请求和响应
方法名称 | 功能描述 |
---|---|
public void service(ServletRequest req, ServletResponse res) | 对GenericServlet类中service()方法的实现,将请求分发给protected void service(HttpServletRequest req, HttpServletResponse res) |
protected void service(HttpServletRequest req, HttpServletResponse res) | 接收HTTP 请求,并将它们分发给此类中定义的 doXXX( ) 方法 |
protected void doXXX(HttpServletRequest req, HttpServletResponse res) | 根据请求方式的不同分别调用的相应处理方法,如doGet()、doPost()等 |
ServletRequest接口
获取客户端请求的数据;
方法名称 | 功能描述 |
---|---|
Object getAttribute(String name) | 获取名称为name的属性值 |
void setAttribute(String name,Object object) | 在请求中保存名称为name的属性 |
void removeAttribute(String name) | 清除请求中名字为name的属性 |
String getCharacterEncoding( ) | 返回请求体所使用的字符编码 |
void setCharacterEncoding(String charset) | 设置请求体的字符编码 |
String getParameter(String name) | 返回指定请求参数的值 |
String[ ] getParameterValues(String name) | 返回指定请求参数的全部值 |
RequestDispatcher getRequestDispatcher(String path) | 返回指向指定路径的请求分发对象 |
HttpServletRequest接口
继承ServletRequest接口中的方法,还增加了一些用于读取HTTP请求信息的方法
方法名称 | 功能描述 |
---|---|
String getContextPath( ) | 返回请求URI中表示请求上下文的路径,上下文路径是请求URI的开始部分 |
Cookie[ ] getCookies( ) | 返回客户端在此次请求中发送的所有cookie对象 |
HttpSession getSession( ) | 返回和此次请求相关联的session,如果没有给客户端分配session,则创建一个新的session |
String getMethod( ) | 返回此次请求所使用的HTTP方法的名字,如GET、POST |
String getHeader(String name) | 返回指定的请求头信息 |
ServletResoponse接口
设置响应参数和向客户端发送响应数据
方法名称 | 功能描述 |
---|---|
PrintWriter getWriter( ) | 返回PrintWriter对象,用于向客户端发送文本 |
String getCharacterEncoding( ) | 返回在响应中发送的正文所使用的字符编码 |
void setCharacterEncoding(String charset) | 设置响应的字符编码 |
void setContentType(String type) | 设置发送到客户端的响应的内容类型,此时响应的状态属于尚未提交 |
HttpServletResponse接口
继承ServletResponse接口中的方法,还增加了适用于HTTP响应的新方法
方法名称 | 功能描述 |
---|---|
void addCookie(Cookie cookie) | 增加一个cookie到响应中,这个方法可多次调用,设置多个cookie |
void addHeader(String name, String value) | 将一个名称为name,值为value的响应报头添加到响应中 |
void sendRedirect(String location) | 发送一个临时的重定向响应到客户端,以便客户端访问新的URL |
void encodeURL(String url) | 使用session ID对用于重定向的URL进行编码 |
Servlet应用步骤:
①、创建Servlet类
②、Servlet类继承HttpServlet
③、重写doPost()或doGet()方法
④、部署Servlet
⑤、编译Servlet到/WEB-INF/classes目录
⑥、编辑部署描述文件web.xml
<servlet>
<servlet-name>
<filter-class>
<servlet-mapping>
<servlet-name>
<url-pattern>
⑦、启动Tomcat,访问Servlet
web.xml配置
Servlet初始化参数配置:
//初始化参数只对一个Servlet有效
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>demo.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>initParam</param-name>
<param-value>Hello Servlet</param-value>
</init-param>
</servlet>
Servlet初始化参数获取:
String initParam = this.ServletConfig().getInitParam("initParam"); //获取到的值是一个字符串;
Servlet上下文参数配置:
<web-app>
<context-param>
<param-name>contextParam</param-name>
<param-value>Hello Servlet</param-value>
</context-param>
<!--省略其他配置-->
</web-app>
Servlet上下文参数获取:
String contextParam = this.getServletContext().getInitParameter("contextParam"); //根据web.xml文件中设置的参数名进行获取