首页 > 代码库 > java、JSP web项目中的路径问题

java、JSP web项目中的路径问题

java web项目中的路径,有相对路径和绝对路径

什么是相对路径呢    举个简单例子

我们有项目   test     发布后地址  http://localhost:8080/test/

页面  qiantai/login.jsp        页面中链接  <a href=http://www.mamicode.com/"index.jsp" />

JSP页面相相对寻址     链接的最终地址是    http://localhost:8080/Test/qiantai/index.jsp 

相对路径是这么一个过程    首先取当前文件的路径  也就是 http://localhost:8080/test/qiantai/

                                                然后拼接链接的地址   index.jsp   所以结果就如上   ......qiantai/index.jsp


在CSS、JS的引用中为防止后台转发造成的问题,应尽量使用绝度路径


第一种方案

JSP页面中自带两个路径参数 path和basePath

页面的开头,有这么一段代码

<%
String path = request.getContextPath();   获得当前路径 例如   http://localhost:8080/test/qiantai/

 //获得本项目的地址  例如  http://localhost:8080/test/  赋值给 basePath

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

//将项目路径 basePath 放入pageContext中,待以后用EL表达式读出

pageContext.setAttribute("basePath",basePath); 

%>

链接改用 <a href=http://www.mamicode.com/"${pageScope.basePath}qiantai/index.jsp">

从而构成一个绝对路径  http://localhost:8080/test/qiantai/index.jsp

 但是这样做有一个很不好的地方,那就是我们必须要在每个链接的前面都要加上 “${pageScope.basePath}”    

第二种方案

使用HTML中的base标签(推荐使用)

对base的介绍base 元素可规定页面中所有链接的基准

URL默认情况下,页面中的链接(包括样式表、脚本和图像的地址)都是相对于当前页面的地址(即:浏览器地址栏里的请求URL)。    

我们可以使用 <base>标签中的href属性来设置,所有的“相对基准 URL”。

<head>    

<!-- base需要放到head中 -->    

<base href=http://www.mamicode.com/"http://localhost:8080/test/">  或者 <base href=http://www.mamicode.com/"" />

</head>

这样就可以直接使用相对路径  <a href=http://www.mamicode.com/"index.jsp" />   

设置了 <base>后,相对路径,相对于的就是base中的路径,而不再是浏览器地址的请求路径啦~~~  

我们可以看到JSP返回的html代码中,包含了 <base href=http://www.mamicode.com/"http://localhost:8080/test/">内容

也就是说,在本html文件中,遇到的所有 “相对链接(例如: <a href=http://www.mamicode.com/"login.jsp">)”,都是相对于base 

这样就不用担心转发操作(forward)或 请求地址不同不同所造成的页面无法找到的错误啦~(即: HTTP: 404)。。。

也可以很好的避免因转发造成的css或js引用地址错误问题,以为页面的路径都是以base为基准的。



java、JSP web项目中的路径问题