Javaweb之刷新與重定向
Java_web 中的response的刷新問題
第一種也是以後最常用的刷新,使用上下文轉發的方式;
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String message="<meta http-equiv='refresh' content='3;url=/responseFile/index.jsp'>登陸成功,3秒後自動跳轉,如果失敗請點擊<a href=''>超鏈接</a>";
this.getServletContext().setAttribute("message",message);
this.getServletContext().getRequestDispatcher("/message.jsp").forward(request, response);
}
private void test2(HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8");
response.setHeader("refresh","3;url=/responseFile/index.jsp");
response.getWriter().write("登陸成功,3秒後自動跳轉,如果失敗請點擊<a href=''>超鏈接</a>");
}
private void test1(HttpServletResponse response) {
response.setHeader("refresh","3;url=http://www.sina.com");
}
通過response實現請求重定向。
請求重定向指:一個web資源收到客戶端請求後,通知客戶端去訪問另外一個web資源,這稱之爲請求重定向。
應用場景:用戶登陸。
實現方式
response.sendRedirect()
實現原理:
302狀態碼和location頭即可實現重定向
getOutputStream和getWriter方法分別用於得到輸出二進制數據、輸出文本數據的ServletOuputStream、Printwriter對象。
getOutputStream和getWriter這兩個方法互相排斥,調用了其中的任何一個方法後,就不能再調用另一方法。
Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數據將被Servlet引擎從response裏面獲取,Servlet引擎將這些數據當作響應消息的正文,然後再與響應狀態行和各響應頭組合後輸出到客戶端。
Serlvet的service方法結束後,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經調用過close方法,如果沒有,Servlet引擎將調用close方法關閉該輸出流對象
轉發和重定向的區別
重定向response.sendRedirect("success.jsp");
轉發:request.getRequestDispatcher("success.jsp").forward(request,response);
1、.轉發在服務器端完成的;重定向是在客戶端完成的
2.轉發的速度快;重定向速度慢
3..轉發的是同一次請求;重定向是兩次不同請求
4..轉發不會執行轉發後的代碼;重定向會執行重定向之後的代碼
5.轉發地址欄沒有變化;重定向地址欄有變化
6..轉發必須是在同一臺服務器下完成;重定向可以在不同的服務器下完成
response.getWriter().write("aaaaaaa");
/*response.setStatus(302);
response.setHeader("location","/servletdemo/index.jsp");*/
response.sendRedirect("/servletdemo/index.jsp");