[英]request.getParameter() does not display properly character encoding in java servlet
[英]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派生的servlet,並完全避免整個參數編碼問題。
還要確保JSP頁面指令將內容編碼設置為UTF-8。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.