表单编码过滤器

本文的过滤器适用于Servlet编程


如果用到了Spring,则可以使用org.springframework.web.filter.CharacterEncodingFilter替换掉

<?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>org.springframework.web.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>


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

<?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

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);
	}
}

你可能感兴趣的:(表单编码过滤器)