[轉]JSP編程,url中加斜槓和不加斜槓的區別



在javaweb編程中,路徑前加斜槓(\)與不加到底什麼時候用什麼時候不用?
對此找了2篇博客,轉載過來做個記錄








文章一:路徑前加於不加(/)反斜槓 。
原帖地址:http://blog.sina.com.cn/s/blog_710bd9f80100sve4.html
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




如題,這是我們今天做關於JavaWeb請求轉發時遇到的問題。 
        1.(無)開頭表示當前目錄下的
         2.(/)開頭的目錄表示該目錄爲根目錄的一個子目錄
         3.(./)開頭的目錄表示該目錄爲當前目錄(當前目錄所在的目錄)的一個子目錄
        4.(../)開頭的目錄表示該目錄爲當前目錄的父目錄
    但是實際使用過程中我們發現了很多問題,首先關於無反斜槓開頭的路徑描述基本準確,是表示當前目錄下和(./)相似。問題主要集中在關於加了反斜槓(/)的路徑上。這裏對於根目錄的理解,我們遇到的情況主要可分爲下面3種:
    1.對於HTML 頁面,如果我們在其中有關於反斜槓應用的路徑,我們可以分爲下面兩種情況:如直接對該頁面打開訪問:則這裏相對的是我們的盤符,如(/res/index.html),實際路徑爲(C://res/index.html);
    如我們在Tomcat中構建打開:則這裏相對的是我們的站點,如(/webTest/html/index.html),實際路徑爲(http://localhost:8080/webTest/html/index.html);
    2.對於我們在請求轉發中調用的getRequestDispatcher()方法:則這裏相對的是我們的項目根目錄,如 request.getRequestDispatcher("/ts.do"),實際路徑爲,如我們項目名稱爲webTest,而“/ts.do”是我們在web.XML中配置的servlet-mapping的url-pattern則我們這裏找的該(/ts.do)其實是(http://localhost:8080/webTest/ts.do)。而如果我們要找的是一個具體資源如html頁面:目錄結構如下:(webTest/WebContent/html/index.html)而我們知道webContent這個目錄是編譯器臨時目錄在實際生成時是沒有的。所以目錄修改如下(webTest/html/index.html)這時我們要用getRequestDispatcher()得到這個html頁面則應是(html/index.html)。    
    這就是今天主要關於目錄加反斜槓的難點,主要是對資源的定位問題。
*************************************************************************************************************************************************************************************












文章二: JSP編程,url中加斜槓和不加斜槓的區別(sendredirect,requestdispatcher,servlet,filter) 
原帖地址:http://blog.csdn.net/tanyit/article/details/7319372
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
url中加斜槓”/”和不加斜槓的區別:
設webapp爲web程序包名
通常來說,不加斜槓的形式(如”example.jsp”)請求的是相對於當前頁面路徑的資源 http://localhost:8080/webapp/examole;
加斜槓的形式(”/example.jsp”)請求的是服務器根目錄下的資源,完整的url是由服務器地址+/example構成的:http://localhost:8080/example。如果頁面不是放在服務器跟目錄而是web程序包下,則不能使用加斜槓的形式。




 這個程序是在WebRoot下面文件member的文件下:  加 / 斜槓  <jsp:include page="/NavServlet?method=navList"></jsp:include>   
這個程序是在webroot下面: 不加 斜槓<jsp:include page="NavServlet?method=navList"></jsp:include>






sendRedirect和getRequestDispatcher方法中的url的不同:




response.sendRedirect(url):url=”example”, 地址相對於當前請求的目錄; url=”/example”,請求的地址爲服務器根目錄下的example,如“http://localhost:8080/example” . 所以,sendRedirect方法中的url通常不在開頭加”/”. sendRedirect的url區分方式和通常情況是一致的。
request.getRequestDispatcher(url)則與sendRedirect不同:url=”example”指向相對於當前請求地址的資源,加”/”開頭指向web程序根目錄下的資源/webapp/example。
servlet-mapping的url:servlet的url通常需要開頭加斜槓。比如一個form的action的url=”a”( 因爲/a就指向服務器根目錄了),與之對應的servlet-mapping的url則爲/a。
servlet-mapping的url的匹配方式:




/ex/* : 以斜槓開頭,後綴通配符,/ex,/ex/a 都可匹配;
*.do : 通配符*後加點號,後綴名do結尾的,表示以 .do結尾的url都能匹配。如人人網的Home.do就是一例,struts中大量使用 .do和.action的後綴。這個後綴可以是開發者任意設定的,因爲它並不指向實際存在的文件,都是用於和servlet或者filter匹配的。
/ex/ :是一種完全匹配,只有url是/ex/時才匹配,/ex ,/ex/a 都不行。
filter-mapping和servlet-mapping是一樣的。.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章