普通页面中的跳转
假设当前页面的路径为:http://localhost:8080/projectname/index.jsp,在页面有个表格,设置表格提交的跳转路径就有相对路径和绝对路径两种方式:
相对路径跳转 action="nextpage.jsp": 表示跳转到路径:http://localhost:8080/projectname/nextpage.jsp。
如果不是以"/"开始的,则表示该请求是相对于当前html路径。
绝对路径跳转 action="/nextpage.jsp": 表示跳转到路径:http://localhost:8080/nextpage.jsp。
相对于网站根目录可以用"/"开始 (根目录是指服务器的根目录,不是你项目的根目录)
Servlet中的路径跳转:
假设Servlet的路径为:http://localhost:808o/projectname/servlet/AjaxMailCheckServlet(web.xml中Servlet标签中url-pattern下生成的虚拟路径),现在要在Servelt中做逻辑判断以后跳转,那么就有相对路径和绝对路径两种跳转方式:
相对路径跳转,表示相对于当前Servlet路径。例如:response.sendRedircet("nextpage.jsp")表示转发到:http://localhost:8081/projectname/servlet/nextpage.jsp。
绝对路径跳转,以"/"开头,表示相对于整个项目根目录下的路径,例如response.sendRedircet("/newsDetailList.jsp")表示转发到:http://localhost:8081/newsDetailList.jsp。
绝对路径跳转是完全相同的,不会因为是在Servlet中跳转而受到影响。
相对路径跳转则有了差异:
http://localhost:8080/projectname/nextpage.jsp/
http://localhost:8081/project/servlet/nextpage.jsp。在Servlet的路径中多了一层servlet路径。多出这个是因为web.xml中的虚拟路径引起的,读者仔细观察就能发现。其实相对路径跳转的规则依旧适用。
同样的,过滤器,监听器路径生成的机制都跟Servlet类似,如果在过滤器,监听器中有页面跳转的话,如果用相对路径也容易出现相同的问题。