我们在使用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上都跑多个工程, 用工程名来区分 
   因为我的的URL是 :http://localhost/工程名 /home/index.jsp 
   多了一个工程名,所以要加 <%=request.getContextPath() %> 
   如:
写<%=request.getContextPath() %>太麻烦,可以在每一个jsp文件顶部加入以下内容后,
<%   
String path = request.getContextPath();   
String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/" ;   
%>   
<base href="<%=basePath%>" > 第二, 直接访问jsp文件 
真实项目中, 一个tomcat上要是也跑了多个工程, 并用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上要是也跑了多个工程, 并用IP来区分。
我们访问的是servlet 或是struts的action , 再转发到 index.jsp  
url 是: http://localhost/*.do 
 url 是: http://localhost/index.action 
这里不是访问JSP文件了 
下面是OK 的.
Servlet -- 跳转到页面后的绝对路径与相对路径的问题
原文:http://blog.csdn.net/gaopeng0071/article/details/46349107