JavaWeb页面跳转中的绝对路径跳转与相对路径跳转

不管在什么位置,绝对路径跳转和相对路径跳转都遵循了相同的规则。但是很多初学Servlet的朋友,在Servlet中跳转页面时经常出现404的问题,就会常常怀疑是不是路径跳转的规则变了。其实路径的规则始终没变,问题主要是由web.xml中的虚拟路径引起的。接下来详细分析下:

case1:普通页面中的跳转

假设当前页面的路径为:http://localhost:8080/projectname/index.jsp,在页面有个表格,设置表格提交的跳转路径就有相对路径和绝对路径两种方式:

  1. 相对路径跳转 action="nextpage.jsp": 表示跳转到路径:http://localhost:8080/projectname/nextpage.jsp。
  2. 绝对路径跳转 action="/nextpage.jsp": 表示跳转到路径:http://localhost:8080/nextpage.jsp。

case2:Servlet中的路径跳转:

假设Servlet的路径为:http://localhost:808o/projectname/servlet/AjaxMailCheckServlet(web.xml中Servlet标签中url-pattern下生成的虚拟路径),现在要在Servelt中做逻辑判断以后跳转,那么就有相对路径和绝对路径两种跳转方式:

  1. 相对路径跳转,表示相对于当前Servlet路径。例如:response.sendRedircet("nextpage.jsp")表示转发到:http://localhost:8081/projectname/servlet/nextpage.jsp。
  2. 绝对路径跳转,以"/"开头,表示相对于整个项目根目录下的路径,例如response.sendRedircet("/newsDetailList.jsp")表示转发到:http://localhost:8081/newsDetailList.jsp。

对比case1和case2,不难发现:

  • 绝对路径跳转是完全相同的,不会因为是在Servlet中跳转而受到影响。

相对路径跳转则有了差异:http://localhost:8080/projectname/nextpage.jsp/http://localhost:8081/project/servlet/nextpage.jsp。在Servlet的路径中多了一层servlet路径。多出这个是因为web.xml中的虚拟路径引起的,读者仔细观察就能发现。其实相对路径跳转的规则依旧适用。

同样的,过滤器,监听器路径生成的机制都跟Servlet类似,如果在过滤器,监听器中有页面跳转的话,如果用相对路径也容易出现相同的问题。

猜你喜欢

转载自blog.csdn.net/illikang/article/details/82693349
今日推荐