zoukankan      html  css  js  c++  java
  • servlet学习笔记四

    Servlet

    主要内容:
    1)servlet初始化参数与上下文参数
    2)过滤器
    3)监听器
    一、servlet初始化参数与上下文参数
    1)servlet初始化参数
    把某些变量放在web.xml配置,到时无需修改Servlet类
    配置:
    <servlet>
    <init-param>
    <param-name>userName</param-name>
    <param-value>admin</param-value>
    </init-param>
    </servlet>
    获取:
    Servlet.getInitParameter(name);

    ServletConfig.getInitParameter(name);
    2)上下文参数
    供所有Servlet共享的参数
    配置:
    <context-param>
    <param-name>uploadDir</param-name>
    <param-value>/files</param-value>
    </context-param>
    获取:
    ServletContext.getInitParameter(name);
    二、过滤器
    功能:
    在客户端的请求访问后台资源时,拦截这些请求
    在服务器的响应发送给客户端之前,处理这些响应
    应用:
    1)修改request、response中的头部和体部信息
    2)日志输出
    3)字符编码设置
    4)用户权限控制
    编写:
    1)实现javax.servlet.Filter接口
    doFilter(ServletRequest,ServletResponse,FilterChain)
    init(FilterConfig)
    destory()
    2)配置
    <filter>
    <filter-name>Filter命名</filter-name>
    <filter-class>Filter类全限定名</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>Filter命名</filter-name>
    <!--待过滤的资源-->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    多个拦截器执行顺序问题
    由<filter-mapping>在web.xml里的定义顺序决定

    当容器对Filter对象进行初始化时,容器调用Filter的init方法,并传入一个实现FilterConfig接口的对象。
    FilterConfig接口包含方法:
    public String getFilterName()
    获得过滤器的名称信息。该名称是在部署描述符中说明的。
    public String getInitParamter(String name)
    获得过滤器的初始化字符串。初始化字符串也是在部署描述符中说明的。如果这个参数不存在,该方法将返回null。
    public Enumeration getInitParamterNames()
    获得一个枚举器,以遍历过滤器的所有初始化字符串。如果过滤器没有初始化参数,此方法返回一个空的枚举集合。
    public ServletContext getServletContext()
    获得过滤器所在Web应用的Servlet上下文对象引用

    javax.servlet.FilterChain接口由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中。
    过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器或者是将调用目标资源。
    FilterChain接口仅定义一个方法:
    public void doFilter(ServletRequest req, ServletResponse res)
    该方法用于将请求/响应继续沿过滤器链向后传送给下一个过滤器。
    如果调用该方法的过滤器是链中最后一个,那么目标资源被调用。

    子元素<url-pattern>和<servlet-name>可以选择一个设置,<url-pattern>元素为过滤器关联的URL,<servlet-name>元素为过滤器对应的Servlet,当用户访问<url-pattern>元素上指定的资源或<servlet-name>元素指定的Servlet时,这个过滤器才会被容器调用;
    最多可以有4个<dispatcher>元素,<dispatcher>元素指定过滤器对应的请求方式
    有四种请求方式:REQUEST,INCLUDE,FORWARD和ERROR,默认是REQUEST。

    REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。除此之外,不会调用该过滤器。
    INCLUDE:用户访问的目标资源是通过RequestDispatch的include()方法访问时,容器会调用过滤器。除此之外,不会调用该过滤器。
    FORWARD:用户访问的目标资源是通过RequestDispatch的forward()方法访问时,容器会调用过滤器。除此之外,不会调用该过滤器。
    ERROR:如果目标资源是通过声明式异常处理机制调用时,容器会调用过滤器


    使用<filter-mapping>元素
    使用<servlet-name>元素将过滤器连接到一个servlet中。
    **********************************
    使用<filter-mapping>元素
    使用<servlet-name>元素将过滤器连接到一个servlet中。

    三、监听器
    事件处理机制:
    事件
    事件源
    事件监听器

    Servlet技术中已定义了一些事件,我们可以编写相关的事件监听器来对特定事件进行处理。
    Servlet事件主要有三类:八大监听器
    ServletContext事件
    2种

    HttpSession事件
    4种
    ServletRequest事件
    2种
    1)ServletContext的监听
    可以监听ServletContext对象的创建和删除以及其属性的添加、删除和修改等操作。
    通过实现两接口实现:
    ServletContextListener:监听ServletContext对象的创建和销毁操作
    ServletContextAttributeListener:监听属性的添加、删除和修改操作
    2)HttpSession的监听
    可以监听HttpSesson对象的创建、删除、状态情况及会话中属性的添加、删除和修改操作。
    通过实现三个接口实现:
    HttpSesionListener:监听会话对象的创建和销毁操作
    HttpSessionAttributeListener:监听属性的相关操作
    //这两种方法由session.setAttribute(String key,Object obj),Object对象实现
    HttpSessionBindingListener:使对象在被绑定到会话或从会话中取消对它的绑定时得到通知。
    HttpSessionActivationListener:session钝化过程监控

    3)ServletRequest的监听
    可以监听ServletRequest对象的创建和删除即属性的相关操作。
    通过实现两接口实现:
    ServletRequestListener:监听ServletRequest对象的创建和销毁操作
    ServletRequestAttributeListener:监听属性的相关操作
    4)web.xml的配置
    <listener>
    <listener-class>监听器类全限定名</listener-class>
    </listener>

  • 相关阅读:
    Java面试之对象拷贝
    Java面试之反射
    Java面试之多线程
    Java面试之容器
    Java面试之基础一
    Java面试之Hibernate
    Mysql进阶
    高并发,不怕不怕「限流算法第一把法器:计数器法」
    SpringBoot加载速度慢
    idea VM options参数优化
  • 原文地址:https://www.cnblogs.com/Ant-soldier/p/5045983.html
Copyright © 2011-2022 走看看