zoukankan      html  css  js  c++  java
  • servlet生命周期与工作原理

    一、什么是servlet

    Servlet是一种服务器端的Java应用程序,可以生成动态的Web页面。

    它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。

    二、Servlet生命周期分为三个阶段:

    1、初始化阶段  调用init()方法

    2、响应客户请求阶段  调用service()方法

    3、终止阶段  调用destroy()方法

    Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。

    在Servlet的整个生命周期内,init()方法只被调用一次

     

     

    1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

    2)它的值必须是一个整数,表示servlet应该被载入的顺序

    2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

    3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

    4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

    5)当值相同时,容器就会自己选择顺序来加载。

    所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。

     

     

    三、工作原理:

    Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。

    在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

     

    四、小知识:

    1、继承关系: GenericServlet->HttpServlet->Servlet

    HttpServlet是特定于HTTP协议的类

     

    2、get方式与post方式的区别:

    get方式以显式提交表单,可以在URL(地址栏)看见我们传的参数
    post方式是隐式传值,不可见。post方式相对安全一些

    get方式能够提交的参数大小有限制,而post没有;

     

    3、getAttribute()与getParamter()的区别:

    getAttribute是返回对象,getParameter返回字符串 

    总的来说:request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。

     

    4、cookie与session的区别:

    cookie:采取在客户端保持状态的方案,不是很安全

    session:采取在服务器端保持状态的方案,比cookie安全

    一般将登陆信息等重要信息存放为SESSION, 其他信息如果需要保留可以放在COOKIE中

     

    5、设置session过期时间的两种方法:

    (1)在主页面中写入下面两句: 

    HttpSession session=request.getSession(true); 
    session.setMaxInactiveInterval(3600);//3600秒,注意服务器端的3600秒,而不是客户端的

    (2)在项目的web.xml中设置:

    <session-config>
    <session-timeout>60</session-timeout>        这里的60就是60分钟。
    </session-config>

     

    6、sesson的两种实现方式:

    通过cookie或者是URL重写

     

    7、

    1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。

    2.request.setAttribute()和request.getAttribute()配对使用,作用域是请求和被请求页面之间。request.setAttribute()是只在此action的下一个forward需要使用的时候使用;request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。

    3.request.getParameter()表示接收参数,参数为页面提交的参数。包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter()),而且接收参数返回的不是Object,而是String类型。

     

    8、forward()与redirect()的区别

    forward:内部跳转

     

    redirect:重定向

     

    1.从地址栏显示来说
    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
    redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

    2.从数据共享来说
    forward:转发页面和转发到的页面可以共享request里面的数据.
    redirect:不能共享数据.

    3.从运用地方来说
    forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
    redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

    4.从效率来说
    forward:高.
    redirect:低.

     

     

     

     

     

     

  • 相关阅读:
    PAT 1018. 锤子剪刀布
    PAT 1017. A除以B
    PAT 1016. 部分A+B
    PAT 1015. 德才论
    PAT 1014. 福尔摩斯的约会
    PAT 1013. 数素数
    PAT 1012. 数字分类
    PAT 1011. A+B和C
    292. Nim Game
    412. Fizz Buzz
  • 原文地址:https://www.cnblogs.com/stellar/p/5266852.html
Copyright © 2011-2022 走看看