jsp解决乱码终极攻略
今天发现项目竟然有中文乱码问题!? ,明明记得配置好页面编码和filter了,怎么会呢?
打开页面发现编码如下:
<%@ page language="java" import="java.util.*,pojo.*" pageEncoding="UTF-8"%>
过滤器也正常:
因为也考虑了AJAX的情况,所以和一般的过滤器有点区别,但是红色部分确实被执行了.
public class Encoding implements Filter {
private String charset;
private String ajaxPostContentType;
public static final String AJAX_POST_CONTENT_TYPE_DEFAULT = "application/x-www-form-urlencoded";
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest)arg0;
String requestSrc = request.getQueryString();
if(requestSrc !=null){
arg0.setCharacterEncoding("UTF-8");
arg1.setCharacterEncoding("UTF-8");
arg0.getParameter("");
}else{
arg0.setCharacterEncoding(charset);
arg1.setCharacterEncoding("text/html;charset="+charset);
}
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
charset = arg0.getInitParameter("charset");
ajaxPostContentType = arg0.getInitParameter("ajaxContent");
if(ajaxPostContentType == null){
ajaxPostContentType = AJAX_POST_CONTENT_TYPE_DEFAULT;
}
}
}
Web.xml中配置如下:
<filter> <filter-name>encode</filter-name> <filter-class>filter.Encoding</filter-class> <init-param> <param-name>charset</param-name> <param-value>utf8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encode</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
貌似该做的都做了,到底问题出在哪里? 经过一番测试原来问题是:
<form id="trheaderform" name="trheaderform" action="lagp.do" >
仔细看了一下,没指定提交方式,所以默认用get方式提交!改为:
<form id="trheaderform" name="trheaderform" action="lagp.do" method="post">
测试OK!
总结一下:
1。 要保证Jsp的页面编码是UTF-8
2。 配置好filter,强制编码为UTF-8
3。 设置Form的提交方式为POST
持续学习、持续收获才能带来持续的满足和快乐!
浙公网安备 33010602011771号