以/开头的两种不同相对路径的解析

在JSP页面中,根据解析地方的不同可以分为两种,一种是在服务器端解析的,还有一种是在客户浏览器端解析的。

在JSP页面内嵌的java代码中,”/”是相对于项目应用webapp而言的,例如在项目myProject有目录dir,
该目录中有文件test1.jsp与test2.jsp.在页面test1.jsp中嵌入有java代码response.sendRedirect(“/test2.jsp”),
这里的/test.jsp等价于http://127.0.0.1:8080/myProject/test2.jsp
在JSP页面中与css,images,javascript等相关的文件是在客户端浏览器解析
其相对于服务器而言,比如在上边的test1.jsp中有链接<a href=’/test2.jsp’>链接</a>,
/test2.jsp等价于http://127.0.0.1:8080/test2.jsp,而不是http://127.0.0.1:8080/myProject/test2.jsp
另外,相对路径除了以’/’开头以外,还有其他方式的相对路径,即相对于当前路径的相对路径,
以./../ 或者 href=’test2.jsp’方式。一般不要使用这种方式的相对路径,因为项目内部文件的移动都会对这些路径造成影响,
而如果以/开头的相对路径,项目内部的文件移动是不会对这些路径造成影响的。
针对于在jsp页面中以./ ../ 或者 href=’test2.jsp’方式的相对路径,可以通过<basehref="<%=basePath%>">类设置基准目录,
在设置之前是以当前浏览器中的地址为基准目录的,设置之后就是以basePath的值为基准目录了。


我最近在做一个项目的移植时,发现jsp文件中的所有css,image,javascript都是以/开头的相对路径,移植后根本显示不出来,
因为这些相关文件都存放在WebRoot路径下边,
也就是说,我如果想访问我的图片,应该是http://127.0.0.1:8080/mysport/images/logo.png,
而页面中图片的地址源却是http://127.0.0.1:8080/images/logo.png,这就是因为/在浏览器端解析造成的。
我索性就在tomcat中另外建立一个工程命名为images,然后在此目录内部直接放入我的图片,
在另外的项目mysport的jsp页面中,图片http://127.0.0.1:8080/images/logo.png就能正常显示出来了,没想到问题是这样解决的。


这个移植问题的根本原因是

项目发布成了ROOT项目。默认情况下,“tomcat700\webapps\ROOT”这里面是Tomcat的ROOT目录,也就是你刚刚安装好Tomcat,
啥都没干的时候,输入http://localhost:8080/ 所看到的Tomcat欢迎界面。但是这个目录位置是可以修改的,在“tomcat700\conf\server.xml”:
<Context path="啥都别写,留空" docBase="D:/develop/eclipse/workspace/myProject/WebRoot" debug="0" reloadable="true" />
那么你浏览器输入http://localhost:8080/,看到的就不再是Tomcat欢迎界面了,是你自己的应用程序界面。
如果想要在浏览器中输入http://localhost:8080后不是默认的tomcat欢迎界面,可以有两种方式,
第一种是不移动Web项目的位置,修改配置文件server.xml;第二种是直接把Web项目移动到ROOT目录下。
如果发布为ROOT项目的话,这个项目的项目名已经没有意义了,因为在浏览器的地址已经不需要这个项目的项目名称了

你可能感兴趣的:(JavaScript,tomcat,jsp,浏览器,服务器,webapp)