重定向,请求转发和jsp等中的路径问题
jsp中路径用相对路径的话jsp文件不能随便挪动,例如在webContent中直接创建的jsp文件a.jsp挪动到webContent下创建的文件夹a中,那么在a.jsp文件中用<a/>超链接访问webContent中的jsp文件b.jsp就会出现问题,除非删除a.jsp文件中开始的path和basePath的java代码块。
所以说jsp中路径用相对路径的话会出现以下问题:
1、资源的位置不能随意更改;2、需要使用../进行文件夹的跳出,使用比较麻烦;
推荐使用绝对路径:因为如果是a.jsp跳转到b.jsp文件,不管a.jsp变动多少,只要b.jsp的文件路径不发生变动,绝对路径就不会出错,
/项目名称/你的servlet或者要访问的jsp
这里的第一个/是代表服务器根目录,就是相当于localhost:8080
当然如果你的jsp文件是嵌套好几个文件夹的话,自己酌情添加/直到最后一个的是你需要的访问,但是当是需要的资源是java文件并且在包下的时候,因为一般都是直接写简称(就是webservlet中的)。
也有些是这样写的(/虚拟项目名/资源名)。总之理解就行。
注意:WebContent和src都算是根目录一类的,我也说不太清楚,但是希望理解我的意思。
jsp中有自带的全局路径声明:在jsp的一开始写有
<% String path=request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/" ;
%>
head中写有<base href = "<%=basePath%>"
这几句相当于是绝对路径,就是已经找到项目了,在路径中只要写资源的路径名称就行了。
不过还是推荐使用自己会写绝对路径,因为在myeclipse中会自动生成那几句绝对路径代码,但是eclipse中不自动生成。
Servlet中的重定向中的绝对路径和请求转发中的绝对路径不太一样,
请求转发中的绝对路径是“/”表示”localhost:8080/projectname(项目名称)/“
而重定向中的绝对路径/表示localhost:8080
所以请在项目中注意些。