`
only_java
  • 浏览: 112426 次
  • 性别: 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  
搞什么鬼,在家测的结果和在公司测的结果不一样。。。

相关推荐

    struts2的struts.properties配置文件详解

    12. struts.i18n.encoding:这是国际化信息的内码,Struts2用于处理国际化信息。 13. struts.i18n.reload:这是一个布尔值,用于确定是否自动加载国际化信息。如果设置为true,Struts2将自动加载国际化信息。 14. ...

    struts.xml和struts.properties配置详解

    6. **struts.custom.i18n.resources**: 添加自定义的国际化资源文件,如`struts.custom.i18n.resources=myMessages`。 7. **struts.multipart.maxSize**: 设置上传文件的最大大小。 8. **struts.enable.Dynamic...

    struts.xml文件详解.doc

    例如,你可以通过更改struts.locale属性来设置应用的默认区域设置,或者通过struts.i18n.encoding来设定Web应用的默认字符编码,这对于处理中文请求参数尤其重要。 struts.properties中的属性也可以在web.xml或...

    struts2 i18n学习记录

    <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.custom.i18n.resources" value="struts/i18n/messages"/> ``` 3. 在Action或视图中使用:在Action中,你可以通过`ActionContext`...

    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 是否国际化信息自动加载 ...

    struts2_i18n

    这里,`struts.i18n.encoding`指定了资源文件的编码,`struts.action.extension`定义了动作映射的扩展名,而`struts.custom.i18n.resources`则列出了应用中所有要加载的资源包名称。 在Action类中,我们可以使用...

    国际化 struts2i18n demo

    <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.custom.i18n.resources" value="global/messages"/> ``` 这将告诉Struts2在哪里查找资源文件,并指定字符编码。 3. 使用资源键...

    struts.properties详解

    struts.locale 和 struts.i18n.encoding - **struts.locale**:用于指定Web应用的默认地区设置(locale)。这对于国际化应用来说非常重要。 - **struts.i18n.encoding**:指定Web应用的默认字符编码集。这在处理...

    (三)Struts2国际化(i18n) :简单语言包的实现

    使用`<constant>`标签,设置`struts.i18n.resources`属性,值为资源文件的路径。例如: ```xml <constant name="struts.i18n.resources" value="messages"/> ``` 3. **在JSP中使用**:在JSP页面中,我们可以使用...

    struts_i18n_login.rar_i18n

    最后,关于 "struts_i18n_login" 这个压缩包,很可能包含了实现这样一个国际化登录界面的所有必要文件,包括 Struts 配置文件、JSP 页面、资源属性文件等。解压后,开发者可以参考这些示例代码来学习和理解 Struts 1...

    struts.properties配置详解

    - **struts.i18n.encoding** - **描述**:指定Web应用程序的默认字符编码。 - **示例**:设置默认字符编码为UTF-8。 - **配置**: ```properties struts.i18n.encoding=UTF-8 ``` - **struts.objectFactory**...

    struts2的struts.properties介绍

    #### struts.i18n.encoding **含义**:指定用于本地化消息的编码。 **示例**:设置为`UTF-8`以确保正确处理各种字符集。 **应用场景**:确保国际化文本正确显示,避免乱码问题。 #### struts.i18n.reload **...

    i18n的一些源码

    <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.custom.i18n.resources" value="global/messages"/> ``` 这样,Struts2就会在指定的路径下查找资源文件。 4. **浏览器设置与...

    struts处理中文乱码问题总结

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

    struts2-i18n实现国际化例子

    <constant name="struts.i18n.resources" value="com/yourpackage/messages"/> ``` 3. **在Action中使用**: 在Action类中,你可以通过`ValueStack`或者`ActionContext`来获取和设置国际化文本。例如: ```java ...

    struts_I18N

    - **.struts.properties**:在Struts1.x中,国际化的资源文件通常命名为*.properties,例如messages.properties,其中包含了默认的语言(通常是英语)的文本。 - **多语言支持**:为了支持其他语言,可以创建如...

    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的配置文件`struts.xml`中,我们需要添加特定的拦截器`i18n`,它负责根据用户的浏览器设置自动选择相应的语言资源包。配置如下: ```xml <interceptor name="i18n" class="org.apache.struts2....

    详解struts2中struts.properties.doc

    3. `struts.i18n.encoding`: 指定请求参数的默认编码,对于处理中文字符尤其重要,如设置为`GBK`或`GB2312`。 4. `struts.objectFactory`: 该属性定义了默认的ObjectFactory,用于创建对象,如Spring集成时,默认值...

Global site tag (gtag.js) - Google Analytics