博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet技术和Servlet生命周期:
阅读量:4608 次
发布时间:2019-06-09

本文共 2571 字,大约阅读时间需要 8 分钟。

Java Servlet是和平台无关的服务器组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户通信采用“请求/响应”的模式。
Servlet完成的功能:
创建并返回基于客户请求的动态HTML页面。
创建可嵌入到现有HTML页面中的部分HTML页面。
与其他服务器资源进行通信。
一个类要成为Servlet类必须实现javax.servlet.Servlet接口。
GenericServlet是通用的,不特定任何协议的servlet,他实现了Servlet接口,而HttpServlet继承了GenericServlet,因此HttpServlet实现了Servlet接口,所以我们定义的Servlet只需要继承HttpServlet父类即可。
Servlet接口中定义了一个service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest与ServletResponse转换为HttpServletRequest与HttpServletResponse。
转换完毕后,会调用HttpServlet类中自己定义的service方法。
在该service方法中,首先获得请求的方法名,然后根据方法名调用对应的doXX方法,比如说请求方法为Get,那么就去调用doGet方法,请求方法为POST,那么就去调用doPost方法。
在HttpServlet类中所提供的doGet,doPost等方法,都是直接返回错误信息,所以我们需要在自己定义的Servlet类中override这些方法。
Servlet的生命周期:
init方法:负责初始化Servlet对象;
service方法:负责响应客户的请求:
destroy:当Servlet对象退出生命周期时,负责释放占用的资源。
ServletRequest接口中封装了客户请求的信息,如客户的请求方式,参数名,参数值。
Servlet的初始化阶段:
Servlet容器启动时自动装载些Servlet;
 为了验证是否自动加载Servlet类:我们必须重新配置Servelt:
      <servlet>
    <servlet-name>InitServlet</servlet-name>
    <servlet-class>com.javaweb.servlet.InitServlet</servlet-class>
    <load-on-startup>9</load-on-startup>
  </servlet>
在servlet容器启动后,客户首次向Servlet发出请求;
Servlet的类文件更新后,重新装载Servlet。
Servlet被装载后,Servlet容器会创建一个servlet实例并且调用Servlet的init()方法进行初始化,在Servlet的整个生命周期中,init方法只会被调用一次。
init()方法实例:
package com.javaweb.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InitServlet extends HttpServlet
{
@Override
public void init(ServletConfig config) throws ServletException
{
    System.out.println("init invoked!!");
}
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        System.out.println("doget invoked!!");
    }
}     
Servlet响应客户端的请求(service)
对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理请求,并通过ServletResponse对象向客户返回响应结果。
对于Tomcat来说,它会将客户传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
private Hashtable<String ,String[]>paramHashStringArray = new Hashtable<String,String[]>();这是一个String->String的键值映射。
Servlet的终止阶段:当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新加载Servlet的新实例时,Servlet容器会先调用Servlet的dstroy方法。在destroy方法中,可以释放servlet 所占的资源。
某些Servlet在web.xml文件中只有<servlet>元素而没有<servlet-mapping>元素,这样我们就无法通过url地址的方式访问这个Servlet了,这种Servlet通常会在<servelt>元素中配置一个<load-on-start>子元素,让容器在启动时自动加载Servlet并且调用其init方法完成一些全局性的初始化工作。

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/06/3002718.html

你可能感兴趣的文章
poj 1753 Flip Game
查看>>
在深信服实习是怎样的体验(研发测试岗)
查看>>
Linux免密码登陆
查看>>
SpringMVC中文件的上传(上传到服务器)和下载问题(二)--------下载
查看>>
Socket & TCP &HTTP
查看>>
osip及eXosip的编译方法
查看>>
Hibernate composite key
查看>>
[CF Round #294 div2] D. A and B and Interesting Substrings 【Map】
查看>>
keepalived+nginx安装配置
查看>>
我的2015---找寻真实的自己
查看>>
android编译遇到问题修改
查看>>
解决Ubuntu18.04.2远程桌面Xrdp登录蓝屏问题
查看>>
python_封装redis_hash方法
查看>>
《windows程序设计》获取窗口尺寸(05)
查看>>
【重点突破】——Canvas技术绘制音乐播放器界面
查看>>
监控级联时各个层的PoE交换机怎么选?
查看>>
存储过程
查看>>
ADO.NET--SqlConnection、SqlCommand的学习
查看>>
PCA降维处理
查看>>
random模块
查看>>