簡體   English   中英

Java servlet sendRequest - getParameter編碼問題

[英]Java servlet sendRequest - getParameter encoding Problem

我正在使用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()嗎? 我嘗試了最后一個,但問題仍然存在。

提前致謝 :)

HttpServletResponse#encodeRedirectURL()不對URL進行URL編碼。 只要有會話並且客戶端禁用了cookie,它就會將jsessionid屬性附加到URL。 不可否認,這是一個令人困惑的方法名稱。

在編寫URL時,您需要在URLEncoder#encode()幫助下對請求參數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));

並創建一個映射在/*上的過濾器 ,並在doFilter()方法中基本完成以下操作:

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

並將以下內容添加到JSP的頂部

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

最后,您將能夠按如下方式顯示它們:

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

也可以看看:

在將每個參數添加到url之前,使用java.net.URLEncoder對其進行編碼。 這樣考慮:如果你的名字包含“&”,你怎么知道這不是參數分隔符?

在將每個請求參數放入查詢字符串之前,您應該使用URLEncoder.encode()對每個請求參數進行編碼。

encodeRedirectURL方法僅用於在必要時將會話ID包含到URL中(如果瀏覽器不支持cookie,則重寫URL)

相反如何呢?

  • 在請求對象上將名稱和標題設置為屬性;
  • 從請求對象或servlet上下文獲取JSP的請求調度程序;
  • 使用請求調度程序將請求轉發給JSP;
  • 在JSP的請求中訪問這些屬性。

這樣可以節省將瀏覽器從第一個servlet重定向到JSP派生的servlet,並完全避免整個參數編碼問題。

還要確保JSP頁面指令將內容編碼設置為UTF-8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM