關於Servlet中重定向


public class Red1Servlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red1... GET湖南");

System.out.println("Red1... GET湖南");

String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Red1Servlet: "+name+","+age);

request.setAttribute("addr", "GET中國北京");
//request.setAttribute("studs", new ArrayList<Map<String, Object>>());//可以把集合數據設置到attribue中

//通過response
//response.sendRedirect(request.getContextPath()+"/servlet/Red2Servlet?name=Tom&age=25");//重定向時的路徑一定要帶項目名稱
response.sendRedirect("http://www.sina.com");



//前面的重定向相當於進行了響應且刷緩存。因此下面不能再重定向了
//response.sendRedirect(request.getContextPath()+"/servlet/TowServlet");
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red1... POST湖南");

System.out.println("Red1... POST湖南");

String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Red1ServletPost: "+name+","+age);

request.setAttribute("addr", "POST中國北京");
//request.setAttribute("studs", new ArrayList<Map<String, Object>>());//可以把集合數據設置到attribue中

//通過response
response.sendRedirect(request.getContextPath()+"/servlet/Red2Servlet");//重定向時的路徑一定要帶項目名稱

}

}

--------------------------------------------------------------------------------------------------------------------------------------------------

public class Red2Servlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red2... GET城院!");

System.out.println("Red2... GET城院!");

String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Red2... Servlet: "+name+","+age);

String addr = (String) request.getAttribute("addr");
System.out.println("addr:"+addr);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Red2... POST城院!");

System.out.println("Red2... POST城院!");

String name = request.getParameter("name");
//GET方式下,中文亂碼只能通過 byte b[] = name.getBytes("iso8859-1"); name= new String(b,"utf-8");
String age = request.getParameter("age");
System.out.println("Red2... Servlet: "+name+","+age);

String addr = (String) request.getAttribute("addr");
System.out.println("addr:"+addr);
}

}

---------------------------------------------------------------------------------------------------------------------------------

<a href="<%=request.getContextPath()%>/servlet/Red1Servlet?name=Jack&age=22">重定向時,兩個servlet的訪問順序, 讀取頁面數據, 傳參</a>
<form action="<%=request.getContextPath()%>/servlet/Red1Servlet" method="post">
姓名:<input type="text" name="name"/>
<input type="submit" value="提交">
</form>

-------------------------------------------------------------------------------------------------------------------------------------------

1、重定向(兩個不同的request和response),兩個servlet的訪問順序,傳參:
1)重定向是通過response實現的: response.sendRedirect() //重定向時的路徑一定要帶項目名稱
2)第1個servlet中的內容會輸出,但瞬間就會被第2個覆蓋。因為瀏覽器接收到第1個的響應時,立刻會自動發起第2次請求,進而接收並顯示第2次請求的響應結果。
3)在第1個servlet重定向代碼之后,不能再調用類似 轉發或重定向 的代碼。否則會500異常,因為轉發之后,不能再回到此處進行跳轉到別的頁面
4)訪問順序: 無論第1個是GET方式還是POST方式,第2個走的是doGet()。----該方式下,地址欄中最終會顯示成第2個的訪問地址

5)讀取頁面參數: 由於是不同的request,請求頁面的參數在第1個servlet當中能夠讀取出來,而第2個servlet中不能讀取出來。
6)兩個servlet之間傳參: “無法”通過 在第1個中request.setAttribute(),在第2個中request.getAttribute(); ----通過attribute的路中走不通的
如果非要傳參,可以通過:在第1個servlet當中給重定向地址添加“?name=Jack&age=25”實現---該方式下地址欄會顯示參數信息,明文傳輸信息,因此敏感數據要加密
7)站外跳轉 只能通過重定向來實現,而且地址必須以“http://”開頭,否則會被識別成站內。


免責聲明!

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



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