java web 开发过程中很多地方涉及url路径的问题,比如jsp页面、servlet之间的跳转。其实,可以将url中的/xxx看成一级目录,然后像看待目录层级之间的关系那样去看待url路径。接下来用大量示例对各种情况进行详细阐述,最后按个人理解总结出普适性的规律。
先放一张图,举例要用到的一个项目testProject
一、jsp页面到jsp页面的跳转
用链接进行跳转
相对路径的方式:a.jsp向b.jsp跳转:转向b
a.jsp向c.jsp跳转:转向c
c.jsp向a.jsp跳转转向a
相对路径是根据当前页面的位置去定位目标的位置
绝对路径的方式:a.jsp向b.jsp跳转:绝对转向b
a.jsp向c.jsp跳转:绝对转向c
c.jsp向a.jsp跳转:绝对转向a
打印一下${pageContext.request.contextPath}的值:/testProject 其中“/”表示的是容器的根目录,例如Tomcat的webapps目录。所以后面拼接上jsp页面在项目中的路径就可以被浏览器访问到了,这就是绝对路径。如果相对路径写成这样
实际上和jsp到jsp一样,只是把jsp文件名xxx.jsp换成xxx/yyy这样的url-pattern而已
url-pattern配置为/servlet/TestServlet和/servlet/TestServlet2
假设现在在TestServelt中 url = “http://localhost:8080/testProject/servlet/testServlet
1.response.sendRedirect(request.getContextPath() + "/a.jsp"); request.getContextPath() 获取项目根路径
jsp、servlet本质一样,四种跳转其实就是一种。下面给出通用的结论。
如果该路径是给浏览器使用的,例如重定向,链接,表单的提交等。那么,以"/"开头,此"/"表示容器根路径,如tomcat的webapps
如果该路径是用于服务器内部跳转的,例如请求转发,那么,以"/"开头,此“/”表示的此项目的根路径,如本文中的/testProject
最后,不管用相对路径还是绝对路径,只要查看一下地址栏的url是否是预期的那样,根据url进行修改即可。