Java servlet sendRequest - getParameter编码问题

CdB*_*CdB 3 java encoding servlets 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));
Run Code Online (Sandbox Code Playgroud)

在jsp中,我使用了这些参数

<%
request.getParameter("name");
request.getParameter("title");
%>
Run Code Online (Sandbox Code Playgroud)

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

提前致谢 :)

Bal*_*usC 7

HttpServletResponse#encodeRedirectURL()不URL编码的URL.jsessionid只要有会话且客户端禁用了cookie,它就会将该属性附加到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));
Run Code Online (Sandbox Code Playgroud)

并创建一个映射的过滤器,/*并在doFilter()方法中基本执行以下操作:

request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
Run Code Online (Sandbox Code Playgroud)

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

<%@ page pageEncoding="UTF-8" %>
Run Code Online (Sandbox Code Playgroud)

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

<p>Name: ${param.name}</p>
<p>Title: ${param.title}</p>
Run Code Online (Sandbox Code Playgroud)

也可以看看: