好的,我花了三七小时谷歌搜索和测试,我放弃了,我必须寻求帮助。 我以前用Linux开发,一切都很简单,现在我使用windows,设置正确的语言环境等简单的东西不起作用。
我使用form:
创建了简单的JSP<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<form action="save-user" method="post">
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
<input type="submit" value="Save">
</form>
和Servlet:
String name = request.getParameter("name");
String email = request.getParameter("email");
我收到LeoÅ而不是Leoš。我使用WildFly 8.0RC1,Windows 8捷克语,firefox。
我已经尝试过了:
当部署JPA实体/ DAO时,变音符号会被破坏。如果我从servlet注释掉实体并从war中删除JPA实体(当前从WEB-INF / lib中删除OAuthLoginEJB.jar),那么我会收到正确的编码。如果我再添加这个EJB,它会再次失败。它是JBoss / WildFly的bug吗?
我可以提供完整的来源:https://drive.google.com/file/d/0B-adlc5KThQDWTdYOEwxOUpTVEU/edit?usp=sharing 它已准备好运行,您甚至不需要输入捷克字母,因为它们是预先填写的。谢谢
答案 0 :(得分:2)
来自WildFly dev邮件列表的Marko向我指出了这个缺陷:https://issues.jboss.org/browse/CDI-411并解决了这个问题:http://weld.cdi-spec.org/documentation/#3
当我修改我的web.xml时,它开始起作用:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>cz.literak.demo.oauth.servlets.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CDI Conversation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
答案 1 :(得分:1)
首先从请求InputStream读取之前需要调用request.setCharacterEncoding("UTF-8")
。在servlet中设置编码之前,过滤器可以读取参数。可能在OAuthLoginEJB.jar
或其他依赖项中有一些过滤器,它首先读取参数?通常,这是用于调试的一些参数...使用Servlet API 3.0,可以通过注释注册servlet和过滤器,因此可以注册一些过滤器,尽管空web.xml
。