`

JavaWeb三大组件(Servlet、Filter、Listener)

阅读更多

JavaWeb三大组件指的是:Servlet、Filter、Listener,这三个组件在JavaWeb开发中分别提供不同的功能。 

本博客内容参考以下博客: 

http://blog.csdn.net/gebitan505/article/details/70808730

http://blog.csdn.net/xiaojie119120/article/details/73274759

 

1、Servlet 

        Servlet是用来处理客户端请求的动态资源,也就是当我们在浏览器中键入一个地址回车跳转后,请求就会被发送到对应的Servlet上进行处理。 
        Servlet的任务有:
  • 接收请求数据:我们都知道客户端请求会被封装成HttpServletRequest对象,里面包含了请求头、参数等各种信息。
  • 处理请求:通常我们会在service、doPost或者doGet方法进行接收参数,并且调用业务层(service)的方法来处理请求。
  • 完成响应:处理完请求后,我们一般会转发(forward)或者重定向(redirect)到某个页面,转发是HttpServletRequest中的方法,重定向是HttpServletResponse中的方法,两者是有很大区别的。
      转发(redirect)和重定向(forward):
forward方式:request.getRequestDispatcher("/somePage.jsp").forward(request, response);   
redirect方式:response.sendRedirect("/somePage.jsp");
  

    Forward是通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法来实现的,getRequestDispatcher()的参数必须以“/”开始,代表Web应用程序的根目录

当执行forward动作时不能有任何输出到客户端,否则会抛出IllegalStateException异常。

 

    Redirect是利用服务器返回的状态码来实现的,服务器通过HttpServletResponse的setStatus(int status)方法设置状态码,301代表永久重定向,302代表临时性重定向,HttpServletResponse把setStatus()与setHeader()方法封装成另一个方法sendRedirect(String url)。

 

     当使用forward形式跳转时,地址栏会显示跳转前的Servlet访问地址,因为该跳转是在服务器端实现的,对客户端浏览器是透明的。当使用redirect时,跳转是在客户端实现的,实际上请求了两次服务器,第一次获取了重定向的状态码和地址,第二次访问真实的地址。 

 

     Servlet的创建:Servlet可以在第一次接收请求时被创建,也可以在在服务器启动时就被创建,这需要在web.xml的< servlet>中添加一条配置信息 < load-on-startup>5< /load-on-startup>,当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则指示容器在该servlet被请求时才加载。 

 

     Servlet的生命周期方法:

  • void init(ServletConfig)   servlet的初始化方法,只在创建servlet实例时候调用一次,Servlet是单例的,整个服务器就只创建一个同类型Servlet
  • void service(ServletRequest,ServletResponse)    servlet的处理请求方法,在servle被请求时,会被马上调用,每处理一次请求,就会被调用一次。ServletRequest类为请求类,ServletResponse类为响应类
  • void destory()    servlet销毁之前执行的方法,只执行一次,用于释放servlet占有的资源,通常Servlet是没什么可要释放的,所以该方法一般都是空的
  • void doGet/doPost(HttpServletRequest, HttpServletResponse) 

    Servlet的其他重要方法:

  • ServletConfig getServletConfig()   获取servlet的配置信息的方法,所谓的配置信息就是WEB-INF目录下的web.xml中的servlet标签里面的信息
  • String getServletInfo()  获取servlet的信息方法

    Servlet的配置:

    

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.briup.estore.web.servlet.LoginServlet</servlet-class>
</servlet>
  
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>
  

 

  2、Filter 

  filter与servlet在很多的方面极其相似,但是也有不同,例如filter和servlet一样都又三个生命周期方法,同时他们在web.xml中的配置文件也是差不多的、 但是servlet主要负责处理请求,而filter主要负责拦截请求,和放行。 

 

filter四种拦截方式

  1. REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
  2. FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、< jsp:forward>标签都是转发访问;
  3. INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、< jsp:include>标签都是包含访问;
  4. ERROR:当目标资源在web.xml中配置为< error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

    拦截方式配置:在<filter-mapping>中添加0~n个<dispatcher>子元素,来说明当前访问的拦截方式,默认拦截方式为REQUEST,一般REQUEST和FORWARD用的多一点,INCLUDE和ERROR用的少,示例配置如下: 

 

<filter-mapping>  
   <filter-name>myfilter</filter-name>  
   <url-pattern>/test.jsp</url-pattern>  
   <dispatcher>REQUEST</dispatcher>  
   <dispatcher>FORWARD</dispatcher>  
   <dispatcher>......</dispatcher>  
</filter-mapping>

 

   url-mapping的写法,匹配规则有三种:

  • 精确匹配 —— 如/foo.htm,只会匹配foo.htm这个URL
  • 路径匹配 —— 如/foo/*,会匹配以foo为前缀的URL
  • 后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL

    < url-pattern>的其他写法,如/foo/ ,/.htm ,/foo 都是不对的。

 

   执行filter的顺序 :如果有多个过滤器都匹配该请求,顺序决定于web.xml filter-mapping的顺序,在前面的先执行,后面的后执行 

   filter在web.xml中的配置如下:

   

<filter>
   <filter-name>filterDemo</filter-name>
   <filter-class>com.sjz.housekeeper.custom.FilterDemo</filter-class>
</filter> 
<filter-mapping>
   <filter-name>filterDemo</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping> 

 

3、Listener 

    Listener就是监听器,我们在JavaSE开发或者Android开发时,经常会给按钮加监听器,当点击这个按钮就会触发监听事件,调用onClick方法,本质是方法回调。在JavaWeb的Listener也是这么个原理,但是它监听的内容不同,它可以监听Application、Session、Request对象,当这些对象发生变化就会调用对应的监听方法。 

 

应用域监听: 

Ø ServletContext(监听Application)

  • 生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用;

        void contextInitialized(ServletContextEvent sce):创建Servletcontext时

 

        void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时

 

  • 属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

       void attributeAdded(ServletContextAttributeEvent event):添加属性时;

 

        void attributeReplaced(ServletContextAttributeEvent event):替换属性时;

 

        void attributeRemoved(ServletContextAttributeEvent event):移除属性时;

 

Ø HttpSession(监听Session)

  • 生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用;

        voidsessionCreated(HttpSessionEvent se):创建session时

 

        void sessionDestroyed(HttpSessionEvent se):销毁session时

 

  • 属性监听:HttpSessioniAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

        void attributeAdded(HttpSessionBindingEvent event):添加属性时;

 

        void attributeReplaced(HttpSessionBindingEvent event):替换属性时

 

        void attributeRemoved(HttpSessionBindingEvent event):移除属性时

 

Ø ServletRequest(监听Request)

  • 生命周期监听:ServletRequestListener,它有两个方法,一个在出生时调用,一个在死亡时调用;

         voidrequestInitialized(ServletRequestEvent sre):创建request时

 

         void requestDestroyed(ServletRequestEvent sre):销毁request时

 

  • 属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。

        void attributeAdded(ServletRequestAttributeEvent srae):添加属性时

 

        void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时

 

        void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时

 

listener在web.xml中的配置:

 

<listener>
   <listener-class>com.sjz.housekeeper.custom.ListenerDemo</listener-class>
</listener>
  

 

    感知Session监听: 

  1. HttpSessionBindingListener监听 
  • 在需要监听的实体类实现HttpSessionBindingListener接口
  • 重写valueBound()方法,这方法是在当该实体类被放到Session中时,触发该方法 
  • 重写valueUnbound()方法,这方法是在当该实体类从Session中被移除时,触发该方法 
  1. HttpSessionActivationListener监听 
  • 在需要监听的实体类实现HttpSessionActivationListener接口 
  • 重写sessionWillPassivate()方法,这方法是在当该实体类被序列化时,触发该方法 
  • 重写sessionDidActivate()方法,这方法是在当该实体类被反序列化时,触发该方法 

   listener、filter、servlet的启动顺序为:listener->Filter->servlet,简单记为:理(Listener)发(Filter)师(servlet),执行的顺序不会因为三个标签在配置文件中的先后顺序而改变。

分享到:
评论

相关推荐

    JavaWeb两大组件FILTER&LISTENER

    在JavaWeb开发中,"FILTER(过滤器)"和"LISTENER(监听器)"是两个重要的组件,它们极大地增强了应用程序的功能和灵活性。本案例将深入探讨这两个组件的原理、用法及其在实际项目中的应用。 一、FILTER(过滤器) ...

    web服务器三大组件servlet、Filter、Listener——浅浅笔记

    Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...

    JavaWeb开发实战宝典-servlet篇

    8. **异常处理**:通过`@WebFilter`和`@WebListener`注解,可以创建过滤器和监听器,它们是Servlet应用的重要组件,能够实现全局的日志记录、安全检查等功能。 文件名列表中的"db_database04.sql"可能包含了与...

    JavaWeb Servlet过滤监听应用.zip

    在JavaWeb中,Servlet和Filter是两个核心组件,而监听器(Listener)则提供了更高级的功能,帮助开发者管理和监控应用状态。这个"JavaWeb Servlet过滤监听应用.zip"文件包含了关于如何在实际项目中运用这些概念的...

    使用javaweb写Servlet

    Servlet还可以与其他Java Web组件如JSP(JavaServer Pages)、Filter和Listener协同工作,构建更强大的应用程序。 在处理请求时,Servlet可以从HttpServletRequest对象中获取请求参数,例如表单数据。同时,...

    JavaWeb——Servlet.docx

    Servlet是JavaWeb开发中的核心组件,它是一种服务器端的程序,用于处理来自客户端的请求并生成动态内容。Servlet并不是一个具体的类,而是一个接口,它定义了服务器与Servlet之间的交互方式。任何实现了Servlet接口...

    javaweb 项目中三种组件实例

    在Java Web开发中,Filter、Listener和Interceptor是三个至关重要的组件,它们各自承担着不同的职责,共同构建了一个灵活且强大的应用程序架构。以下是对这三种组件的详细解释: 1. **Filter(过滤器)**: 过滤器...

    JavaWeb Servlet Tomcat.rar

    10. **过滤器和监听器**:Servlet API中的Filter和Listener,用于在请求处理前/后进行拦截和响应。 11. **异常处理**:如何在Servlet中捕获和处理异常。 12. **安全**:如HTTPS配置,登录验证,权限控制等。 通过这...

    JavaWeb房屋租赁管理系统源码(servlet+jsp+mysql)

    4. **JavaWeb**:JavaWeb是指使用Java技术栈开发的Web应用程序,涵盖了Servlet、JSP、JSTL、Filter、Listener等多个组件。在这个系统中,JavaWeb技术被用来构建一个完整的Web应用程序,实现用户与服务器之间的交互。...

    Filter&Listener&Ajax.pdf

    在JavaWeb开发中,Filter、Listener和Ajax是三个关键的技术概念,它们各自扮演着不同的角色,共同构建了高效、动态的Web应用程序。 首先,Filter(过滤器)是JavaWeb中的一个重要组件,用于拦截用户请求和服务器...

    期末大作业JAVAWEB+MYSQL学生公寓系统(Idea开发)

    【JAVAWEB】标签表明项目的核心技术是JavaWeb,它是Java技术在Web应用上的体现,涵盖了Servlet、JSP、Filter、Listener等多个组件。在本项目中,Servlet可能是主要的业务逻辑处理者,负责接收HTTP请求,执行相应的...

    (重温)JavaWeb–Filter 过滤器(JavaWeb 的三大组件之一)

    JavaWeb 技术中,Filter(过滤器)是三大核心组件之一,与Servlet程序和Listener监听器并列。Filter 是 JavaEE 规范的一部分,它定义了一个接口,允许开发者在请求被处理之前或之后进行拦截,对请求或响应进行预处理...

    Javaweb期末大作业游戏购物网站

    6. **过滤器与监听器**:JavaWeb中的Filter和Listener是两个重要组件。Filter可以拦截请求,进行预处理或后处理,如登录检查、字符编码转换等。Listener则可以监听特定事件,如Session创建、销毁等,用于实现特定...

    javaWeb.pdf

    Web.xml是JavaWeb开发中的一种配置文件,用于配置Servlet、Filter、Listener等组件。Web.xml的主要应用场景包括: * 配置Servlet:在Web.xml中可以配置Servlet的名称、类名、映射地址等信息。 * 配置Filter:在Web....

    JavaWeb的servlet学习的帮助文档

    Servlet是Java Web开发中的核心组件,它是一种Java类,用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并返回响应。在本教程中,我们将深入探讨Java Web的Servlet技术,基于提供的J2EE 1.5和Java ...

    JavaWeb_servlet(10)_ 通过 ServletContex 获得根目录下的文件路径

    除了在Servlet中,我们还可以在Filter、Listener或其他JavaEE组件中获取到ServletContext。 在实际开发中,结合ServletContext和文件系统操作,可以实现诸如上传下载文件、读取配置文件、日志记录等功能。同时,...

    Javaweb大作业代码

    在JavaWeb开发中,常见的技术栈包括Servlet、JSP、JSTL、EL(Expression Language)、Filter、Listener等。此外,可能还会用到MVC(Model-View-Controller)设计模式,以及Spring框架、MyBatis等来简化开发和管理。...

    javaweb作业.zip

    也可能涉及到了过滤器(Filter)和监听器(Listener)的概念,这些是JavaWeb中用于增强应用功能和管理应用状态的重要工具。 5. **JavaWeb开发技术试卷**: 这个文档可能包含了关于JavaWeb开发的一系列问题,覆盖了...

    JavaWeb.zip

    JavaWeb技术是构建互联网应用程序的重要框架,它涵盖了Java语言与Web开发的各种技术,包括Servlet、JSP、JSTL、Filter、Listener等。这个"JavaWeb.zip"压缩包显然包含了与JavaWeb开发相关的实验报告、练习题目和其他...

Global site tag (gtag.js) - Google Analytics