1.從一個jsp頁面跳轉到另一個jsp頁面時的參數傳遞


    (1)使用request對象獲取客户端提交的信息

login.jsp頁面代碼如下:

 
   
     [java]  
     view plain 
      copy 
      
      
   <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>      <body>  "getinfo.jsp">  "text" name="name">  "submit" value="Enter" name="submit">          </form>      </body>  </html>  

getinfo.jsp頁面代碼如下:

[java] view plain copy

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>    
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>      <body>      
<p>獲取文本框提交的信息:          <%  "name");           %>           <br/>           <%=textContent%>                     </p>獲取按鈕的名字:           <%  "submit");            %>           <br/>           <%=buttonName%>                </body>  </html>

 

(2)使用session對象獲取從客户端提交的信息

    session1.jsp頁面代碼如下:

[java] view plain copy

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>      <body>  "session2.jsp" method="post">              請輸入您的姓名:  "text" name="thename">  "submit" value="submit">          </form>      </body>  </html>  

    session2.jsp通過request對象提取session1.jsp表單中的thename值,並將其保存到session對象中,session2.jsp代碼如下:

[java] view plain copy

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>      <body>          <%  "thename");  "thename",name);           %>           您的姓名是:<%=name%>       
<p>  "session3.jsp?pwd=123456" method="post">              您喜歡吃什麼?  "text" name="food"/>              <p>  "submit" value="submit">          </form>              </body>  </html>  

    session3.jsp的主要任務是顯示結果,它從session對象提取thename的值並顯示它,以證明在多個頁面中可以通過session對象存儲和維持信息,session3.jsp代碼如下:

[java] view plain copy


[java] view plain copy

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>      <body>          <%  "food");  "thename");  "pwd");           %>           您的姓名是:<%=name%>           <p>           您喜歡吃:<%=food%>           <p>           您的密碼是:<%=pwd%>      </body>  </html>  







    程序運行結果如圖2所示:


java servlet 跳轉到html servlet跳轉到jsp頁面代碼_html


    (3)利用隱藏域傳遞數據


    使用隱藏空間記錄用户提交日期的hiddenindex.jsp代碼如下:


[java]  view plain  copy



1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6. "hidden.jsp" method="post" name="form1">  
7.             <!-- 隱藏字段,系統時間,並轉換為毫秒數 -->  
8. "hidden" name="time" value="<%=new java.util.Date()%>">  
9.             <p>  
10. "text" name="name">  
11.             </p>  
12. "submit" name="submit" value="submit">  
13.         </form>  
14.     </body>  
15. </html>



     顯示隱藏空間信息的hidden.jsp代碼如下:

[java]  view plain  copy



1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         <%  
7. "name");  
8. "time");  
9.         %>  
10.         <p>您的姓名是:  
11.             <%=name %>  
12.         </p>  
13.         <p>提交時的系統時間為:  
14.             <%=date %>  
15.         </p>  
16.     </body>  
17. </html>



    程序運行結果如下:

 

java servlet 跳轉到html servlet跳轉到jsp頁面代碼_HTML_02


                                        


    使用隱藏域的一個缺點是用户可通過查看網頁源程序讀到隱藏域的值。


    (4)通過超鏈接傳遞數據


    建立鏈接到其他分頁的超級鏈接page.jsp代碼如下:


[java]  view plain  copy


1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <%  
5. int PageCount = 15;  
6. %>  
7. <html>  
8.     <body>  
9.         <table>  
10.             <tr>  
11.                 <td>  
12. 1%>>到第1頁</a>  
13.                 </td>  
14.                 <td>  
15.                     <a href=showpage.jsp?ToPage=<%=PageCount%>>到最後一頁</a>  
16.                 </td>  
17.             </tr>  
18.         </table>        
19.     </body>  
20. </html>


    接收顯示分頁showpage.jsp代碼如下:


[java]  view plain  copy


1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         <%  
7. "ToPage");  
8. "第" + toPage + "頁");  
9.         %>  
10.     </body>  
11. </html>



   

 運行結果如下:

java servlet 跳轉到html servlet跳轉到jsp頁面代碼_html_03


    2.jsp頁面傳遞參數給servlet


    (1)使用request對象接收參數


    新建名為ForwardServlet的Servlet類,代碼如下:


[java]  view plain  copy


1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4.   
5. import javax.servlet.ServletException;  
6. import javax.servlet.http.HttpServlet;  
7. import javax.servlet.http.HttpServletRequest;  
8. import javax.servlet.http.HttpServletResponse;  
9.   
10. /**
11.  * 本類用來獲得表單請求信息,並根據請求信息轉發頁面
12.  */  
13. public class ForwardServlet extends HttpServlet  
14. {  
15. private static final long serialVersionUID = 1L;  
16.   
17. /**
18.      * 構造函數
19.      */  
20. public ForwardServlet()  
21.     {  
22. super();  
23.     }  
24.       
25. /**
26.      * 初始化
27.      */  
28. public void init() throws ServletException  
29.     {}  
30.       
31. /**
32.      * doGet()方法
33.      */  
34. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
35.     {  
36.         doPost(request, response);  
37.     }  
38.       
39. /**
40.      * doPost()方法
41.      */  
42. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
43.     {  
44. "name");  
45. "pwd");  
46. if((name!=null && !name.equals("")) && (pwd!=null && !pwd.equals("")))  
47.         {  
48. if(name.equals("mr")&&pwd.equals("123"))  
49.             {  
50. "success.jsp").forward(request, response);  
51.             }  
52. else  
53.             {  
54. "error.jsp").forward(request, response);  
55.             }  
56.         }  
57.     }  
58.       
59. /**
60.      * 銷燬
61.      */  
62. public void destroy()  
63.     {  
64. super.destroy();  
65.     }  
66. }


    在web.xml中配置ForwardServlet類,代碼如下:


[java]  view plain  copy

1. <?xml version="1.0" encoding="GB2312"?>  
2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
3. "http://www.w3.org/2001/XMLSchema-instance"  
4. //java.sun.com/xml/ns/javaee   
5. //java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
6.       
7.     <!-- 配置servlet -->  
8.     <servlet>  
9.         <servlet-name>ForwardServlet</servlet-name>  
10. class>com.shi.servlet.ForwardServlet</servlet-class>  
11.     </servlet>  
12.     <servlet-mapping>  
13.         <servlet-name>ForwardServlet</servlet-name>  
14.         <url-pattern>/forward</url-pattern>  
15.     </servlet-mapping>  
16.       
17.     <welcome-file-list>  
18.         <welcome-file>index.jsp</welcome-file>  
19.     </welcome-file-list>  
20. </web-app>


[java]  view plain  copy


1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6. "forward" method="post">  
7. "center">  
8.                 <tr>  
9.                     <td>用户名:</td>  
10.                     <td>  
11. "text" name="name"/>  
12.                     </td>  
13.                 </tr>  
14.                 <tr>  
15.                     <td>密碼:</td>  
16.                     <td>  
17. "password" name="pwd"/>  
18.                     </td>  
19.                 </tr>  
20.                 <tr>  
21. "2">  
22. "submit" value="登錄"/>  
23.                     </td>  
24.                 </tr>  
25.             </table>  
26.         </form>  
27.     </body>  
28. </html>


    登錄成功頁面success.jsp,代碼如下:


[java]  view plain  copy




1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6. "name") %>,登錄成功!  
7.     </body>  
8. </html>




java servlet 跳轉到html servlet跳轉到jsp頁面代碼_java_04

    (2)使用session對象,url,form表單傳遞參數

    在jsp2servlet.jsp中,分別使用request對象,session對象,url,form表單設置需要傳遞的參數,代碼如下:


[java]  view plain  copy

1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         <%  
7. "testSession","Hello session");  
8. "testRequest","Hello request");  
9.         %>  
10. "http://localhost:8080/086/jsp2servlet?hrefAction=toServlet">單擊此處</a>  
11. "jsp2servlet?action=toServlet" method="post" name="form1">  
12. "text" name="username"/>  
13. "submit" value="submit"/>  
14.         </form>  
15.     </body>  
16. </html>


[java]  view plain  copy

1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4. import java.io.PrintWriter;  
5.   
6. import javax.servlet.ServletException;  
7. import javax.servlet.http.HttpServlet;  
8. import javax.servlet.http.HttpServletRequest;  
9. import javax.servlet.http.HttpServletResponse;  
10.   
11. public class Jsp2Servlet extends HttpServlet  
12. {  
13. /**
14.      * 自動生成
15.      */  
16. private static final long serialVersionUID = 1L;  
17.   
18. /**
19.      * 構造函數
20.      */  
21. public Jsp2Servlet()  
22.     {  
23. super();  
24.     }  
25.       
26. /**
27.      * 初始化
28.      */  
29. public void init()  
30.     {}  
31.       
32. /**
33.      * doGet()
34.      */  
35. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
36.     {  
37.         doPost(request, response);  
38.     }  
39.       
40. /**
41.      * doPost()
42.      */  
43. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
44.     {  
45. "testSession");         
46. "testRequest");          
47. "hrefAction");          
48. "action");          
49. "username");  
50.           
51.         PrintWriter out = response.getWriter();  
52. "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");  
53. "<html>");  
54. "<body>");  
55. "保存到session中的內容: " + strSession + "<br>");  
56. "保存到request中的內容:" + strRequest + "<br>");  
57. "超鏈接中傳遞的參數值為:" + strHref + "<br>");  
58. "form表單中傳遞的action值為:" + strForm + "<br>");  
59. "form表單內input標籤中username的值: " + username + "<br>");  
60. "</body>");  
61. "</html>");         
62.     }  
63.       
64. /**
65.      * 銷燬
66.      */  
67. public void destroy()  
68.     {  
69. super.destroy();  
70.     }  
71. }



java servlet 跳轉到html servlet跳轉到jsp頁面代碼_java_05


    servlet無法獲取request.setAttribute()中的內容,因為在jsp2servlet.jsp中提交時,生成的一個新的request,因此無法取到jsp頁面中request.setAttribute()中設置的值。




    3.從servlet到jsp頁面中傳遞參數


    從servlet到jsp頁面傳遞參數,可以使用URL,request對象,session對象,新建Servlet2Jsp.java,代碼如下:


[java]  view plain  copy

1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4.   
5. import javax.servlet.ServletException;  
6. import javax.servlet.http.HttpServlet;  
7. import javax.servlet.http.HttpServletRequest;  
8. import javax.servlet.http.HttpServletResponse;  
9.   
10. public class Servlet2Jsp extends HttpServlet  
11. {  
12. /**
13.      * 自動生成
14.      */  
15. private static final long serialVersionUID = 1L;  
16.   
17. /**
18.      * 構造函數
19.      */  
20. public Servlet2Jsp()  
21.     {  
22. super();  
23.     }  
24.       
25. /**
26.      * 初始化
27.      */  
28. public void init()  
29.     {}  
30.       
31. /**
32.      * doGet()
33.      */  
34. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
35.     {  
36.         doPost(request, response);  
37.     }  
38.       
39. /**
40.      * doPost()
41.      */  
42. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
43.     {  
44. "result.jsp?first=傳遞第一個參數&second=傳遞第二個參數";  
45. "request傳值";  
46. "session傳值";  
47. "strRequest", strRequest);  
48. "strSession", strSession);  
49.           
50. /**
51.          * 客户端跳轉:效率低
52.          * session範圍屬性,url中的參數會傳遞下去,request範圍屬性不傳遞
53.          */  
54. //response.sendRedirect(url);  
55.           
56. /**
57.          * 服務器端跳轉:常用,效率高
58.          * request範圍屬性,session範圍屬性,url中的參數會傳遞
59.          */  
60.         request.getRequestDispatcher(url).forward(request, response);  
61.     }  
62.       
63. /**
64.      * 銷燬
65.      */  
66. public void destroy()  
67.     {  
68. super.destroy();  
69.     }  
70. }



    在web.xml中配置該servlet後,新建參數接收頁result.jsp,代碼如下:


[java]  view plain  copy


1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         <%  
7. "first");  
8. "strRequest");  
9. "strSession");  
10.           
11.         %>  
12.         <p>  
13.             URL中取得的屬性值為:<%=strURL%>  
14.         </p>        
15.         <p>  
16.             request中取得的屬性值為:<%=strRequest%>  
17.         </p>  
18.         <p>  
19.             session中取得的屬性值為:<%=strSession%>  
20.         </p>  
21.     </body>  
22. </html>

    程序的運行結果如圖7所示:


java servlet 跳轉到html servlet跳轉到jsp頁面代碼_html_06


    4.從一個servlet到另一個servlet時的參數傳遞


    (1)通過超鏈接和表單傳遞數據


    通過超鏈接後面給定要傳遞參數的值,但長度有限制,通過超鏈接和表單傳遞數據,使用request.getParamter()方法,代碼如下:


[java]  view plain  copy

1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4. import java.io.PrintWriter;  
5.   
6. import javax.servlet.ServletException;  
7. import javax.servlet.http.HttpServlet;  
8. import javax.servlet.http.HttpServletRequest;  
9. import javax.servlet.http.HttpServletResponse;  
10.   
11. public class ServletA extends HttpServlet  
12. {  
13. /**
14.      * 自動生成
15.      */  
16. private static final long serialVersionUID = 1L;  
17.   
18. /**
19.      * 構造函數
20.      */  
21. public ServletA()  
22.     {  
23. super();  
24.     }  
25.       
26. /**
27.      * 初始化
28.      */  
29. public void init()  
30.     {}  
31.       
32. /**
33.      * doGet()
34.      */  
35. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
36.     {  
37.         doPost(request, response);  
38.     }  
39.       
40. /**
41.      * doPost()
42.      */  
43. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
44.     {  
45. "text/html");  
46.         PrintWriter out = response.getWriter();  
47. "hello, servlet";  
48. "<html>");  
49. "<body>");  
50. /**
51.          * 超鏈接
52.          */  
53. "<a href='ServletB?name="+name+"'>this is a test</a>");  
54. /**
55.          * 表單
56.          */  
57. "<form action='ServletB' method='post'>");          
58. "用户名:");  
59. "<input type='text' name='username'>");  
60. "<input type='submit' vlue='提交'>");  
61. "</form>");  
62. "</body>");  
63. "</html>");  
64.         out.flush();  
65.   
66.     }  
67.       
68. /**
69.      * 銷燬
70.      */  
71. public void destroy()  
72.     {  
73. super.destroy();  
74.     }  
75. }


[java]  view plain  copy

1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4. import java.io.PrintWriter;  
5.   
6. import javax.servlet.ServletException;  
7. import javax.servlet.http.HttpServlet;  
8. import javax.servlet.http.HttpServletRequest;  
9. import javax.servlet.http.HttpServletResponse;  
10.   
11. public class ServletB extends HttpServlet  
12. {  
13. /**
14.      * 自動生成
15.      */  
16. private static final long serialVersionUID = 1L;  
17.   
18. /**
19.      * 構造函數
20.      */  
21. public ServletB()  
22.     {  
23. super();  
24.     }  
25.       
26. /**
27.      * 初始化
28.      */  
29. public void init()  
30.     {}  
31.       
32. /**
33.      * doGet()
34.      */  
35. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
36.     {  
37.         doPost(request, response);  
38.     }  
39.       
40. /**
41.      * doPost()
42.      */  
43. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
44.     {  
45. "name");  
46. "username");  
47.   
48.           
49. "text/html;charset=gb2312");  
50.         PrintWriter out = response.getWriter();  
51. "<html>");  
52. "<body>");  
53. "超鏈接傳遞的參數值為:" + name);  
54. "form表單中提交的用户名為:" + username);  
55. "</body>");  
56. "</html>");  
57.         out.flush();  
58.     }  
59.       
60. /**
61.      * 銷燬
62.      */  
63. public void destroy()  
64.     {  
65. super.destroy();  
66.     }  
67. }

    程序運行結果如圖8所示:



java servlet 跳轉到html servlet跳轉到jsp頁面代碼_HTML_07

    (2)使用setAttribute()和getAttribute()方法傳遞參數

    設置參數的ServletA代碼如下:


[java]  view plain  copy

1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4. import java.io.PrintWriter;  
5.   
6. import javax.servlet.ServletException;  
7. import javax.servlet.http.HttpServlet;  
8. import javax.servlet.http.HttpServletRequest;  
9. import javax.servlet.http.HttpServletResponse;  
10.   
11. public class ServletA extends HttpServlet  
12. {  
13. /**
14.      * 自動生成
15.      */  
16. private static final long serialVersionUID = 1L;  
17.   
18. /**
19.      * 構造函數
20.      */  
21. public ServletA()  
22.     {  
23. super();  
24.     }  
25.       
26. /**
27.      * 初始化
28.      */  
29. public void init()  
30.     {}  
31.       
32. /**
33.      * doGet()
34.      */  
35. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
36.     {  
37.         doPost(request, response);  
38.     }  
39.       
40. /**
41.      * doPost()
42.      */  
43. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
44.     {  
45. /**
46.          * setAttribute()和getAttribute()
47.          */  
48. "This is a test, we need more test for this";  
49. "strAtt", data);  
50. "/ServletB").forward(request, response);  
51.     }  
52.       
53. /**
54.      * 銷燬
55.      */  
56. public void destroy()  
57.     {  
58. super.destroy();  
59.     }  
60. }

[java]  view plain  copy

1. package com.shi.servlet;  
2.   
3. import java.io.IOException;  
4. import java.io.PrintWriter;  
5.   
6. import javax.servlet.ServletException;  
7. import javax.servlet.http.HttpServlet;  
8. import javax.servlet.http.HttpServletRequest;  
9. import javax.servlet.http.HttpServletResponse;  
10.   
11. public class ServletB extends HttpServlet  
12. {  
13. /**
14.      * 自動生成
15.      */  
16. private static final long serialVersionUID = 1L;  
17.   
18. /**
19.      * 構造函數
20.      */  
21. public ServletB()  
22.     {  
23. super();  
24.     }  
25.       
26. /**
27.      * 初始化
28.      */  
29. public void init()  
30.     {}  
31.       
32. /**
33.      * doGet()
34.      */  
35. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
36.     {  
37.         doPost(request, response);  
38.     }  
39.       
40. /**
41.      * doPost()
42.      */  
43. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
44.     {  
45. "strAtt");  
46.           
47. "text/html;charset=gb2312");  
48.         PrintWriter out = response.getWriter();  
49. "<html>");  
50. "<body>");  
51. "getAttribute()得到的數據值為:" + strAtt);       
52. "</body>");  
53. "</html>");  
54.         out.flush();  
55.     }  
56.       
57. /**
58.      * 銷燬
59.      */  
60. public void destroy()  
61.     {  
62. super.destroy();  
63.     }  
64. }



java servlet 跳轉到html servlet跳轉到jsp頁面代碼_html_08

  

    5.JSP頁面跳轉方法


(1)RequestDispatcher.forward()


    在服務器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet or JSP到另外一個Servlet,JSP或普通HTML文件,即你的form提交至a.jsp,在a.jsp用到了forward()重定向到b.jsp,此時form提交的所有信息在b.jsp都可以獲得,參數自動傳遞。但forward()無法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同時forward()無法再後面帶參數傳遞,比如servlet?name=tom,這樣不行,可以程序內通過response.setAttribute("name",name)來傳至下一個頁面。


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


    通常在Servlet中使用,不在jsp中使用。




 (2)response.sendRedirect()


    在用户的瀏覽器端工作,sengRedirect()可以帶參數傳遞,比如servlet?name=tom傳至下個頁面,同時它可以重定向至不同的主機上,sendRedirect()可以重定向至有frame的jsp文件。


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


上述兩種方式代碼見圖7。


    由於response是jsp頁面中的隱含對象,故在jsp頁面中可以用response.sendRedirect()直接實現重定位。


    注意:


    ①.使用response.sendRedirect()時,前面不能有HTML輸出


    這並不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了瀏覽器。事實上現在的Server都有cache機制,一般在8K(JSP SERVER),這意味着,除非你關閉了cache,或者你用out.flush()強制刷新,那麼在使用sendRedirect之前,有少量的HTML輸出也是允許的。


    ②.response.sendRedirect()之後,應該緊跟一句return


    我們已經知道response.sendRedirect()是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,才會有實際的動作。既然你已經要做轉向了,那麼後面的輸出還有什麼意義呢?而且有可能會因為後面的輸出導致轉向失敗。


    比較:


①.Dispatcher.forward()是容器中控制權的轉向,在客户端瀏覽器地址欄中不會出現轉向後的地址


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


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


    注:在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用HttpServletResponse.sendRedirect()方法。




(3)<jsp:forward page=""/>


    它的底層部分是由RequestDispatcher來實現的,因此它帶有RequestDispatcher.forward()方法的印記。


    如果在之前有很多輸出,前面的輸出已使緩衝區滿,將自動輸出至客户端,那麼該語句將不起作用,這一點應該特別注意。


    另外要注意:它不能改變瀏覽器地址,刷新的話會導致重複提交。


    測試代碼如下:


[java]  view plain  copy

1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <head>  
6. "stylesheet" type="text/css" href="css/style.css">  
7.     </head>  
8.     <body>  
9. "UpdateServlet">  
10. "list" name="action" />  
11.         </jsp:forward>  
12.     </body>  
13. </html>

    程序運行結果如圖10所示:

java servlet 跳轉到html servlet跳轉到jsp頁面代碼_html_09


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


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


    索引頁1.jsp代碼如下:


[java]  view plain  copy

1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         <%  
7.         response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);  
8. "2.jsp";  
9. "Location",newLocn);  
10.         %>  
11.     </body>  
12. </html>


[java]  view plain  copy

1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6. 1.jsp跳轉至此頁  
7.     </body>  
8. </html>



java servlet 跳轉到html servlet跳轉到jsp頁面代碼_java_10

   

    (5)JSP中實現在某頁面停留若干秒後,自動重定向到另一頁面


    在jsp文件中,下面的代碼:


[java]  view plain  copy

1. <meta http-equiv="refresh" content="5; url=target.jsp"

    含義是:在5秒後正在瀏覽的頁面將會自動變為target.jsp頁。代碼中5為刷新的延遲時間,以秒為單位。target.jsp為你想轉向的目標頁,若為本頁則自動刷新本頁。


    由上可知,可以通過setHeader來實現某頁面停留若干秒後,自動重定向到另一頁面。


    索引頁5_1.jsp代碼如下:


[java]  view plain  copy

1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         <%  
7. "5; url=5_2.jsp";  
8. "REFRESH",content);        
9.         %>  
10. 5秒後轉向5_2.jsp頁面。  
11.     </body>  
12. </html>


    轉向頁5_2.jsp代碼如下:


[java]  view plain  copy

1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
2.   
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
4. <html>  
5.     <body>  
6.         從5_1.jsp轉到的頁面  
7.     </body>  
8. </html>



java servlet 跳轉到html servlet跳轉到jsp頁面代碼_java_11





    參考資料:


    [1].五種JSP頁面跳轉方法  http://developer.51cto.com/art/200902/109939.htm