学Web开发没多久,这些路径问题就搞得很头大,今天遇到了一个问题,解决了,记录下来,方便之后查看!
MyWeb的目录结构:
1.首先在Servlet中,我想要转发到 test.jsp , 这里就需要一个路径的问题了
这时候只要把 当前目录当成是 WebContent这个目录
request.getRequestDispatcher("/jsp/test.jsp").forward(request, response);
这样就可以完成jsp的转发了
Servlet转发到jsp是简单,但是真正棘手的问题是JSP里面引用 JS,CSS,Images等的问题了
这个弄得我晕头转向的
比如:现在我们要在jsp中引用 js目录下的jquery.js文件
在讲问题之前分析几种错误的方法:
错误1:
有的网友可能使用相对路径(因为转发后是test.jsp, 所以想当然):以为会是” ../js/jquery.js “
用:<script src="../js/jquery.js" type=text/javascript></script>
错误2:
居然相对路径不行,那么能不能用绝对路径呢,像Servlet转发的时候那样子呢
用:<script src="/js/jquery.js" type=text/javascript></script>
这几种方法都是错误的!!!!
原因来跟大家掰和一下:
test.jsp是保存在Server中的/jsp/test.jsp目录中
但从Servlet转发过来浏览器是不知道/jsp/目录的存在(转发的时候,浏览器上的地址栏路径是不是没有改变)
所以服务器端/jsp/目录并不会对相对路径产生影响
所以你如果要使用相对路径来的话,那么我们必须找到该web工程的当前在服务器中的根目录(WebContent)
那么如何表示WebContent目录呢?
Scheme://ServerName:ServerPort/ContextPath/
(如: http://localhost:8080/Context Path/)
这个就是我们想要的WebContent根目录的表达形式,那么怎么在JSP中得到这个路径呢
下面这串脚本表达式可以帮助我们完成,大家自己看哈!
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
然后我们就可以把该JSP的base设置成这个basePath了
在<head></head>标签中加入
<base href="<%=basePath%>">
就行了
这时候我们就可以通过
<script src="js/jquery.js" type=text/javascript></script>
这种方式在JSP中引用JS了