web三大组件

Web三大组件

Java Web三大组件指的是Servlet、Filter、Listener。

1 Servlet

Servlet是用来处理客户端请求的动态资源,并返回一个响应。Servlet由web服务器创建,Servlet方法由web服务器调用。

 public interface Servlet {

    public void init(ServletConfig config) throws ServletException();
//该方法用来返回Servlet对象的配置信息
    private ServletConfig servletConfig();

    public void service(ServletRequest req, ServletResponse res) 
    throws ServletException, IOException();

    public void destroy();
//该方法用来返回Servlet的相关信息,没有什么太大的用处,一般我们返回一个空字符串即可
    public String getServletInfo();
}

1.1生命周期

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:

  1. 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

  2. 在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

  3. 请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理

  4. 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

1.2 体系构造

Servlet----接口
 GenericServlet-----抽象类 将Servlet接口中其他的方法做了默认空实现,只将service()方 法做为抽象方法,创建servle类时,可继承GenericServlet类,实现servic()方法即可
 HttpServlet-------抽象类 继承GenericServlet,实现 对HTTP协议的封装,简化操作。通常情况下,编写的servle类都继承自HttpServlet类,实现重写doGet()和doPost()方法即可

1.3 urlPattern配置

Servlet类编写好后,要想被访问到,就需要配置其访问路径urlPattern

  • 一个Servlet,可以配置多个urlPattern ,即浏览器可以通过多个路径访问到Servlet

  • 配置的优先级为 精确匹配 > 目录匹配> 扩展名匹配 > /* > / 。

配置方式

注解@WebServlet

web.xml配置

<!--注册Servlet-->
<servlet>   
<servlet-name>test</servlet-name>
<servlet-class>com.test.ServletTest</servlet-class>    
</servlet>
<!--配置映射-->
<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

注意:

目录匹配/user/*中的/*代表的是零或多个层级访问目录

扩展民匹配

如果路径配置的不是扩展名,那么在路径的前面就必须要加/否则会报错

如果路径配置的是*.do,那么在*.do的前面不能加/,否则会报错

*/和/的区别?

  1. 当我们的项目中的Servlet配置了 “/”,会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet

  2. 当我们的项目中配置了"/*",意味着匹配任意访问路径

  3. DefaultServlet是用来处理静态资源,如果配置了"/"会把默认的覆盖掉,就会引发请求静态资源的时候没有走默认的而是走了自定义的Servlet类,最终导致静态资源不能被访问

2 Filter

Filter 也称过滤器, 当访问服务器的资源时,过滤器可以将请求和响应拦截下来,完成一些特殊功能。
过滤器的作用:一般用于完成通用的操作:登录验证、统一编码处理、敏感字符过滤……

 public interface Filter {

    public void init(FilterConfig filterConfig) throws ServletException();

    public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) ;
    throws ServletException, IOException();

    public void destroy();
}

2.1 生命周期

  • 在服务器启动后会创建filter对象,调用init方法 只执行一次 加载资源。

  • 每一次被请求拦截资源时,会执行多次 。先执行过滤器,再执行执行放行后的资源,回来执行过滤器放行代码下边的代码

  • 在服务器关闭后,被销毁。如果服务器是正常关闭,则会执行destroy方法 只执行一次 释放资源。

2.2 过滤器的配置详解

拦截路径配置:

  • 具体资源路径:/index.jsp :只有访问index.jsp资源时,过滤器才会被执行。
    拦截目录: /user/* :访问/user下的所有资源时,过滤器都会被执行。
    后缀名: .jsp :访问所有后缀名为 jsp资源时,过滤器都会被执行。
    拦截所有资源: / :访问所有资源时,过滤器都会被执行。

  • 拦截方式配置

    注解配置:@WebFilter设置dispatcherTypes属性

    REQUEST:默认值。浏览器直接请求资源。
       FORWARD:转发来访问资源。
       INCLUDE:包含访问资源。
       ERROR:错误跳转资源。
       ASYNC:异步访问资源。
    web.xml配置:

  <!--注册过滤器-->
  <filter>
    <filter-name>test</filter-name>
    <filter-class>com.test.filtertest</filter-class>
<filter>
  <!--映射过滤器-->
<filter-mapping>
    <filter-name>test</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcherTypes>FORWARD</dispatcherTypes>
  </filter-mapping>

3 Listener

Listener也称监听器,是一个专门用于对对其他对象身上,发生的事件或状态改变进行监听和相应处理的对象,当被监听的对象发生情况时,立即采取相应行动。

相关概念

事件源:被监听的对象
监听器:监听事件源的对象,事件源对象的状态发生变化,都会触发监听器
注册监听:将事件源、监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码

3.1监听器划分

  • 用于监听域对象创建和销毁的事件监听器

    ServletContextListenter接口,HttpSessionListener接口,ServletRequestListenter接口

  • 用于监听域对象属性增加和删除的事件监听器

    ServletContextAttributeListener接口,HttpSessionAttributeListener接口,ServletRequestAttributeListener接口

  • 用于监听绑定到HttpSession域中某个对象状态的时间监听器

    HttpSessionBindingListener接口,HttpSessionActivationListener接口

3.2配置

注解 @WebListener

web.xml配置

<!--注册监听器-->
<listener> 
    <listenerclass>com.test.ServletContextListenetTest</listener-class> 
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值