java web中servlet、jsp、html 互相訪問的路徑問題
在html">java web種經常出現 404找不到網頁的錯誤,究其原因,一般是訪問的路徑不對。
html">java web中的路徑使用按我的分法可以分兩種情況,當然啦兩者使用相對路徑是一致,本文只說絕對路徑。
情況一、指向外部的web元件和本身關係不大的,這一類的有:html中使用路徑的標籤,比如標籤中的href;servlet和jsp中的重定向sendRedirect(path);
情況二、指向內部的web元件和本身有關係的,這一類我暫時看到的有:servlet或者jsp的轉發
假設在myapp專案下有個login.html,index.jsp,還寫了兩個servletA和servletB.
在web.xml中的地址配置:
/servlet/servletA
/servlet/servletB
在情況一中:若在路徑中以/開頭,則這一/相當於:8080/
1、login.html有個form表單有提交給servletA,那麼action要填的路徑:
絕對路徑方式:action="/myapp/servlet/servletA" ------:8080/myapp/servlet/servletA
相對路徑方式:action="servlet/servletA" ------:8080/myapp/servlet/servletA
2、login.html有個連結到index.jsp 那麼
絕對路徑方式:href="/myapp/index.jsp" ------:8080/myapp/index.jsp
相對路徑方式:action="index.jsp" ------:8080/myapp/index.jsp
3、index.jsp中重定向到servletA
絕對路徑方式:sendRedirect("/myapp/servlet/servletA"); ------:8080/myapp/servlet/servletA
相對路徑方式:sendRedirect("servlet/servletA"); ---:8080/myapp/servlet/servletA
在情況二中:若在路徑中以/開頭,則這一/相當於:8080/myapp/
1.servletA轉發到servletB
絕對路徑方式:request.getRequestDispatcher("/servlet/servletB").forward(request, response);
--------:8080/myapp/servlet/servletB
相對路徑方式:request.getRequestDispatcher("servlet/servletB").forward(request, response);
--------:8080/myapp/servlet/servletB
注意:建議使用絕對路徑,相對路徑是相對於當前瀏覽器位址列的路徑(源地址)。
可能會出現:你在某個頁面寫了一個相對路徑(目標路徑),因為轉發是不改變地址的,那麼要是別人是通過轉發到達你的這個頁面的,那麼位址列的源地址就是不確定的,既然不確定你使用相對路徑相對於這個不確定的路徑就極有可能出錯,所以建議使用絕對路徑,這樣可避免這種問題。
獲得專案路徑和絕對路徑:
專案路徑:String path=request.getContextPath(); ---- /myapp
String p=this.getServletContext().getRealPath("http://www.2cto.com/"); ----- G:\environment\tomcat\webapps\myapp\
總結:
這裡主要弄明白是指向外部的還內部的,外部時"http://www.2cto.com/"就是代表主機路徑,內部時"http://www.2cto.com/"就是代表當前專案路徑