精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-23
最后修改:2009-03-23
大家现在都清楚了,struts.i18n.encoding既应用于请求流也应用于返回流。但通过对源码org.apache.struts2.dispatcher.FilterDispatcher的研究发现好像只对requst指定了encode啊?大家请看源码 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; ServletContext servletContext = getServletContext(); String timerKey = "FilterDispatcher_doFilter: "; try { UtilTimerStack.push(timerKey); request = prepareDispatcherAndWrapRequest(request, response);//这里是重点 //这里省略后面的代码 } finally { try { ActionContextCleanUp.cleanUp(req); } finally { UtilTimerStack.pop(timerKey); } } } }
prepareDispatcherAndWrapRequest protected HttpServletRequest prepareDispatcherAndWrapRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException { Dispatcher du = Dispatcher.getInstance(); if (du == null) { Dispatcher.setInstance(dispatcher); dispatcher.prepare(request, response);//这里是重点 } else { dispatcher = du; } //省略了一些代码 return request; } prepare public void prepare(HttpServletRequest request, HttpServletResponse response) { String encoding = null; if (defaultEncoding != null) { encoding = defaultEncoding; } //省略了一些代码 if (encoding != null) { try { request.setCharacterEncoding(encoding);//这里是重点 } catch (Exception e) { LOG.error("Error setting character encoding to '" + encoding + "' - ignoring.", e); } } //省略了一些代码 }
defaultEncoding 在org.apache.struts2.dispatcher.Dispatcher下: @Inject(StrutsConstants.STRUTS_I18N_ENCODING) public static void setDefaultEncoding(String val) { defaultEncoding = val; }
问题1:在prepare函数中request.setCharacterEncoding(encoding);这句设置了encoding,但这里只是设置了request的字符编码吧?那response的呢? 问题2:我在项目中使用encodefilter,和struts.i18n.encoding: 假设条件有三 1.encode filter中设置了request,response的编码都为UTF8 2.struts.i18n.encoding=utf8 3.web.xml中过滤器encode filter放在struts过滤器之前
这三者同时满足的情况下在表单中输入中文,返回正确(不是乱码) 但如果我修改(1),在encode filter仅设置response编码为utf8,其他条件不变则产生乱码!这是为什么? 如果我修改(3),将两个filter调换下顺序则发现也是乱码?就算Jsp页面设置为utf8也一样,filter执行顺序是和web.xml文件中的filter-maping有关。这里按理应该是encode filter的编码设置覆盖struts2的编码设置吧?怎么还会乱码?
下面是测试附件: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-23
搞什么鬼,在家测的结果和在公司测的结果不一样。。。
|
|
返回顶楼 | |
浏览 3019 次