【转载】Servlet过滤器的实例

下面是JavaWeb工程中的web.xml配置

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.     <filter>  
  8.         <filter-name>EncodingFilter</filter-name>  
  9.         <filter-class>com.jadyer.Filter.CharacterEncodingFilter</filter-class>  
  10.         <init-param>  
  11.             <param-name>encoding</param-name>  
  12.             <param-value>UTF-8</param-value>  
  13.         </init-param>  
  14.     </filter>  
  15.     <filter-mapping>  
  16.         <filter-name>EncodingFilter</filter-name>  
  17.         <url-pattern>/*</url-pattern>  
  18.     </filter-mapping>  
  19. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>com.jadyer.Filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

 下面是用于设定表单传输参数编码的过滤器CharacterEncodingFilter.java

 

Java代码 复制代码  收藏代码
  1. package com.jadyer.Filter;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import javax.servlet.Filter;   
  6. import javax.servlet.FilterChain;   
  7. import javax.servlet.FilterConfig;   
  8. import javax.servlet.ServletException;   
  9. import javax.servlet.ServletRequest;   
  10. import javax.servlet.ServletResponse;   
  11.   
  12. /**  
  13.  * 设定传输参数编码  
  14.  */  
  15. public class CharacterEncodingFilter implements Filter {   
  16.     private String encoding = "ISO8859_1";   
  17.   
  18.     /**  
  19.      * 当过滤器对象被销毁的时候,由Web容器调用该方法  
  20.      * @see 该方法主要用来释放过滤器对象所占用的资源  
  21.      */  
  22.     public void destroy() {}   
  23.        
  24.     /**  
  25.      * 由Web容器在刚生成过滤器对象的时候进行调用,主要用来完成对过滤器的初始化工作  
  26.      * @see 该方法接收一个FilterConfig类型的参数,通过该参数以获得有关当前过滤器的信息  
  27.      * @see 例如:调用FilterConfig的getFilterName()方法可以获得过滤器的名字  
  28.      * @see 例如:调用getServletContext()方法可以获得当前的ServletContext对象  
  29.      * @see 这里主要是用来读取web.xml中设定的<param-name>encoding</param-name>的值  
  30.      */  
  31.     public void init(FilterConfig config) throws ServletException {   
  32.         encoding = config.getInitParameter("encoding");   
  33.     }   
  34.   
  35.     /**  
  36.      * doFilter()方法是Filter接口中最核心的方法,完成过滤器的过滤功能  
  37.      * @see FilterChain类型的对象是保存多个过滤器执行顺序的对象  
  38.      * @see 一个Web应用中可以有多个过滤器,这些过滤器就像珠子被线串在了一起  
  39.      * @see 调用时,是一个接着一个进行调用的,调用顺序是按照过滤器在web.xml中声明的先后顺序  
  40.      * @see 通过调用FilterChain对象的doFilter()方法,可以调用下一个过滤器的doFilter()方法  
  41.      * @see 如果下一个过滤器是最后一个,则调用客户端所请求的Servlet、JSP或者其它文件  
  42.      */  
  43.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {   
  44.         request.setCharacterEncoding(encoding); //设定表单参数编码方式   
  45.         chain.doFilter(request, response);   
  46.     }   
  47. }  
package com.jadyer.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;

/**
 * 设定传输参数编码
 */
public class CharacterEncodingFilter implements Filter {
	private String encoding = "ISO8859_1";

	/**
	 * 当过滤器对象被销毁的时候,由Web容器调用该方法
	 * @see 该方法主要用来释放过滤器对象所占用的资源
	 */
	public void destroy() {}
	
	/**
	 * 由Web容器在刚生成过滤器对象的时候进行调用,主要用来完成对过滤器的初始化工作
	 * @see 该方法接收一个FilterConfig类型的参数,通过该参数以获得有关当前过滤器的信息
	 * @see 例如:调用FilterConfig的getFilterName()方法可以获得过滤器的名字
	 * @see 例如:调用getServletContext()方法可以获得当前的ServletContext对象
	 * @see 这里主要是用来读取web.xml中设定的<param-name>encoding</param-name>的值
	 */
	public void init(FilterConfig config) throws ServletException {
		encoding = config.getInitParameter("encoding");
	}

	/**
	 * doFilter()方法是Filter接口中最核心的方法,完成过滤器的过滤功能
	 * @see FilterChain类型的对象是保存多个过滤器执行顺序的对象
	 * @see 一个Web应用中可以有多个过滤器,这些过滤器就像珠子被线串在了一起
	 * @see 调用时,是一个接着一个进行调用的,调用顺序是按照过滤器在web.xml中声明的先后顺序
	 * @see 通过调用FilterChain对象的doFilter()方法,可以调用下一个过滤器的doFilter()方法
	 * @see 如果下一个过滤器是最后一个,则调用客户端所请求的Servlet、JSP或者其它文件
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding(encoding); //设定表单参数编码方式
		chain.doFilter(request, response);
	}
}

 字符过滤器:

CharFilter.java

 

Java代码 复制代码  收藏代码
  1. package servlet;   
  2.   
  3. import java.io.IOException;   
  4. import java.util.Enumeration;   
  5.   
  6. import javax.servlet.Filter;   
  7. import javax.servlet.FilterChain;   
  8. import javax.servlet.FilterConfig;   
  9. import javax.servlet.ServletException;   
  10. import javax.servlet.ServletRequest;   
  11. import javax.servlet.ServletResponse;   
  12.   
  13. public class CharFilter implements Filter {   
  14.   
  15.     public void destroy() {   
  16.   
  17.         System.out.println("aaaaaaaaaa");   
  18.     }   
  19.   
  20.     public void doFilter(ServletRequest request, ServletResponse response,   
  21.             FilterChain chain) throws IOException, ServletException {   
  22.         String content = request.getParameter("text");   
  23.         if (content != null) {   
  24.             if (content.indexOf("AAA") == -1) {   
  25.                 chain.doFilter(request, response);   
  26.             } else {   
  27.                 System.out.println("有非法文字");   
  28.             }   
  29.         } else {   
  30.             chain.doFilter(request, response);   
  31.         }   
  32.   
  33.     }   
  34.   
  35.     public void init(FilterConfig filterConfig) throws ServletException {   
  36.         String charset = filterConfig.getInitParameter("charset");   
  37.         System.out.println(charset);   
  38.         Enumeration<String> servletName = filterConfig.getInitParameterNames();   
  39.         while (servletName.hasMoreElements()) {   
  40.             String object = (String) servletName.nextElement();   
  41.             System.out.println(object + "="  
  42.                     + filterConfig.getInitParameter(object));   
  43.   
  44.         }   
  45.   
  46.     }   
  47.   
  48. }  
package servlet;

import java.io.IOException;
import java.util.Enumeration;

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

public class CharFilter implements Filter {

	public void destroy() {

		System.out.println("aaaaaaaaaa");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		String content = request.getParameter("text");
		if (content != null) {
			if (content.indexOf("AAA") == -1) {
				chain.doFilter(request, response);
			} else {
				System.out.println("有非法文字");
			}
		} else {
			chain.doFilter(request, response);
		}

	}

	public void init(FilterConfig filterConfig) throws ServletException {
		String charset = filterConfig.getInitParameter("charset");
		System.out.println(charset);
		Enumeration<String> servletName = filterConfig.getInitParameterNames();
		while (servletName.hasMoreElements()) {
			String object = (String) servletName.nextElement();
			System.out.println(object + "="
					+ filterConfig.getInitParameter(object));

		}

	}

}

 web.xml配置

 

Xml代码 复制代码  收藏代码
  1. <filter>  
  2.         <filter-name>char</filter-name>  
  3.         <filter-class>servlet.CharFilter</filter-class>  
  4.         <init-param>  
  5.             <param-name>charset</param-name>  
  6.             <param-value>gbk</param-value>  
  7.         </init-param>  
  8.         <init-param>  
  9.             <param-name>it</param-name>  
  10.             <param-value>hope</param-value>  
  11.         </init-param>  
  12.     </filter>  
  13.     <filter-mapping>  
  14.         <filter-name>char</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值