81,092
社区成员
发帖
与我相关
我的任务
分享
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 EnCodeFilter implements Filter{
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
Enumeration enums = request.getParameterNames();
if(enums!=null){
while(enums.hasMoreElements()){
String name = (String) enums.nextElement();
String values[] = request.getParameterValues(name);
for(int i=0;i<values.length;i++){
values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
}
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
public class EncodingFilter implements Filter {
String encoding = null;
@Override
public void init(FilterConfig filterConfig) throws ServletException { //初始化Filter
encoding = filterConfig.getInitParameter("encoding"); //获取配置中的encoding
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
//response.setContentType("text/html;charset="+encoding);这句可加/根据需求
chain.doFilter(request, response); //这句代码很重要,如果不加上这句,那么你这个Filter是无效的
}
@Override
public void destroy() { //用于释放资源
encoding = null;
}
}
web.xml中配置该Filter:
<filter>
<filter-name>encoding__filter</filter-name>
<filter-class><!-- 这儿写当前这个Filter的完整名称(包名+类名) --></filter-class>
<!-- 统一用utf-8编码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding__filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
接下来就是你eclipse工作空间的编码集了:位置 Windows ----> Preferences ----->General ---->WorkSpace 里面有个选项 Text file encoding,这里可以设置,为了统一,都设置成UTF-8.然后看一下你这个项目的编码集,位置Project---->Properties----Resource 中的Text file encoding,看是不是UTF-8.
最后就是你的jsp了: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
好了,说到这里估计应该不存在乱码了。
<!-- 编码过滤器 -->
<filter>
<filter-name>jspencodfilter</filter-name>
<filter-class>com.shitong.filter.JspEncoding</filter-class>
<!-- 统一用utf-8编码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jspencodfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
package com.shitong.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;
public class JspEncoding implements Filter {
private final String TAG = "JspEncoding - ";
String jspEncoding = null;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
//System.out.println("JspEncoding - dofilter jspencoding = "+jspEncoding);
request.setCharacterEncoding(jspEncoding);
response.setContentType("text/html;charset="+jspEncoding);
filterChain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
//此中的encoding与web.xml中的filter中initparam 名字相同
jspEncoding = arg0.getInitParameter("encoding");
}
}