我們在使用servlet或其它框架,從后台跳轉到視圖層的時候。常會遇到這種情況,CSS和JS文件失效了,可是假設通過網址直接訪問JSP是沒問題的。
這就是由於絕對路徑和相對路徑導致的。
絕對路徑。就是我們通過一個完整的地址去訪問,比方http:localhost:8080/program……
相對路徑,比方/program/jsp/a.jsp,這就是想相對路徑。
這里我們來看servlet的兩種跳轉forward和redirect機制,http://blog.csdn.net/gaopeng0071/article/details/9838041
以下引用:http://blog.csdn.net/wym19830218/article/details/5503533/
JSP中用相對路徑引用JS,CSS文件的三種情況
第一種情況 最常見的情況
一個tomcat上都跑多個project, 用project名來區分
由於我的的URL是 :http://localhost/project名 /home/index.jsp
多了一個project名,所以要加 <%=request.getContextPath() %>
如:
寫<%=request.getContextPath() %>太麻煩。能夠在每個jsp文件頂部增加以下內容后,
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/" ; %>
<base href="<%=basePath%>" >
第二, 直接訪問jsp文件
真實項目中, 一個tomcat上要是也跑了多個project, 並用IP來區分
url 是這種: http://localhost/home/index.jsp 注意這里,是直接訪問JSP文件(jsp文件不在web-inf下。能夠直接訪問),不是servlet也不是struts 。
test2.js 與index.jsp 放在同一目錄下。以下用相對路徑來引入JS文件 是OK 的:
index.jsp能夠找到test2.js文件
第三種情況: servlet轉發到jsp(jsp在web-inf下。必須用servlet或action訪問)
在第二情況的基礎上,一個tomcat上要是也跑了多個project, 並用IP來區分。
我們訪問的是servlet 或是struts的action , 再轉發到 index.jsp
url 是: http://localhost/*.do
url 是: http://localhost/index.action
這里不是訪問JSP文件了
以下是OK 的.
