问题描述
系统为:tomcat, Spring+Spring MVC+freemarker由于tomcat上有许多应用,不能修改connector属性URIEncoding为UTF8,所以freemarker中使用${RequestParameters["fn"]}得到中文字符。我目前的解决办法是在controller里拿到parameter,并转码,然后储存在一个map里,返回到页面上。请问有什么其他办法吗? 问题补充:myali88 写道
解决方案
采用另外一种办法,你看试试行不。你扩展一个HttpServletRequestWrapper 类,在子类里面重载getParameter方法:class ParametersWrapper extends HttpServletRequestWrapper { public String getParameter(String name) { String val = super.getParameter(name);//这里返回的是乱码 //然后你自己通过转码,返回正确的字符 return new String(val.getBytes("iso-859-1") , "xxx");//xxx,你转换的编码 }}然后通过一个过滤器拦截所有请求,对GET请求进行request替换:public class EncodingFilter implements Filter { public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain fc) throws IOException, ServletException { final HttpServletRequest req = (HttpServletRequest) sreq; final HttpServletResponse res = (HttpServletResponse) sres; if (req.getMethod() == "GET") { fc.doFilter(new ParametersWrapper(req), res); }else { fc.doFilter(wrapper, res); }}}
解决方案二:
我觉得也没什么好的办法了,如果你的请求是“GET”的话,encodingFilter对这些参数是不启作用的,除非你能改用“POST”。另外一个方法,就是你用spring的拦截器去拦截${RequestParameters["fn"]}的调用过程,然后转码。不过,这个只是我的想法,没实践过。
解决方案三:
再架一台tomcat