Java servlet sendRequest - getParameter编码问题

时间:2011-02-23 20:51:33

标签: java servlets encoding character-encoding getparameter

我正在使用java servlet为我的课程构建一个Web应用程序。在某些时候,我想重定向到一个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 =ΕΡΕΥΝΑΣ我得到名字=¡¥。 如何解决此编码问题(将其设置为UTF-8)? 是不是encodeRedirectURL()做这个工作?我应该在某个时候使用encodeURL()吗?我尝试了最后一个,但问题仍然存在。

提前致谢:)

4 个答案:

答案 0 :(得分:7)

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

在编写URL时,您需要在URLEncoder#encode()的帮助下对请求参数进行编码。

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>

另见:

答案 1 :(得分:1)

使用java.net.URLEncoder对每个参数进行编码,然后再将它们添加到url中。这样考虑一下:如果你的名字包含“&amp;”,你怎么知道这不是参数分隔符?

答案 2 :(得分:0)

在将每个请求参数放入查询字符串之前,应该使用URLEncoder.encode()对每个请求参数进行编码。

encodeRedirectURL方法仅用于在必要时将会话ID包含在URL中(如果浏览器不支持cookie,则重写URL)

答案 3 :(得分:0)

以下情况怎么样?

  • 在请求对象上将名称和标题设置为属性;
  • 从请求对象或通过servlet上下文获取JSP的请求调度程序;
  • 使用请求调度程序将请求转发给JSP;
  • 从JSP中请求访问这些属性。

这样可以节省将浏览器从第一个servlet重定向到JSP派生的servlet,并完全避免整个参数编码问题。

还要确保JSP页面指令将内容编码设置为UTF-8。