Java Web 之Filter

一、JSP是什么

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术

JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

二、关于Filter

1、什么是Filter

它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response。

一个Filter包括:

1)、在servlet被调用之前截获;

2)、在servlet被调用之前检查servlet request;

3)、根据需要修改request头和request数据;

2、如何借助Filter实现拦截功能

编写java类实现Filter接口,并实现其doFilter方法。

在web.xml文件中对编写的filter类进行注册,并设置它所能拦截的资源

Filter接口的doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,Web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法

3、web.xml配置各节点介绍

    <filter>   <!-- 指定一个过滤器 -->
        <filter-name>TestFilter</filter-name>   <!-- 过滤器名字 -->
        <filter-class>TestFilter</filter-class>   <!-- 指定过滤器的完整的限定类名 -->
        <init-param>                            <!-- 过滤器指定初始化参数 -->
            <param-name>islogin</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping><!-- 设置一个Filter所负责拦截的资源-->
        <filter-name>TestFilter</filter-name> <!-- 过滤器名字,和上面的一致 -->
        <url-pattern>/*</url-pattern> <!-- 设置 filter 所拦截的请求路径 -->
        <servlet-name>TestServlet</servlet-name><!-- 设置 filter 所拦截的Servlet名称。 -->
    </filter-mapping>  

三、创建一个Filter过滤器

@WebFilter(filterName = "TestFilter")
public class TestFilter implements Filter {

    //初始化配置参数,在doFilter()方法之前被调用
    public void init(FilterConfig config) throws ServletException {

    }


    //该方法在客户端请求及服务器端回复时都将被自动调用
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws ServletException, IOException {
        chain.doFilter(req, resp);
    }


    //结束过滤器,doFilter()方法完成后被调用
    public void destroy() {
    }

FilterConfig接口
用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得以下内容:

String getFilterName();//得到filter的名称。 
String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null. 
Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。 
public ServletContext getServletContext();//返回Servlet上下文对象的引用。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容