Java servlet sendRequest - getParameter编码问题

标签 java servlets encoding character-encoding getparameter

我正在使用 java servlet 为我的类(class)构建一个网络应用程序。在某些时候,我想重定向到一个 jsp 页面,同时发送一些想要在那里使用的信息(使用 GET 方法)。 在我的 servlet 中,我有以下代码:

String link = new String("index.jsp?name="+metadata.getName()+"&title="+metadata.getTitle());

response.sendRedirect(response.encodeRedirectURL(link));

在jsp中,我使用

获取这些参数
<%
request.getParameter("name");
request.getParameter("title");
%>

一切正常,除非参数不只包含拉丁字符(在我的例子中,它们可以包含希腊字符)。 例如,如果 name=ΕΡΕΥNΑΣ 我得到 name=¡¥。 我该如何解决这个编码问题(将其设置为 UTF-8)? encodeRedirectURL() 不是在做这个工作吗?我还应该在某个时候使用 encodeURL() 吗?我尝试了最后一个,但问题仍然存在。

提前致谢:)

最佳答案

HttpServletResponse#encodeRedirectURL()不对 URL 进行 URL 编码。只要存在 session 且客户端已禁用 cookie,它只会将 jsessionid 属性附加到 URL。不可否认,这是一个令人困惑的方法名称。

您需要借助 URLEncoder#encode() 对请求参数进行编码您自己在编写 URL 时。

String charset = "UTF-8";
String link = String.format("index.jsp?name=%s&title=%s", 
    URLEncoder.encode(metadata.getName(), charset), 
    URLEncoder.encode(metadata.getTitle(), charset));

response.sendRedirect(response.encodeRedirectURL(link));

并创建一个 filter它映射到 /* 并在 doFilter() 方法中执行以下操作:

request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);

并将以下内容添加到您的 JSP 的顶部:

<%@ page pageEncoding="UTF-8" %>

最后您将能够按如下方式显示它们:

<p>Name: ${param.name}</p>
<p>Title: ${param.title}</p>

另见:

关于Java servlet sendRequest - getParameter编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5096946/

相关文章:

java - ReplicaFetcher 崩溃 - 第一个偏移量 XXXXXXX 小于下一个偏移量 YYYYYYYY

java - 在 java 中集成quartz config xml 和 spring 时出现此异常

java - 为什么我的 servlet 不转发到我的 .jsp?

java - 如何使用 tomcat 5.5 上传 excel 文件?

iphone - 使用带有 iPhone SDK 的 FFMPEG 库进行视频编码

java - 初级java for循环

java - 从 JTextArea 获取用户输入

java - 跟踪对 java servlet 的调用

c# - 有没有一种简单的方法来创建带有编码对话框的 C# .NET 文件对话框?

Python 将字符串转换为等效的 HTML 字符