Java 将servlet映射到希伯来语(UTF-8)URL模式
我使用的是windows操作系统。 使用Tomcat8。 IDE-netbeans8。 JDK1.8.0_05 我试图为某些servlet指定希伯来文url模式。 (我通过设置Java 将servlet映射到希伯来语(UTF-8)URL模式,java,tomcat,servlets,netbeans,utf-8,Java,Tomcat,Servlets,Netbeans,Utf 8,我使用的是windows操作系统。 使用Tomcat8。 IDE-netbeans8。 JDK1.8.0_05 我试图为某些servlet指定希伯来文url模式。 (我通过设置@webservlet注释的Urlpattern属性和放置在web.xml文件中进行了尝试) 希伯来语地图不起作用。 我检查Tomcat运行时映射的外观(通过使用JConsole的MBeans选项卡),希伯来语url显示为乱码(特别是问号) 我试过: 将-J-Dfile.encoding=UTF-8添加到netbeans
@webservlet
注释的Urlpattern
属性和放置在web.xml
文件中进行了尝试)
希伯来语地图不起作用。
我检查Tomcat运行时映射的外观(通过使用JConsole的MBeans选项卡),希伯来语url显示为乱码(特别是问号)
我试过:
- 将-J-Dfile.encoding=UTF-8添加到netbeans.conf文件中
- 将windows区域设置更改为希伯来语
- 在模式中使用url的url编码版本(这在JConsole中也显示为胡言乱语符号)
- 还尝试以编码形式将URL输入地址栏(例如:localhost:8080/test/%D7%A2%D7%91)
- 检查了记事本中Servlet文件的编码,它们保存为UTF-8(在进行本列表中描述的第一次更改之后)
- 我在所有url模式上都有一个过滤器(即:“/*”),它将请求的字符编码设置为UTF-8(还尝试了Apache的
)SetCharacterEncodingFilter
参考资料:
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>charsetFilter.classes.CharsetFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
String输入=新字符串(request.getParameter(“foo”).getBytes(“iso-8859-1”),“utf-8”);
字符串输入=URLDecover.decode(request.getParameter(“关键字”),“UTF-8”);
系统输出打印项次(输入)代码>
String str = "$ome UTF-8 text £900";
String url = "http://your-domain.com/url?p=" + URLEncoder.encode(str, "UTF-8");
干杯 您需要配置应用程序服务器,以utf-8编码请求参数。因为您使用的是Tomcat,所以在conf/server.xml文件中设置
URIEncoding=“UTF-8”
。下面是它的外观:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
.......
URIEncoding="UTF-8"
/>
试着配置tomcat以理解UTF8(我想是Defautl charset=ISO-8859-1),你也可以试着为tomcat配置JVM。在startup.batURIEncoding中设置-J-Dfile.encoding=UTF-8在tomcat 8中默认为UTF-8如果服务器配置为“严格遵守servlet”,则连接器的URIEncoding属性的默认值为“ISO-8859-1”,与旧版本的tomcat相同。我猜情况并非如此。您可能仍然希望确保org.apache.catalina.STRICT\u SERVLET\u COMPLIANCE system属性未设置为true。我还尝试过(我已经设置了一个)设置一个过滤器来设置HttpServletRequest
的字符编码。其余的都是用于显示内容的字符编码。不不是URL。我的UTF-8内容显示良好(包括查询字符串)。您尝试过URLEncoding.encode吗?我已经更新了我的答案,你正在对参数进行编码。我对参数没有问题。我对url本身有一个问题,特别是servlet路径。@BalusC您现在错了。我从未剽窃过任何帖子的答案。睁大眼睛检查我的答案和你提到的答案。
String str = "$ome UTF-8 text £900";
String url = "http://your-domain.com/url?p=" + URLEncoder.encode(str, "UTF-8");
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
.......
URIEncoding="UTF-8"
/>