我正在使用 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/