<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      做了個jsp&servlet路徑狀態的測試,花了偶幾個小時,把結果貼出共享

      [摘要]PS:這里怎么貼html阿,害得我還得格式化文本!路徑狀態測試目的測試jsp之間互相跳轉,servlet跳轉jsp環境下絕對路徑和相對路徑的狀態尋找出一種通用的解決辦法資源打成的WAR包MyWAR組...
      PS:這里怎么貼html阿,害得我還得格式化文本!




      路徑狀態測試

      目的
      測試jsp之間互相跳轉,servlet跳轉jsp環境下絕對路徑和相對路徑的狀態
      尋找出一種通用的解決辦法


      資源

      打成的WAR包
      MyWAR

      組成文件
      JSP
      a.jsp

      b/
      b.jsp
      ccc.jsp


      Servlet

      TestServlet.java mapping: /layer1/layer2/TestServlet


      流程描述
      1. 由a.jsp直接跳轉到b.jsp
       或
       由a.jsp提交到TestServlet,TestServlet根據a的提交選擇相應跳轉方式(forward/sendRedirect)
       然后跳轉到b.jsp
      2. b.jsp包含一系列超鏈,來顯示不同方式的跳轉后超鏈的情況
       /a.jsp
       ../a.jsp
       ../../a.jsp
       ../../../a.jsp

       ccc.jsp
       /b/ccc.jsp
       ../ccc.jsp
       ../b/ccc.jsp
       ../../ccc.jsp
       ../../b/ccc.jsp
       ../../../ccc.jso
       ../../../b/ccc.jsp

       [contextPath]/b/b.jsp



      測試結果


      短語替換

      http://localhost:8080/ =>ip/
      /MyWAR/=>war/
      http://localhost:8080/MyWAR/ =>ip/war/
      /MyWAR =>[contextPath](request.getContextPath())





      跳轉方式直接跳轉<a ..>servlet/forward servlet/sendRedirect
       requestDispatcher.forward response.sendRedirect
      ---------------------+---------------------+----------------------------------+------------------------
      servlet中跳轉的路徑x/b/b.jsp/war/b/b.jsp
      ---------------------+---------------------+----------------------------------+------------------------
      跳轉后瀏覽器的地址欄 ip/war/b/b.jsp ip/war/layer1/layer2/TestServletip/war/b/b.jsp
      ---------------------+---------------------+----------------------------------+------------------------
      b.jsp中的鏈接列表 瀏覽器狀態條出現的鏈接地址
      <a href="這里的描述"
      ---------------------+---------------------+----------------------------------+------------------------
      /a.jsp ip/a.jspip/a.jspip/a.jsp
      ../a.jsp ip/war/a.jspip/war/layer1/a.jsp ip/war/a.jsp
      ../../a.jspip/a.jspip/war/a.jspip/a.jsp
      ../../../a.jsp ip/a.jspip/a.jspip/a.jsp

      ccc.jspip/war/b/ccc.jspip/war/layer1/layer2/ccc.jspip/war/b/ccc.jsp
      /b/ccc.jsp ip/b/ccc.jspip/b/ccc.jspip/b/ccc.jsp
      ../ccc.jsp ip/war/ccc.jspip/war/layer1/ccc.jsp ip/war/ccc.jsp
      ../b/ccc.jsp ip/war/b/ccc.jspip/war/layer1/b/ccc.jsp ip/war/b/ccc.jsp
      ../../ccc.jspip/ccc.jspip/war/ccc.jspip/ccc.jsp
      ../../b/ccc.jspip/b/ccc.jspip/war/b/ccc.jspip/b/ccc.jsp
      ../../../ccc.jsp ip/ccc.jspip/ccc.jspip/ccc.jsp
      ../../../b/ccc.jsp ip/b/ccc.jspip/b/ccc.jspip/b/ccc.jsp


      [contextPath]/b/b.jspip/war/b/b.jspip/war/b/b.jspip/war/b/b.jsp
      ---------------------+---------------------+----------------------------------+------------------------




      總結

      由上面的列表看出,只有最下面一行是有實際意義而且無論以任何方式跳轉鏈接地址都是正確無誤的
      1. 在jsp中的“/”表示的根為“ip”,不包含WAR路徑
      2. 在servlet中以forward方式使用的“/”表示的根為“ip/war/”,包含了WAR路徑
      3. 在servlet中以sendRedirect方式使用的“/”表示的根為ip,不包含WAR路徑
      4. 在servlet中以forward方式跳轉,則瀏覽器的地址欄仍然為此servlet,不會改變
      5. 在servlet中以sendRedirect方式跳轉,則瀏覽器的地址欄改變為目的路徑
      6. 相對路徑的確定是以瀏覽器的地址欄顯示的路徑為基準的,而非具體的目錄結構,所以
       跳轉到同目錄下的某個頁面使用<a href="文件名">link</a>這種方式不是永久成立的
       (做asp的人不要驚訝,這里說的jsp和servlet :))
      7. 為了避免jsp跳jsp,servlet跳jsp,forward方式跳轉,sendRedirect跳轉產生的路徑問題,
       對于jsp和使用sendRedirect跳轉的servlet,采用直接使用帶
       容器路徑[String request.getContextPath()]的絕對路徑就可以徹底解決,即:
      1)<%
      String contextPath = request.getContextPath();
      String url = contextPath + "/user/login.jsp";
       %>
       
       <a href="<%=url%>"> login</a>
       2) ....
      String contextPath = request.getContextPath();
      String targetPath = contextPath + "/user/login.jsp";
      RequestDispatcher rd = request.getRequestDispatcher(targetPath);
      rd.forward(request, response);
      ......

       對于使用forward跳轉的servlet,則不要加容器路徑,否則就重復出現 容器路徑,原因參見 2

      8. 如果使用的“../”過多也不會出現嚴重問題,“../”最多使鏈接到達“ip/”
      9. 另外,在使用
       <jsp:include page = "url" flush="true"/>
       <%@ include file="url" %>
       <%@ page errorPage = "url" %>時,
       這里url使用的“/”表示的根為“ip/war/”,包含了WAR路徑




      日韩精品一区二区三区高清