freemarker页面get型参数转码问题

系统为:tomcat, Spring+Spring MVC+freemarker
由于tomcat上有许多应用,不能修改connector属性URIEncoding为UTF8,所以freemarker中使用${RequestParameters["fn"]}得到中文字符。
我目前的解决办法是在controller里拿到parameter,并转码,然后储存在一个map里,返回到页面上。请问有什么其他办法吗?

采用另外一种办法,你看试试行不。你扩展一个HttpServletRequestWrapper 类,在子类里面重载getParameter方法:
[code="java"]
class ParametersWrapper extends HttpServletRequestWrapper {

public String getParameter(String name) {
     String val = super.getParameter(name);//这里返回的是乱码
     //然后你自己通过转码,返回正确的字符
     return new String(val.getBytes("iso-859-1") , "xxx");//xxx,你转换的编码
}

}
[/code]
然后通过一个过滤器拦截所有请求,对GET请求进行request替换:
[code="java"]
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);
 }

}

}
[/code]

再架一台tomcat

我觉得也没什么好的办法了,如果你的请求是“GET”的话,encodingFilter对这些参数是不启作用的,除非你能改用“POST”。
另外一个方法,就是你用spring的拦截器去拦截
[code="java"]${RequestParameters["fn"]}[/code]
的调用过程,然后转码。不过,这个只是我的想法,没实践过。