L--java web filter

什么是filter

Filter是java下的一种过滤器,能实现对java web程序客户端和服务端消息的过滤,也就是在服务器端接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理。

Filter的使用非常的灵活,是在“链”到客户端和服务端之间的,在需要时可以配置到客户端和服务器之间,在不需要时可以去掉。filter还可以设置其对发送到哪些页面或从哪些页面发出的消息进行过滤,即是一种横切性的编程,可插拔。filter执行的大致过程如下图

实现filter相关的功能,需要实现javax.servlet.jar包下的filter接口,该接口有三个方法分别是init ,dofilter,destory方法,把需要执行某些功能的代码放在dofilter方法中

一个Filter处理一个jsp

下例实现的是设置所有jsp页的字符编码

package com.tgb.drp.util.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 采用filter统一处理字符集
 *
 */
public class CharsetEncodingFilter implements Filter {

    private String encodeString;
        //Filter注销方法
    @Override
    public void destroy() {

    }
        //filter要实现的功能
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("begin");
        // 设置字符集
        request.setCharacterEncoding(encodeString);

        //继续向下执行,如果还有其他filter继续调用其他filter,没有的话将消息发送给服务器或客户端
        chain.doFilter(request, response);
        System.out.println("end");
    }
        //初始化方法
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //
        encodeString=filterConfig.getInitParameter("encoding");
    }

}

写好filter类后,需要在配置文件中设置对那些request和response进行过滤处理,本例子设置对所有的jsp页面进行处理,在web.xml的web-app节点下,配置好后,可以进行测试。

    <filter>
        <filter-name>CharsetEncodingFilter</filter-name>
        <filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharsetEncodingFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

多个filter处理一个jsp页

如果想实现多个filter对同一个jsp页进行处理,例如即需要设置字符编码,有需要验证身份,只需要在写好响应的filter后继续配置在web.xml里。我们继续上面的例子,再写一个验证身份的filter,命名为AuthentionFilter,如下

package com.tgb.drp.util.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthenticationFilter implements Filter {

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //控制用户访问权限
        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse res=(HttpServletResponse)response;
        HttpSession session=req.getSession();

        if(session.getAttribute("user_info")!=null){
            chain.doFilter(request, response);
        }else{
            res.sendRedirect(req.getContextPath()+"/error.html");
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

}

然后再配置文件里继续进行如下配置,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>

    </welcome-file-list>
    <filter>
        <filter-name>CharsetEncodingFilter</filter-name>
        <filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharsetEncodingFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>AuthenticationFilter</filter-name>
        <filter-class>com.tgb.drp.util.filter.AuthenticationFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AuthenticationFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
</web-app>
时间: 2024-10-05 04:01:24

L--java web filter的相关文章

java web filter 学习(2)

本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 一个filter处理一个jsp 多个filter处理一个jsp filter是什么 Filter 是java下的一种过滤器 ,能实现对java web程序 客户端和服务器端消息的过滤,也就是在服务器段接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理. Filter的使用非常灵活,是在"链"到客户端和服务器之间的,在需要时可以配置到客户端与

通过Java Web Filter实现一个最简单的UrlRewrite过滤器

工具:支持JavaEE的Eclipse IDE Web 过滤器可以通过动态Web项目来直接添加:或者直接创建Java项目通过添加类来完成,参看如下过滤器代码: package me.ereach.urlfilter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.se

Java Web Filter登录验证

初做网站需要登录验证,转自 :http://blog.csdn.net/daguanjia11/article/details/48995789 Filter: Filter是服务器端的组件,用来过滤web请求.当发生一个web请求时,web容器会先检查请求的URL是否设置了Filter,如果设置了,则执行该Filter的doFilter方法.所有Filter都实现了javax.servlet.Filter接口,doFilter是定义在该接口中的最重要的方法. 最常见的使用过滤器的例子有:登录访

java web filter 基础

本文主要对Filter的使用进行讲解. 1.Filter是什么? Filter 技术是servlet 2.3 新增加的功能.Filter翻译过来的意思就是过滤器,能对客户端的消息进行预处理,然后将请求转发给其它的web组件,可以对ServletHttpRequest和ServletHttpResponse进行修改和检查.例如:在Filter中可以检查用户是否登录,对未登录的用户跳转到登陆界面. 2.过滤器快速入门 要定义一个过滤器,则需要实现javax.servlet.Filter接口,一个过滤

java web Filter过滤器解决乱码

package com.kt.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.Serv

Java Web总结十九Filter过滤器

一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,Web开发人员通过Filter技术,对Web服务器管理的所有Web资源:例如Jsp,Servlet,静态图片文件或静态HTML文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.自动登录.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发Web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter.通过

java web.xml listener servlet 和filter的加载顺序

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter. 最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servle

java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast

严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filterat org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConf

java web基础 --- URL重定向Filter

java web基础 --- URL重定向Filter httpRequest.getRequestDispatcher("/helloWorld").forward(httpRequest, response); 服务器端转发,不改变浏览器端URL地址,常用 httpResponse.sendRedirect(uri); 浏览器端重定向,改变URL在浏览器地址栏 URLOverWriteFilter.java 1 package com.web1.util; 2 3 import j

Java Web总结二十Filter、装饰设计模式

一.Filter的部署--注册Filter <filter> <filter-name>testFitler</filter-name> <filter-class>org.test.TestFiter</filter-class> <init-param> <param-name>word_file</param-name> <param-value>/WEB-INF/word.txt</p