posts - 37, comments - 8, trackbacks - 0, articles - 0

          request之請求轉發

          Posted on 2008-10-19 14:36 夢與橋 閱讀(7164) 評論(2)  編輯  收藏 所屬分類: jsp程序設計
          屬于同一個Web應用程序的JSP或Servlet可以使用javax.servlet.RequestDispatcher接口的forward方法和include方法來共享數據。
              §RequestDispatcher rd=request.getRequestDispatcher(String path):取得一個相對于當前路徑的請求轉發器,以便于請求轉發。
               §void forward(ServletRequest request, ServletResponse response):用于將一個請求從一個JSP或servlet轉發到同一服務器上的另一個JSP或servlet。
              §void include ():用于包括另一個Servlet的內容。

          1、利用forward()方法作轉發控制
          (包括請求頁面a0.jsp、接受請求的頁面a1.jsp和轉發到頁面a2.sjp)
          a0.jsp的code如下:
          <%@ page contentType="text/html; charset=GBK" %>
          <html>
          <head>
          <title>
          請求參數輸入頁面
          </title>
          </head>
          <body bgcolor="#ffffff">
          <h1>
          請求參數輸入頁面
          </h1>
          <form action="a0.jsp" method="POST">
            
          <table border="1">
              
          <tr>
                
          <td>用戶名:</td>
                
          <td><input  type="text" name="name"/></td>
              
          </tr>
              
          <tr>
                
          <td>性別:</td>
                
          <td>
                  
          <input  type="radio" name="sex" value="男"/>
                  
          <input  type="radio" name="sex" value="女"/>
                
          </td>
              
          </tr>
              
          <tr>
                
          <td>興趣愛好:</td>
                
          <td>
                  
          <input  type="checkbox" name="interest" value="上網"/>上網
                  
          <input  type="checkbox" name="interest" value="旅游"/>旅游
                  
          <input  type="checkbox" name="interest" value="閱讀"/>閱讀
                
          </td>
              
          </tr>
            
          </table>
            
          <input  type="submit" name="submit" value="提交"/>
          </form>
          </body>
          </html>
          a1.jsp的code如下:
          <%@ page contentType="text/html; charset=GBK"%>
          <html>
          <head>
          <title>接收請求參數</title>
          </head>
          <body bgcolor="#ffffff">
          <h1>接收客戶端請求數據</h1>
          <%
              request.setCharacterEncoding(
          "GBK");
              
          String name = request.getParameter("name");
              
          String sex = request.getParameter("sex");
              
          String[] interest = request.getParameterValues("interest");
          %>
          <table border="1">
              
          <tr>
                  
          <td>用戶名:</td>
                  
          <td><%=name%></td>
              
          </tr>
              
          <tr>
                  
          <td>性別:</td>
                  
          <td><%=sex%></td>
              
          </tr>
              
          <tr>
                  
          <td>興趣愛好:</td>
                  
          <td>
                  
          <%
                          
          for (int i = 0; i < interest.length; i++) {
                          out.print(interest[i]);
                          out.print(
          ",");
                      }
                  
          %>
                  
          </td>
              
          </tr>
          </table>
          <%
              RequestDispatcher rd
          =request.getRequestDispatcher("ra3.jsp");
              rd.forward(request,response);
          %>
          </body>
          </html>
          a2.jsp的code如下:
          <%@ page contentType="text/html; charset=GBK" %>
          <html>
          <head>
          <title>
          dispatcher轉發結果顯示頁面
          </title>
          </head>
          <body bgcolor="#ffffff">
          <h1>
          dispatcher轉發結果顯示頁面
          </h1>
          name參數的值是:
          <%=request.getParameter("name")%>
          </body>
          </html>

          2、利用include()方法實現轉發控制 (包括請求頁面a0.jsp、接受請求的頁面a1.jsp和轉發到頁面a2.sjp)
          a0.jsp與a2.jsp同forward()方法轉發,a1.jsp的code如下:
          <%@ page contentType="text/html; charset=GBK"%>
          <html>
          <head>
          <title>接收請求參數</title>
          </head>
          <body bgcolor="#ffffff">
          <h1>接收客戶端請求數據</h1>
          <%
              request.setCharacterEncoding(
          "GBK");
              
          String name = request.getParameter("name");
              
          String sex = request.getParameter("sex");
              
          String[] interest = request.getParameterValues("interest");
          %>
          <table border="1">
              
          <tr>
                  
          <td>用戶名:</td>
                  
          <td><%=name%></td>
              
          </tr>
              
          <tr>
                  
          <td>性別:</td>
                  
          <td><%=sex%></td>
              
          </tr>
              
          <tr>
                  
          <td>興趣愛好:</td>
                  
          <td>
                  
          <%
                          
          for (int i = 0; i < interest.length; i++) {
                          out.print(interest[i]);
                          out.print(
          ",");
                      }
                  
          %>
                  
          </td>
              
          </tr>
          </table>
          <%
              out.flush();
          //不影響
              RequestDispatcher rd 
          = request.getRequestDispatcher("ra3.jsp");
              rd.include(request, response);
                 out.println("我又回來了~~");
          %>
          </body>
          </html>
          注意:調用forward()方法后,原先存放在HttpResponse對象中的內容將會被自動清除,再回應被發送到客戶端之前才能調用forward()方法。如在out.flush()與out.close()之后使用,當無效。forward()方法與include方法非常類似,前者只顯示被轉發到的顯面,后者將兩個頁面的內容合并在一起顯示,并回到轉發前的頁面。
           

          3、requestDispatcher.forward()和response.sendRedirect()兩者的區別是什么,平時如何在程序開發中如

          何使用?
          答:requestDispatcher.forward()是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后

          的地址;而response.sendRedirect()則是完全的跳轉,瀏覽器會得到跳轉的地址,并重新發送請求鏈接

          。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。前者更加高效,在前者可以滿足需要時,晝使

          用它。

          Feedback

          # re: request之請求轉發  回復  更多評論   

          2013-07-08 12:59 by 46456
          456465

          # re: request之請求轉發  回復  更多評論   

          2013-07-08 13:00 by 46456
          …………
          我以為這是代碼測試的

          2了
          主站蜘蛛池模板: 汉川市| 永泰县| 准格尔旗| 靖江市| 涟源市| 德兴市| 阿克陶县| 安多县| 新竹市| 肥东县| 平果县| 共和县| 和政县| 岱山县| 浦城县| 五莲县| 泰宁县| 乌兰浩特市| 青州市| 平阳县| 泰安市| 三河市| 霸州市| 巧家县| 雅江县| 滨州市| 抚宁县| 林芝县| 分宜县| 称多县| 建宁县| 噶尔县| 桐庐县| 天峨县| 博湖县| 健康| 响水县| 镇远县| 泽州县| 丰县| 商洛市|