程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP跳轉方式

JSP跳轉方式

編輯:關於JSP

 

一:RequestDispatcher.forward()

 

       是在服務器端起作用,當使用forward()時,Servlet engine 傳遞HTTP請求從當前的Servlet  or jsp  到另外一個Servlet JSP 或普通HTML文件

 

       可以進行參數傳遞 如:

 

 

RequestDispatcher rd = context.getRequestDispatcher("/jsp/forward.jsp?name=zhangsan"); 

RequestDispatcher rd = context.getRequestDispatcher("/F?name=jingjing"); 

 

 

             重定向後浏覽器地址欄URL不變

 

 

<p>     例:在servlet中進行重定向</p><p>          </p><pre class="java" name="code">public void doPost(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        ServletContext context = getServletContext(); 

        //forward()到jsp  

        RequestDispatcher rd = context.getRequestDispatcher("/jsp/forward.jsp?name=zhangsan"); 

        //forward()到令一個servlet F為servlet的url-pattern  servlet也可進行參數傳遞 

        //RequestDispatcher rd = context.getRequestDispatcher("/F?name=jingjing"); 

        request.setAttribute("info", "hello");  //參數傳遞 

        rd.forward(request, response); 

    } 

 

路徑前必須帶有"/" ,"/"的含義時項目名稱  否則報如下異常:

 

 

java.lang.IllegalArgumentException: Path F does not start with a "/" character 

    com.org.MyServlet.doGet(MyServlet.java:31) 

    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

 

 

在forward.jsp中取得參數為:

 

 

String name = request.getParameter("name"); 

 

在servlet中取得參數為: 

 

<pre class="java" name="code">  String name = request.getParameter("name"); 

  String info = (String)request.getAttribute("info"); 

 

二:response.sendRedirect()

 

        是在用戶的浏覽器端工作,sendRedirect() 可以帶參數傳遞,比如servlet?name=zhangsan

 

        重定向後在浏覽器地址欄上會出現重定向頁面的URL

 

       例:重定向jsp

 

           

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        response.sendRedirect("jsp/forward.jsp"); 

 

//可傳參 

 

//response.sendRedirect("jsp/forward.jsp?name=zhangsan"); 

 

            重定向servlet

 

         

 

public void doGet(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        response.sendRedirect("F"); 

        //可傳遞參數 

        //response.sendRedirect("F?name=zhagnsan"); 

    } 

 

 

比較:

 

      a) 兩個都可以實現頁面的跳轉forward是容器中控制權的轉向,在客戶端浏覽器地址欄中不會顯示出轉向後的地址

 

        response.sendRedirect()則是完全的跳轉,浏覽器將會得到跳轉的地址,並重新發送請求鏈接,這樣,從浏覽器的地址欄中可以看到跳轉後的鏈接地址

 

       b) 兩者都可以跳轉到jsp或者servlet  都可以傳遞參數

        但response.sendRedirect()跳轉後後面的代碼將不會再執行

 

       例:

 

  

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        PrintWriter out = response.getWriter(); 

 

        out.println("hello kity");   //不會輸出 

        response.sendRedirect("F?name=zhagnsan"); 

        out.println("good");         //不會輸出 

    } 

         前者更加高效,在前者可以滿足基本需要時,盡量使用RequestDispatcher.forward()方法

三:其他跳轉方式

 

       a)修改HTTP header的Location屬性來重定向

 

       b)通過設置直接修改地址欄來實現頁面的重定向

 

       c)設置jsp若干秒後 自動重定向

 

 

response.setHeader("refresh","3;url=forward2.jsp"); 

 

注:有不完善或錯誤之處還請指出。   

 

摘自 itmyhome的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved