【问题标题】:Spring MVC URIEncoding can't send requestparam correctlySpring MVC URIEncoding 无法正确发送 requestparam
【发布时间】:2013-07-23 15:26:14
【问题描述】:

我需要从浏览器向 Spring MVC 控制器发送一些请求参数,然后像方法参数一样处理它们。问题是我猜想tomcat没有对通过的URI数据进行正确的编码。而不是'Имя' 我有:%D0%9C%D0%91%D0%94%D0%9E%D0%A3+%D0%B4%2F%D1%81%E2%84%969%D1%81.+%D0%95%D0%BB%D0%B8%D0%BE%D0%BD%D0%BA%D0%B0

我曾经阅读过由于 tomcat 没有预安装 URI 编码而发生的此类问题。

如果你介意我在 tomcat config web.xml 中有正文编码,那么是的,我有:

<filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
        <init-param>
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>tru?</param-value>
        </init-param>       
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

所以我很好奇我是否必须为容器配置设置其他任何东西。?谢谢你

【问题讨论】:

    标签: spring tomcat spring-mvc uri uriencoding


    【解决方案1】:

    您必须在您的 tomcat 配置目录中的 server.xml 文件中为 HTTP 连接器设置 URIEncoding 属性:

    <Connector port="8080" URIEncoding="UTF-8" ...  />
    

    【讨论】:

    • 是的,先生。这是完全正确的。但我以前试过。问题是连接器 server.xml 在每次重新启动容器时都会自行重写。我尝试将 autoDeploy="true" 安装为 false,但它会继续做同样的事情。
    • 您在设置中使用的是什么版本的 tomcat?这是一个非常奇怪的行为
    • 谢谢先生。它完美地工作。我不知道为什么,但是当我再次安装我的 tomcat 时,它就可以正常工作了
    【解决方案2】:

    我发现在不更改 Tomcat 配置的情况下执行此操作的唯一方法是:

    将参数放入表单

    <form onsubmit="encodeParameter(this.param)">
      <input type="text" name="param" />
      <input type="submit" />
    </form>

    然后在提交到服务器之前对其进行编码

    function encodeParameter(param){
      param.value =encodeURIComponent(param.value);
    }

    现在在服务器上你会得到正确的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多