现在的位置: 首页 > 综合 > 正文

Java Servlet

2013年09月04日 ⁄ 综合 ⁄ 共 1920字 ⁄ 字号 评论关闭

      Servlet(Server+Applet,服务器端的小程序)是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户端请求与服务器响应的中间层。Servlet是位于Web服务器内部的服务器端的Java应用程序,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

      Servlet的工作原理:

    (1)客户端发送请求至服务器。

    (2)服务器启动并调用Servlet,Servlet根据根据客户端请求生成响应内容,并发给服务器。

    (3)服务器将响应内容发回给客户端。

      Servlet的生命周期:

    (1)Web服务器(如Tomcat等)创建了一个Servlet实例(在很多客户端请求时,也只创建一个Servlet实例)。

    (2)Web服务器调用Servlet实例的init()方法进行初始化(只初始化一次)。

    (3)当某一个客户端请求到达Web服务器时,Web服务器创建一个请求对象(HttpServletRequest)和一个相应对象(HttpServletResponse)。

    (4)Web服务器从请求的URL中找到正确的Servlet,并为其分配一个处理线程。

    (5)Web服务器调用Servlet的service()方法,传递请求和响应对象作为参数。service()方法可能自己处理请求,也可能调用其他方法(如doGet()或doPost()方法)处理请求,获得请求所需要的消息。

    (6)Web服务器将带有回应消息的响应对象转换为HTTP回应发给客户,Servlet线程结束,同时删除创建的请求和响应对象。

      Servlet的创建和初始化操作只做一次,当Web服务器不再需要Servlet时(一般是当Web服务器关闭时),调用Servlet的destroy()方法进行对象的销毁操作。当多个请求到达Web服务器时,将启动多个线程来处理请求。

    面试题:

     1、Servlet的基本流程:加载类—>实例化—>初始化—>服务—>销毁。

     Servlet的实例化操作是由Servlet容器来做的,而且只实例化一次,Servlet是单实例多线程的,执行destroy()方法后,Servlet容器会回收Servlet实例所占用的资源,但何时进行垃圾回收是不能保证的。

     2、Servlet API中forward()和redirect()的区别:从地址栏显示来说,前者是请求转发,浏览器的URL地址是不会改变的,而后者是重定向,地址会改变,自然也可以跳转到其他服务器上的资源;从数据共享来说,前者的转发页面和转发到的页面可以共享request中的数据,而后者不能共享数据。

     3、get和post两种请求共同点和区别:

     get请求处理将参数信息都带在URL中,HTTP协议并没有对URL的长度进行限制,但IE等浏览器对URL的长度有限制,例如IE的限制是2083字节,FireFox等理论上对URL没做限制,取决于操作系统的限制。get请求的参数通过URL地址带参数传送过去,因此可以再地址栏中看到,而post请求的参数是不会看到的。get请求可以由Servlet的doGet方法进行处理,post请求可以由Servlet的doPost请求进行处理。get请求是默认的。

      4、Servlet执行的顺序:

      (1)客户机将请求发送给服务器。

      (2)服务器从浏览器的地址栏获得请求的信息,并根据Web.xml配置文件找到相应的Servlet执行。如果找不到,会报404错误。

      (3)如果是第一次请求,那么会实例化该Servlet,调用init()方法进行初始化,该方法在Servlet的生命周期里只执行一次,然后分配线程进行响应。如果不是第一次访问,那么会直接分配一个线程进行客户的响应。

      (4)在Servlet响应之前,服务器会产生request和response对象,并且把客户请求的信息封装到request对象中,然后把这两个对象传递给Servlet的service()方法执行。

      (5)service()根据请求的方式来调用不同的方法执行。比如get请求,service()方法会request,response对象传递给doGet()方法执行,把执行后的结果保存到response对象里面,返回给客户。

      (6)服务器关闭后,会调用Servlet的destroy()方法进行销毁。

 

抱歉!评论已关闭.