1.情景展示
現在有一個需求就是:請求達到服務器后,服務器需要將請求的數據傳給另一個頁面,如何實現?
2.目標分析
通過服務器跳轉到頁面上,有兩種實現方式:一種是轉發,一種是重定向。
我們知道轉發可以攜帶數據,而重定向無法攜帶數據,所以,要想攜帶數據跳轉頁面,必須通過轉發實現。
3.解決方案
通過request對象的setAttribute()傳值給頁面;頁面通過getAttribute()取值。
請求地址
http://localhost:8070/demo2/dispatcher.do?userName=%25E7%2594%25A8%25E6%2588%25B7%25E5%2590%258D&password=pwd
// 告訴瀏覽器以utf-8的字符集來解析success.jsp response.setCharacterEncoding("utf-8"); // 用戶名 String userName = request.getParameter("userName"); // tomcat服務器,會自動解碼一次,這里需要再解碼一次(userName總共編碼了兩次) userName = URLDecoder.decode(userName,"utf-8"); // 密碼 String password = request.getParameter("password"); // 轉發頁面時需要攜帶的數據 request.setAttribute("userName", userName); request.setAttribute("password", password); // 跳轉到success.jsp(瀏覽器的地址欄不會發生變化) request.getRequestDispatcher("/success.jsp").forward(request, response);
頁面取值的兩種方式:
1.通過EL表達式獲取;
${屬性名}
2.通過小腳本獲取。
<%=request.getAttribute("屬性名")%>
4.效果展示
說明:
頁面通過request對象取值的方法,只能在jsp中實現,因為:jsp的本質是servlet,而servlet屬於java語言,所以jsp可以直接使用request對象,進而能夠取值。
相應的,如果你轉發的是一個html文件,那么不好意思,你將無法獲取到request對象攜帶的數據。