關於Servlet/JSP裡”/”的用法

來源:互聯網
上載者:User

我們都知道,"/"表示根目錄,但在Servlet和JSP裡同樣是"/"卻指向不同的位置。現在假設我的應用程式名為myapp,在myapp目錄下有a.jsp和b.jsp這兩個檔案。要在servlet裡轉向(forward)到a.jsp,只要這樣寫:

RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher.forward(request,response);

這樣是可以正常轉向的,也就是說,servlet裡的"/"是從myapp下開始的。而如果想在a.jsp裡用一個連結用絕對路徑指向b.jsp,下面的寫法是不行的:

<a href="/b.jsp">b</a>

這樣點連結後myapp的首碼就沒有了,說明這個"/"是從伺服器的root開始的。要解決這個問題除使用相對路徑外,可以通過自己加首碼的方式,如下:

<a href="<%=request.getContextPath()%>/b.jsp">b</a>

代碼會變得比較難看了。還有一種情況,就是在jsp頭部使用靜態include的時候,"/"是包含myapp的,例如在a.jsp裡這樣寫是可以找到b.jsp的:

<%@include file="/b.jsp"%>

之所以會有這些不同,相信是由於jsp在轉為servlet後部分或全部脫離了應用程式的context,也就是說,jsp產生的servlet是作為系統的一部分了。(這是我猜測的,不承擔責任哦)

我自己對這些情況經常搞混,而且以上也只是在tomcat裡實驗的,其他伺服器也許會有不同結果,所以寫在這裡方便查看。還有一些情況沒寫下來,例如在servlet裡sendRedirect,以及在<jsp:include>裡使用絕對路徑會是什麼結果,用到的時候會補上。

總之,很希望能找到一種最通用的解決方案,如果你有什麼心得,歡迎發表意見哦。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.