1. 程式人生 > >JSP、Servlet中的相對路徑和絕對路徑 頁面跳轉問題

JSP、Servlet中的相對路徑和絕對路徑 頁面跳轉問題

Forward 高,  Redirect 低, 因為Redirect 的流程是這樣的,  request1  sent to server,  server return back to client, 然後

request2 then sent to server. 但是Forward 僅在server side處理, 對client side 是透明的. 由於Redirect 有兩次傳輸, 所以效率低.

範圍:
由於對request.setAttribute() 來說, 它攜帶的物件生存範圍只在request內, 所以Redirect 方式會導致request攜帶的物件丟失.

使用說明:

1. sendRedirect

     servlet和jsp裡面一樣

     response.sendRedirect(); 

2. include  這種也是上面提到的forward形式,request的值會儲存

    1)  servlet裡面

    request.getRequestDispatcher( "jsp2.jsp" ).include(request,   response);  

    2)  jsp裡面

    <jsp:include page= "include.jsp" />

說明
頁面會同時包含頁面1和頁面2的內容,位址列不變。
使用request.setAttribute的內容,可以正常使用

3. forword

    1)  servlet裡面

    request.getRequestDispatcher( "jsp2.jsp" ).forward(request,   response); 
    2)  jsp裡面

    <jsp:forward page= "include.jsp" />

說明
頁面會是頁面2的內容,位址列不變
使用request.setAttribute的內容,可以正常使用

3.JSP中用相對路徑引用JS,CSS檔案的三種情況

  第一種情況 最常見的情況
   一個tomcat上都跑多個工程, 用工程名來區分
   因為我的的URL是 :http://localhost/工程名

/home/index.jsp
   多了一個工程名,所以要加 <%=request.getContextPath() %>
   如:<script src="<%=request.getContextPath() %> /home/test.js"></script>

  寫<%=request.getContextPath() %>太麻煩,可以在每一個jsp檔案頂部加入以下內容後,

   Java程式碼 
  1. <%   
  2. String path = request.getContextPath();   
  3. String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/" ;   
  4. %>   
  5. <base href="<%=basePath%>"

     就可直接使用 <script src=" /home/test.js"></script>了

   第二, 直接訪問jsp檔案

   真實專案中, 一個tomcat上要是也跑了多個工程, 並用IP來區分
   url 是這樣的: http://localhost/home/index.jsp     注意這裡,是直接訪問JSP檔案(jsp檔案不在web-inf下,可以直接訪問),不是servlet也不是struts
   test2.js 與index.jsp 放在同一資料夾下,下面用相對路徑來引入JS檔案 是OK 的:
  <script src=test2.js></script>

   index.jsp可以找到test2.js檔案

   第三種情況: servlet轉發到jsp(jsp在web-inf下,必須用servlet或action訪問)

   在第二情況的基礎上,一個tomcat上要是也跑了多個工程, 並用IP來區分。

   我們訪問的是servlet 或是struts的action , 再轉發到 index.jsp
    url 是: http://localhost/***.do

    這裡不是訪問JSP檔案了

    下面是OK 的.
     <script src=/home/ test2.js></script>

    test2.js 前面一定要有/home/

    實際專案中, 訪問 servlet或是struts的action最多, 所以這裡要使用<script src=/home/test2.js></script>。