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://”開頭,否則會被識別成站內。