解决路径问题
定义:前台路径:在jsp中(除java代码块)填写的的路径;
后台路径:在java代码,配置文件中填写的路径;
参照路径:不以/开头的:参照路径为当前资源的访问路径(是地址栏地址去掉访问名称)
例如:URL为http://localhost:8080/01-primary/hello.do去掉资源名称hello.do
即为访问路径http://localhost:8080/01-primary/ URL=访问路径+资源名称
以/开头的:1.前台路径的参照路径是web服务器的根。例如http://localhost:8080
2.后台路径的参照路径是web应用的根。例如http://localhost:8080/01-primary
示例:<a href="/hello.do">跳转</a> (注:MyController是SpringMVC中的处理器)
前台路径,其参照路径为web服务器的根,即http://localhost:8080,所以提交的绝对路径为
http://localhost:8080/ hello.do,这个绝对路径是无法访问到处理器MyController的,中间缺少项目名。
解决方法:路径前加${pageContext.request.contextPathdon}动态获取项目的名称。
即${pageContext.request.contextPathdon}/hello.do
<a href="hello.do">跳转</a>
不以/开头的路径,其参照路径为当前资源的访问路径,http://localhost:8080/01-primary/index.jsp去掉index.jsp
即为http://localhost:8080/01-primary/,所以其访问路径为http://localhost:8080/01-primary/ hello.do。能访问的到。
request.getRequestDispacther("/test.jsp").forword(request,response);
后台路径,其参考路径为web应用的根,即http://localhost:8080/01-primary,所以提交的绝对路径为
http://localhost:8080/01-primary /test.jsp,能访问的到,因为test.jsp在项目根目录。
特例:当代码中使用response的sendRedirect()方法进行重定向时,其参照路径不是web应用的根,而是web服务器的根路径。
(因为重定向是两个请求两个响应,"相当于是从前台发出的请求")。正确写法:response.sendRedirect("test.jsp"); 不带/