Jsp和Servlet中引用路径问题

学Web开发没多久,这些路径问题就搞得很头大,今天遇到了一个问题,解决了,记录下来,方便之后查看!


MyWeb的目录结构:

Jsp和Servlet中引用路径问题_第1张图片


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了



你可能感兴趣的:(jsp,servlet,路径,引用js)