servlet的对象创建和生命周期

servlet的对象创建和生命周期


1、谁创建servlet?

A:由读取web.xml文件的服务器软件来进行创建

2、何时创建servlet对象?

A:1)web程序,服务器端只有一个,但是访问的客户端数量没法控制

2)客户端访问的时间没有办法限制

在Tomcat服务器端,一个Servlet类一次只创建一个servlet对象,该对象通过线程(对用户使用该servlet的时间进行分段)使用

3)servlet对象创建的时间有两个:

(1)服务器启动时创建,多出现在项目运行阶段,会检查所有当前服务器上的项目,检测项目中web.xml文件,在检测的同时,看到<servlet-class>,就会自动的创建对象,并且保持在内存中。

(2)当用户第一次访问服务器上一个新的servlet时,在开发过程中。

4)生命周期:

servlet的生命周期:只servlet对象在服务器内存中从创建到调用,到销毁的整个过程,主要研究高过程中哪些方法对我们开发有用。

(1)实例化:当客户端通过URL请求的时候,web容器根据web.xml配置自动调用该servlet的构造方法,实例化对象。

(2)初始化:该servlet对象调用init()方法,读取web.xml中该servlet的配置信息,为service()方法提供相关数据。 

(3)服务:通过该对象调用service()方法,如果是继承HttpServlet,则根据请求头信息中的请求方法,调用对象的doGet()/doPost()

(4)销毁:不是在service()方法调用完后,立即调用,而是由JVM来决定。当JVM需要销毁一些对象,释放内存空间的时候,才会去调用该实例的destroy()方法。


Servlet学习笔记 - 廖润明 - 异次元蓝客


3、servlet中常用的对象

(1)interface:javax.servlet.Servlet

Method:init(ServletConfig config)

 service(ServletRequest req,ServletResponse res)

destory()

public ServletConfig getServletConfig();//得到web.xml中的配置信息

Servlet学习笔记 - 廖润明 - 异次元蓝客

(2)abstract Class:


javax.servlet.GenericServlet 

//重写父接口中的所有方法

    //从web.xml文件中得到初始化参数的值

      String  getInitParameter(String name)

      //代表web.xml配置文件

      public ServletConfig getServletConfig()

      //代表服务器中该项目的访问路径(上下文对象即项目名)

      public ServletContext getServletContext()


javax.servlet.http.HttpServlet

       doXXXX()  

//返回上次修改 HttpServletRequest 对象的时间,该时间是自格林威治标准时间1970年 1月1日午夜起经过的毫秒数

    protected long getLastModified(HttpServletRequest req)


(3) HttpServletRequest(interface) 实现了ServletRequest接口,为 HttpServlet提供请求信息.在 HTTP 协议中,规定了很多信息:请求头信息、请求内容。

Servlet学习笔记 - 廖润明 - 异次元蓝客

Servlet学习笔记 - 廖润明 - 异次元蓝客

(4)HttpServletResponse(interface):代表服务器向浏览器返回的响应直接输出内容到浏览器,使用Servlet输出HTML页面   

       PrintWriter out = response.getWriter();

       out.print("Hello :");

    设置响应的内容类型: response.setContentType("text/html; charset=UTF-8");

Servlet学习笔记 - 廖润明 - 异次元蓝客

Servlet学习笔记 - 廖润明 - 异次元蓝客

Servlet学习笔记 - 廖润明 - 异次元蓝客


Servlet学习笔记 - 廖润明 - 异次元蓝客


注意:使用response对象跳转,可以跳到项目外的一个URL资源上

如:response.sendRedirect(“http://www.csdn.net”);

    使用request对象跳转,只能在本项目资源中跳转

如:request.getRequestDispatcher(“url”).forward(request,response);

告诉浏览器不要缓存页面:

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

页面刷新:单位是秒

Servlet学习笔记 - 廖润明 - 异次元蓝客

⑤两个对象公用方法:

       response.setCharacterEncoding("UTF-8");

       request.setCharacterEncoding("UTF-8");

    就像盖房子,运送沙子:

    (1)不管什么沙子,全部运到后,再用机器筛成需要的大小

    (2)先按照要求,筛好后运到工地      

⑥javax.servlet.RequestDispatcher(interface):对请求响应进行补充的一个接口,主要负责两个功能RequestDispatcher disp = request.getRequestDispatcher("login_ok.jsp");

    (1)跳转

         disp.forward(ServletRequest,ServletResponse);

    (2)包含

         disp.include(ServletRequest,ServletResponse);

    程序中一般连写:

    request.getRequestDispatcher("login_ok.jsp").forward(request,response);

⑦Cookie(class): 保存在浏览器中的一部分数据,可以被包含在请求对象中传递给服务器

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

Http响应中的Cookie

Set-Cookie:CustomerID=1234;domain=abc.com;path=/sales

Set-Cookie:对Cookie通过名称=值的方式进行设置,这些值在用户下次访问的时候会被使用,其中名值对可以设置多个。

domain:指定该Cookie是用户访问的哪个网站返回的

path:指Cookie在这个网址下面的路径

(1)新建 Cookie

       Cookie cik = new Cookie("name",value);

      //设置cookie的生存期是必须的,如果不设置或者设置为0,则此cookie是瞬时的,只保存在本机的内存中,而不会在硬盘上

       cik.setMaxAge(秒);

    (2)设置 Cookie,在响应中加入cookie

       cik.setPath("/test/test2");  //可选

       response.addCookie(cik); 

    (3)读取Cookie,通过request读取cookie

       Cookie[] cks = request.getCookies();

       for(int i=0;i<cks.length;i++)

       {

            Cookie temp = cks[i];

            if("name".equals(temp.getName()))

            {

                String value = temp.getValue();

            }

       }

    (4)删除 Cookie

       ck.setMaxAge(0);  

    好处:保存数据,方便用户操作

    坏处:能够保存的数据很少,字符格式,不超过4kb;受浏览器本身影响,不一定能够一直有效。  

⑧HttpSession(interface)是在服务器端保存数据最常见的方式。

  

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

Session:会话,(进行某活动连续的)一段时间,使用该对象可以完成一定的操作。会话信息的范围仅限于当前Web应用程序(
ServletContext
),因此存储在一个上下文中的信息在另一个上下文中不是直接可见的。

   Ⅰ.Hibernate中Session和Servlet中HttpSession的区别

   Hibernate中Session对象:主要作用是数据库连接、数据库操作

   Servlet中HttpSession对象:

   (1)帮助服务器,识别不同的浏览器

   (2)帮助服务器传递数据到不同的Servlet或JSP页面

   (3)能够人工控制连续的时间段的长短。

    Ⅱ.HttpSession 对象的常用方法:

   

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

    (1)创建

    HttpSession session = request.getSession(true);

    要求服务器端重新创建一个session对象

    HttpSession session = request.getSession(false);

    不需要服务器端新建session对象,只需要从已有的session中取一个

    HttpSession session = request.getSession();

    没有要求,由服务器自动分配

    (2)识别浏览器

    //随机生成一个不重复的id,随着响应发送给浏览器,绑定在浏览器中,每次浏览器请求,都会把该id返回并与服务器端的id对比

    String id = session.getId();

    (3)传递数据

    //把数据存入session中

    session.setAttribute("name",object);

    //在其他Servlet或jsp页面中取出数据

    Object obj = session.getAttribute("name");

    一般情况下,需要先判断是否为空,再取值

    (4)设置有效时间

    一个session对象默认有30分钟的有效时间

    //设置单个session对象的最长有效时间

    session.setMaxInactiveInterval(60*60*24秒);

    //设置整个工程中所有session的有效时间

    <session-config>

        <session-timeout>20000</session-timeout>

    </session-config>

    (5)清除数据

    session.removeAttribute("name");

    (6)设置Session失效或钝化

    session.invalidate();

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

    例如:

    Session类似储物柜,最主要作用就是存取数据

    寝室的储物柜:

    (1)一人一个

    (2)能够存取东西

    (3)一般的一个柜子一把钥匙

    (4)特殊情况,可以给柜子贴封条

    (5)有时候柜子可能两个人或N个人共用

⑨ServletContext(interface)

   ⑴ServletContext的定义

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

⑵ServletContext对象能够访问web项目的初始化参数、存储在ServletContext中的对象、web项目中的资源文件、日志;ServletContext就是Servlet容器,提供的方法可以在同一个web应用下的所有Servlet中使用。

⑩ServletConfig(interface)

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

ServletConfig封装了web.xml文件中的配置信息,可以在每个servlet的初始化方法中得到并且使用该对象。


4. Java EE中关于Servlet类的层次结构

Servlet(interface)(接口,规定了基础的客户端、网络、服务器端程序开发的基本方法,银行系统、军用导弹系统,不局限于特定网络)

       |

    GenericServlet(abstract)(抽象的实现类,定义一般的、与协议无关的servlet)

       |

    HttpServlet(abstract)(在Internet网络中,实现了HTTP协议的抽象类HttpServlet 的子类至少必须重写一个方法)

    /  |  \

自定义的Servlet具体到一个方法(GET/POST)提交的请求(普通类,继承于HttpServlet)

Java EE技术架构

Servlet学习笔记 - 廖润明 - 异次元蓝客

 
5.过滤器(Filter)

①过滤器:是一个可插拔的Web组件,从Servlet 2.3之后出现,提供了一个接口,用于开发Servlet中的过滤器---Filter,是一个独立的程序,由一段Java代码和一段配置信息组成。通过不同规格的滤网,在过滤过程中,这些滤网可以组合使用。我们在 Servlet 中,可以通过实现Filter接口,创建不同规格的滤网,再通过web.xml文件配置,把上述多个过滤器组合在一起。

与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,过滤器是“链”在容器的处理过程中。这就意味着它们会在Servlet处理器之前访问一个进入的请求,并且在触发的响应信息返回到客户端前访问这些响应信息,这种访问使得过滤器可以检查并修改请求和响应的内容。

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

上图的Servlet Engine、JSP Engine分别代表各自的引擎

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

上图为filter作用的示意图

②Filter过滤器的生命周期

    (1)实例化:由Tomcat调用过滤器类的构造方法,创建对象在服务器启动时创建

    (2)初始化:由Tomcat调用过滤器对象中的init(XXXXConfig)

    (3)过滤:由Tomcat调用doFilter(request,response)

    (4)销毁:destroy()   

③Filter 的创建过程

    (1)创建普通类,实现javax.servlet.Filter接口

    (2)在doFilter()方法中截取request/response对象,进行请求或响应的过滤

    (3)在web.xml文件中进行配置,使它能够在整个web工程中生效。剩下的都交给服务器。

④过滤器过滤条件的配置:

  (1)过滤服务器上所有的资源

       <filter-mapping>

        <filter-name>charSet</filter-name>

        <url-pattern>/*</url-pattern>

       </filter-mapping> 

  (2)过滤制定类型的文件

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

      <filter-mapping>

        <filter-name>charSet</filter-name>

        <url-pattern>*.html</url-pattern>

      </filter-mapping>

     <filter-mapping>

        <filter-name>charSet</filter-name>

        <url-pattern>*.jsp</url-pattern>

     </filter-mapping>

  (3)过滤指定的目录

     <filter-mapping>

        <filter-name>charSet</filter-name>

        <url-pattern>/folder/*</url-pattern>

     </filter-mapping>   

  (4)过滤指定的Servlet

       <filter-mapping>

        <filter-name>loginFilter</filter-name>

        <servlet-name>loginServlet</servlet-name>

     </filter-mapping>

     <servlet-mapping>

        <servlet-name>loginServlet</servlet-name>

          <url-pattern>/login</url-pattern>

       </servlet-mapping>

⑤过滤器的通用功能

⑴拦截请求头:安全认证、日志

⑵数据转换:加密、解密

⑶抢占特殊资源的服务:缓存

⑥filter的接口

⑴javax.servlet.Filter

⑵javax.servlet.FilterChain

⑶javax.servlet.FilterConfig

⑦过滤字符编码的实例代码

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

其中的filterChain.doFilter(request,response);表示跳出前一个filter,继续到另一个filter中执行。
6.事件监听器(Listener)

①什么是事件监听器

⑴支持ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中状态改变的事件通知;

⑵实现了一个或多个servlet事件监听器接口的类型

⑶控制ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中的生命周期。

  ②监听器组成: (1)监听器本身  Listener (2)监听器触发事件  Event

  ③监听器主要使用在JavaSwing、JavaScript、Servlet中。在Servlet中,监听器主要针对有限的几个对象——作用域对象(这些对象都能在一定的有效时间内,保存数据,供其他Servlet或jsp页面使用)如:ServletContext、HttpSession、ServletRequest

  ④事件介绍

⑴事件是Java中的一个重要的概念,指某个代码运行过程中的一个状态:如HttpSession创建、属性值的改变等都可以用事件来描述。

     ⑵事件原型:java.util.EventObject

     ⑶事件监听程序是当事件发生后发现并处理的程序,实现接口java.util.EventListener

  ⑤各种事件对应的监听器接口

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

更具体的对应关系如下图

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

⑥使用事件及监听器的步骤

  ⑴编写一个类,实现某监听器接口(具体由所要监听的事件类型决定)

  ⑵在web.xml中注册监听器

  <listener>

      <listener-class>具体的类路径</listener-class>

  </listener>

⑦Servlet API中给这些对象提供了监听器,主要监听以下内容:

(1)监听生命周期事件

      //新建一个session,新建的session状态就是激活状态

      HttpSession session =request.getSession(true); 

      //改变当前session对象的状态,变为钝化状态 

      session.invalidate();

      //监听 session对象的激活和钝化

      javax.servlet.http.HttpSessionActivationListener

      //通知创建了一个会话

      javax.servlet.http.HttpSessionListener

      sessionCreated(HttpSessionEvent se)

//通知某个会话即将无效

      sessionDestroyed(HttpSessionEvent se)

   (2)监听属性改变事件

      //监听用户登录,前提是用户在登录的时候创建新的session对象


7.Servlet处理请求和响应

Servlet学习笔记 - 廖润明 - 异次元蓝客

 

Servlet是完全用Java代码编写的一个文件,编译过程和Java代码一样,但具体运行是由web服务器控制。客户端访问服务器上哪个Servlet,服务器就加载运行哪个Servlet的字节码来生成结果。


8.web.xml介绍

   ①Web.xml是web项目的核心,任何一个web项目都必须有这样的配置文件,通过这个配置文件,所有的服务器Tomcat、JBoss、WebLogic、GlassFish等都要通过web.xml来了解一个web项目的相关信息。该文件中能够配置很多的内容,其中包括servlet,能够为servlet配置名称、类路径、访问路径,可以通过访问路径在地址栏中通过URL访问到某个包下面的某个servlet类。

   ②Servlet的配置

Servlet学习笔记 - 廖润明 - 异次元蓝客










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值