Java EE基礎-response和request頁面跳轉問題


request.setAttribute("flag1","哈哈1");

request.getSession().setAttribute("flag3", "測試");

1. response.sendRedirect("/qq/success.jsp");

PS:如果工程不是在ROOT根目錄下,不要忘記加上你的工程名

success.jsp : 

<%
String sessio = (String)request.getSession().getAttribute("session");
String flag1 = (String)request.getAttribute("flag1");
String flag2 = request.getParameter("flag2");
%>
SESSION : <%=sessio %>。
FLAG1 : <%=flag1 %>。

 

輸出:SESSION : 測試。 FLAG1 : null。 顯然getAttribute拿不到flag的值,但是Session中flag值能夠拿到

2. response.sendRedirect("/qq/success.jsp?flag2=測試");

PS:sendRedirect可帶參數在JSP前台頁面上接收應是request.getParameter("flag");但是顯示出來的是亂碼。

解決辦法:response.sendRedirect("/qq/success.jsp?flag2="+URLEncoder.encode("哈哈", "UTF-8"));  然后在jsp頁面里接收到flag后在此進行URLEncode轉碼

這里我又遇到一個問題就是在success.jsp頁面接收flag的值時顯示是亂碼,但是瀏覽器url里flag參數是中文的。

於是我便再次對頁面上的flag2參數進行轉碼。。。(蛋疼!) 

String str = new String(flag2.getBytes("ISO-8859-1"),"UTF-8");   前者是指定按照哪種編碼去讀取參數,然后再進行UTF-8編碼轉換(我是一個個試出來的,相當糾結)

3. request.getRequestDispather(“/success.jsp”).forward(req,resp);-也可帶參數,並且不需要URL轉碼,在頁面沒有中文亂碼。

SESSION : 測試 FLAG1 : 哈哈1 FLAG2 : 哈哈2

建議使用編碼過濾器,也就沒有這么多的編碼問題,具體可用jar包提供的過濾器,也可以自己寫個過濾器,也就是在doFilter方法里面分別寫上  請求和響應傳遞數據時用什么編碼

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

 

總結:

1. response中sendRedirect客戶端跳轉也就是request、response對象不共用,最終導致request對象set的值在頁面里拿不到

2. encodeURL()是本應用級別的,encodeRedirectURL()是跨應用的。 都是對URL進行encode。但是在Servlet中調用不會使頁面跳轉,如果連續兩次調用encodeURL服務器會報java.lang.IllegalArgumentException異常。

3. 就以上說的頁面跳轉,如果在Session中設置了值,都可以在頁面上拿到對應屬性的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM