Servlet工作原理

Servlet工作原理

Servlet是运行在Servlet容器中的,由Servlet容器来负责,Servlet实例的查找、创建及整个生命周期的管理。
Servlet生命周期:

  1. 类装载及实例的创建阶段:
    默认情况下,servlet实例是在接受第一次请求时进行创建并且以后的请求进行复用(单例),如果servlet需要进行一些复杂的操作,需在初始化时就完成eg:打开文件、初始化网络连接,可以配置在服务器启动时便创建实例,具体配置方法为在声明servlet标签中添加
    <load-on-satrtup>/</load-on-startup>标签。

  2. 初始化init(ServletConfig)
    一旦Servlet实例被创建,将会调用Servlet的init方法,同事传入ServletConfig实例,传入Servlet的相关配置信息,init方法在整个Servlet声明周期中只会被调用一次。

  3. 服务Service(HttpServletRequest request HttpServletResponse response)
    为提高效率,Servlet规范要求一个Servlet实例必须能同时服务于多个客户端请求,即Service()方法运行在多线程的环境下(每一个请求在Servlet容器中都会产生一个线程来调用Service方法,但需要注意每个线程也共享Servlet对象的成员变量),Servlet开发者必须保证该方法的线程是安全的。另外HttpServletRequest对象封装的事用户请求的信息,此对象其他相应的方法获取封装的信息,用此对象可获得用户提交的信息,HttpServletResponse对象是用来响应用户的请求,用此对象可获得用户想要得到的信息。

  4. 销毁destory()
    服务器关闭时会调用destory方法,销毁Servlet实例。当Servlet容器将决定结束某个Servlet时,将会调用destory()方法,在destory方法中释放资源,一旦destory方法被调用Servlet容器将不会再发送任何请求给这个实例,若Servlet容器再次使用该Servlet实例,需要重新实例化该Servlet实例。

Servlet执行流程

Web服务器接到HTTP请求后,Web服务器将请求移交给Servlet容
器,Servlet容器首先对所请求的URL进行解析并根据Web.xml配置
文件找到相应的处理Servlet,同事将request、response对象传递给
它,Servlet通过request对象可知道客户端的请求者请求信息以及 
其他的信息等,Servlet在处理完请求后会把所有需返回的信息放入
response对象中并返回到客户端,Servlet一旦处理完请求,Servlet
容器会刷新response对象,并把控制权重新返回给Web服务器。

创建Servlet的时机.

1.Servlet容器启动时,读取Web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象init方法。
2. 在Servlet容器启动后,客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,若没有则根据客户的请求创建HttpRequest、HttpReponse对象,从而调用Servlet对象的Service方法。
3. Servlet容器在启动时创建的Servlet是由在Web.xml文件中为 Servlet 设置的<load-on startup>
属性决定的,同一类型的Servlet对象在Servlet容器中以单例的形式存在。

<Servlet>
	<servlet-name>init</servlet-name>
	<servlet-class>org.xl.servlet.Intservlet</servlet-class>
	<load-on-satrtup>/</load-on-startup>
</Servlet>

Servlet与JSP比较

它们有很多相似之处,都可以生成动态网页
1.JSP优点是:擅长网页制作,生成动态页面比较直观;
缺点:不容易跟踪与拍错;
2.Servlet是纯Java语言,擅长处理流程和业务逻辑;
缺点:生成动态网页不直观;
3.Servlet运行速度比CGI快,因为使用了多线程;
4.Servlet使用了标准的api,可被许多web服务支持;
5.Servlet与系统无关,一次编译多次使用,也正是Java的特性;

Tomcat与Servlet如何工作的

1.Web Client 向Servlet容器发出Http请求;
2.Servlet容器接收Web Client 的请求;
3.Servlet容器创建一个Http Request对象,将Web Client请求信息封装到这个对象中;
4.Servlet容器创建一个HttpResponse对象;
5.Servlet容器调用HttpServlet对象的Service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet对象;
6.HttpServlet调用HttpRequest对象相关方法获取Http请求信息;
7.HttpServlet调用HttpResponse对象的相关方法生成响应数据;
8.Servlet容器把HttpServlet的响应结果传给WebClient;

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值