我们在使用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 的.