java web乱码的产生:
1. get提交乱码:get中如果出现了中文,预览器会以utf-8的方式转成url格式发送出去.服务器收到后,默认转成iso-8859-1.造成乱码.这种方式没有什么好的办法,只能用反编码再解码解决.
2.post提交乱码:内容乱码可以用一下的两行来解决,告诉服务器内容部分要用什么编码解决.
<span style="white-space:pre"> </span>response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8 ");
使用全站过滤器解决乱码:
- 创建一个自己的request类,覆盖掉获取get提交的三个方法并处理.
- 在web.xml中配置过滤器.
<filter>
<filter-name>webFilter</filter-name>
<filter-class>filter.webFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>webFilter</filter-name>
<servlet-name>*</servlet-name>
</filter-mapping>
</pre><pre name="code" class="java">package filter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import java.net.URLPermission;
import java.security.URIParameter;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import com.sun.accessibility.internal.resources.accessibility;
import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry.Entry;
import com.sun.corba.se.spi.orb.StringPair;
import com.sun.org.apache.xml.internal.security.keys.content.RetrievalMethod;
public class myHttpRequest extends HttpServletRequestWrapper
{
private HttpServletRequest request = null;
public myHttpRequest(HttpServletRequest request)
{
super(request);
this.request = request;
}
@Override
public String getParameter(String name)
{
if(request.getParameter(name) != null)
{
return request.getParameterValues(name)[0];
}
return null;
}
boolean isEncode = false;
@Override
public Map getParameterMap()
{
try
{
if(request.getMethod().equalsIgnoreCase("POST"))
{
request.setCharacterEncoding("UTF-8");
return request.getParameterMap();
}
else if(request.getMethod().equalsIgnoreCase("GET"))
{
Map<String, String[]> map = request.getParameterMap();
if(isEncode)
{
return map;
}
else
{
for (Map.Entry<String, String[]> entry : map.entrySet())
{
String[] vs = entry.getValue();
for (int i = 0; i < vs.length; i++)
{
vs[i] = new String(vs[i].getBytes("iso-8859-1"),
"utf-8");
}
}
isEncode = true;
return map;
}
}
else
{
return super.getParameterMap();
}
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return null;
}
@Override
public String[] getParameterValues(String name)
{
return (String[])this.request.getParameterMap().get(name);
}
}
package 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;
public class webFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8 ");
chain.doFilter(new myHttpRequest((HttpServletRequest)request), response);
}
@Override
public void destroy()
{
}
}