`
only_java
  • 浏览: 109916 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于struts.i18n.encoding的疑问

阅读更多

大家现在都清楚了,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的编码设置吧?怎么还会乱码?

 

 

 下面是测试附件:

分享到:
评论
1 楼 only_java 2009-03-23  
搞什么鬼,在家测的结果和在公司测的结果不一样。。。

相关推荐

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    struts.i18n.encoding The encoding to use for localization messages 国际化信息内码 struts.i18n.reload Whether the localization messages should automatically be reloaded 是否国际化信息自动加载 ...

    国际化 struts2i18n demo

    struts2i18n.rar struts2 i18n的实例, 环境是myeclipse6. struts2.16. struts国际化。

    struts处理中文乱码问题总结

    struts处理中文乱码问题总结struts处理中文乱码问题总结struts处理中文乱码问题总结struts处理中文乱码问题总结

    解决struts2.1.6+spring+hibernate 中文乱码

    struts.i18n.encoding=GBK ) web.xml(仅写出中文处理部分,spring的配置不用改变) <filter-name>encodingFilter <filter-class>org.springframework.web.filter.CharacterEncodingFilter <init-param> ...

    struts_i18n_login.rar_i18n

    struts1中实现了国际化(i18n)的登陆界面

    java中文乱码解决方案

    struts.locale=zh_CN struts.i18n.encoding=UTF-8 struts.serve.static.browserCache=false struts.url.includeParams=none 其中locale、encoding就是字符集的设定了。 3. 在web.xml加个filter  <!-- zh-...

    struts_I18N

    struts_I18N的包,已经用jar打包好了,直接用

    spring-struts.jar

    META-INF/MANIFEST.MForg.springframework.web.struts.ActionServletAwareProcessor.class org.springframework.web.struts.ActionSupport.class org.springframework.web.struts.AutowiringRequestProcessor.class ...

    struts2 i18n国际化实例

    非常清晰可用的struts2 i18n国际化实例,非常适合初学者,不会让大家失望的,有问题还请求指教,大家互相学习,谢谢

    struts.xml

    struts.xml文件配置解释,对action配置进行说明

    spring-webmvc-struts.jar

    spring-webmvc-struts.jar对Struts和Spring整合时需要用到的包

    struts2文件上传

    <constant name="struts.i18n.encoding" value="GBK"> <!--设置临时上传目录--> <constant name="struts.multipart.saveDir" value="d:\"></constant> <package name="default" extends="struts-default"> ...

    Struts2 I18N国际化最简单例子

    一个超级简单的Struts2国际化demo

    struts2国际化_i18n

    struts2国际化_i18n 完整实例。欢迎下载。

    org.apache.struts缺少所需包

    import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction等缺少

    struts2i18n

    struts2 中际化示例,加上s2sh所需的Jar就可以运行!如果不行留言,把demo发给你! 示例图:http://blog.csdn.net/liuc0317/archive/2010/12/01/6048552.aspx

    struts.xml和struts.properties配置详解

    NULL 博文链接:https://wellfrog.iteye.com/blog/612014

    解决MyEclipse下开发Struts异常:org.apache.struts.taglib.bean.CookieTei.doc 下载

    绝对可以解决这个这个问题。Struts初学者绝对可以受用的方法。

    struts.xml文件详解示例代码

    struts.xml文件详解示例代码,可以参照http://blog.csdn.net/jiajia333666/article/details/47979919 阅读。

    Struts2\constant应用

    <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。 如果用户需要指定多个请求后缀,则...

Global site tag (gtag.js) - Google Analytics