81,122
社区成员




package com.accp.servlet;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
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;
import javax.servlet.http.HttpServletRequest;
public class EncodeFilter implements Filter
{
/**
* 销毁方法
* 该方法在Filter被销毁时被容器调用
*/
public void destroy()
{
// TODO 自动生成方法存根
}
/**
* 该方法实现将以iso-8859-1编码的字符串转换成编码为utf-8以支持
* 中文
* @param inStr
* @return
* @throws UnsupportedEncodingException
*/
private String toUTF(String inStr) throws UnsupportedEncodingException
{
String outStr = "";
if(inStr != null)
{
outStr = new String(inStr.getBytes("iso-8859-1"),"utf-8");
}
return outStr;
}
/**
* 过滤方法
* 该方法在过滤请求或响应时被调用
* 所有匹配的请求在被发送到服务器前会
* 先"到此一游"
* 所有的响应在被响应到客户端前会
* 先"到此一游"
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chan) throws IOException, ServletException
{
//取得客户端的提交方式
String method = ((HttpServletRequest)request).getMethod();
//判断客户端的提交方式
if(method.equalsIgnoreCase("post"))
{
//设置请求对象支持中文的字符集
request.setCharacterEncoding("utf-8");
}
else
{
//取出客户端提交的所有的参数名,是一个枚举
Enumeration<String> paramNames = request.getParameterNames();
while(paramNames.hasMoreElements())//遍历
{
String name = paramNames.nextElement();//取出每个参数名称
String values[] = request.getParameterValues(name);//根据参数名称取得参数值
if(values != null)//判断参数是否有值
{
if(values.length == 1)//判断参数是否单值
{
//调用toUTF(values[0])方法转换参数值的字符编码
//并将该值以属性的形式藏在request
request.setAttribute(name, toUTF(values[0]));
}
else
{
for(int i=0;i<values.length;i++)
{
//循环依次将每个值调用toUTF(values[0])方法转换参数值的字符编码
values[i] = toUTF(values[i]);
}
//将该值以属性的形式藏在request
request.setAttribute(name, values);
}
}
}
}
//设置响应对象的响应模式和支持中文的字符集
response.setContentType("text/html;charset=utf-8");
//调用过滤器链中其他过滤器
chan.doFilter(request, response);
}
/**
* 初始化方法
* 该方法在Filter被初始化时被容器调用
*/
public void init(FilterConfig arg0) throws ServletException
{
// TODO 自动生成方法存根
}
}
<!-- 定义一个过滤器 -->
<filter>
<!-- 定义一个过滤器的别名 -->
<filter-name>MyFilter</filter-name>
<!-- 该过滤器的类的位置 -->
<filter-class>com.accp.servlet.EncodeFilter</filter-class>
</filter>
<!-- 过滤器映射 -->
<filter-mapping>
<filter-name>MyFilter</filter-name>
<!-- 指定过滤器应该和必须过滤的请求 -->
<url-pattern>/next</url-pattern>
</filter-mapping>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.accp.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/next</url-pattern>
</servlet-mapping>
</web-app>