Tomcat 是开源的 Apache 软件基金会下属的一个组建,主要是用于 Java 语言的 Web 应用程序的管理和运行。在使用 Tomcat 过程中,有时候会出现 “Invalidcharacterfoundintherequesttarget.ThevalidcharactersaredefinedinRFC7230andRFC3986” 的异常信息,该异常信息主要是因为请求的 URL 中包含不合法的字符而造成的,下面是解决该异常的完整攻略。
解决方法
1. 修改 Tomcat 配置文件
首先需要找到 Tomcat 的安装目录,然后进入到 conf
文件夹中,找到 server.xml
文件。在该文件中找到 <Connector>
标签段,在该标签段中修改 URIEncoding
值为 UTF-8
,如下所示:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
2. 配置 Web 应用程序
在 Web 应用程序的 web.xml
配置文件中找到 encodingFilter
过滤器,如果没有则需要手动添加。在该过滤器中配置 URLEncoding
的内容为 UTF-8
。如下所示:
<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>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
示例说明
示例1
假设通过地址栏访问的 URL 中包含了中文字符,如下所示:
http://localhost:8080/test?id=1&name=张三
此时就会出现上述异常信息。为了解决该异常信息,可以使用上述第一种方法,修改 Tomcat 的配置文件,设置 URIEncoding 值为 UTF-8,然后重启 Tomcat。修改之后,再次访问上述 URL,就不会出现异常信息了。
示例2
假设在使用 Ajax 请求数据时,请求 URL 中包含了特殊字符,如下所示:
$.ajax({
url: "http://localhost:8080/test?id=1&name=张三&...",
type: "GET",
dataType: "json",
success: function(data) {}
});
此时也会出现上述异常信息。为了解决该异常信息,可以使用上述第二种方法,在 Web 应用程序的 web.xml
配置文件中添加 encodingFilter
过滤器,并设置 URLEncoding
的值为 UTF-8
。这样就可以解决该异常信息,如下所示:
<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>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上就是关于 “tomcat异常解决(Invalidcharacterfoundintherequesttarget.ThevalidcharactersaredefinedinRFC7230andRFC3986)” 的完整攻略,希望能够帮助到您。