java - request.getParameter() 在 java servlet 中不能正确显示字符编码

标签 java jsp servlets struts2 character-encoding

我对 java servlet 文件中的 UTF-8 有一些问题。当我在 URL 中获取参数值时,我遇到了一些 UTF-8 字符问题。它无法正确显示日语字符。

jsp头已经有了

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

我将连接器中的 URIEncoding 设置添加到 server.xml 中的 UTF-8。

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

我在jsp中写了如下代码

<s:textfield key="txt_name" name="txt_name" id="txt_name"
maxlength="64"></s:textfield>

<a href="javascript:showModalWindow('PopUpFile!init.action?<%=Common.PASSWORD%>=<%=Common.encript(ID, Code)%>','',940,650);">
<s:property value="PopUp Link" />
</a>

<script>
    function showModalWindow(x_URL, x_ARG, x_WIDTH, x_HEIGHT) {
        var x_OPT = "dialogHeight: " + x_HEIGHT + "px; " + "dialogWidth: "
                + x_WIDTH + "px; "
                + "edge: Raised; center: Yes; resizable: Yes; status: Yes;";
        x_URL += "&name="+document.getElementById("txt_name").value;
        var retValue = window.showModalDialog(x_URL, x_ARG, x_OPT);
        if (retValue != null) {
            document.forms.frm.action = "ParentFile!getUser.action";
            document.forms.frm.submit();
        }
    }
</script>

然后,我在java servlet中编写了如下代码。

if(g_request.getParameter("name") != null){
    g_session.setAttribute(NAME, g_request.getParameter("name"));
}

我还在 java servlet 中使用 request.setCharacterEncoding() 方法进行了测试,但它并没有真正起作用。 尽管我从其他人在 stackoverflow 中与 servlet 中的字符编码相关的问题的答案中尝试了很多方法,但直到我无法解决我的问题。

如何正确显示字符编码?提前致谢。

最佳答案

大多数服务器,包括 Apache Tomcat 服务器,默认配置为使用 ISO-8859-1 的参数编码。我认为除非您拥有私有(private)专用服务器实例,否则您不会更改它。因此,程序员的技术是手动编码/解码这些参数。因为您使用的是 javascript,所以有 encodeURI()encodeURIComponent() 内置函数。参见 How to encode a URL in JavaScript .代码应该改变

x_URL += "&name="+encodeURI(document.getElementById("txt_name").value);

在Java中使用URLDecoder解码返回参数。

java.net.URLDecoder.decode(((String[])request.getParameterMap().get("name"))[0], "UTF-8"));

请注意,如果您使用的是 Struts2 dispatcher 结果类型,那么您不需要解码查询字符串中的参数。这些参数通过 UrlHelper 进行解析。

但是,我不记得什么时候解码那些参数在Struts2中自动解码了。

通常您应该知道,如果您在 URL 中传递参数,它们应该是 URL 编码的。如果您提交表单,则不需要这样做,因为表单是 x-www-form-urlencoded,请参阅 17.13.4 Form content types .

关于java - request.getParameter() 在 java servlet 中不能正确显示字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086190/

相关文章:

java - JPA EntityManager 未注入(inject) Java EE 应用程序

java - 更新到 api 19 后 Google Maps V2 崩溃

java - 在Java中,访问器方法总是需要返回一个值吗?

java - 如何删除未使用的 JSP 和操作

java - 如何解决Hibernate异常 “failed to lazily initialize a collection of role”

java - 从 java servlet 检索 hashmap 值到 flex

java - 尝试通过 Java 运行 Pig 时出现错误 4010

java - 如何在jsp中制作漂亮的表格

java - 如何使 HTML 页面(不是 JSP)与 Servlet 进行通信?

java - 未为 Atmosphere servlet 调用 Tomcat 过滤器