前言
在servlet程序中使用getRequestDispatcher方法跳转到jsp页面时报错,首先我们要了解一下服务器和浏览器之间解析的路径差别与不同含义
一、Web中的相对路径与绝对路径,web中/斜杠的不同含义
1.Web中的相对路径与绝对路径
在JavaWeb中路径分为相对路径与绝对路径
相对路径是:
. 一个点表示当前目录
. . 两个点表示上一级目录
资源名 表示当前目录/资源名
绝对路径是:
http://ip:port/工程路径/资源路径
在实际开发中都使用绝对路径或者base+相对路径
2.Web中/斜杠的不同意义
在web中/斜杠是绝对路径
/斜杠如果被浏览器解析得到的地址是:http://ip:port/
例如<a href="/">斜杠</a>
/斜杠如果被服务器解析得到的地址是http://ip:port/工程路径
例如1、<url-pattern>/servlet1</url-pattern>
2、servletContext.getRealPath(“/”);
3、request.getRequestDispatcher(“/”);注意这个方法,直接默认进入工程路径下面,哪怕直接request.getRequestDispatcher(“”)里面没有具体路径也直接进入工程路径。
比如这张图所写的一样,我填的完整的绝对路径,访问后提示
http前面还有“/”,说明这个方法被解析的时候是默认进入工程路径中去的。
特殊情况: response.sendRediect(“/”); 把斜杠发送给浏览器解析。得到 http://ip:port
二、问题解决方法
问题出现的几种情况
要注意的是我们必须使用绝对路径,不能使用相对路径,servlet.java是在src目录下,我这里将Java目录设置为我的源码目录,jsp是在webapp目录下,彼此不存在相对关系;
我目的是从Action.java这个servlet程序跳转到info.jsp文件中去,我一开始是这样设置的路径
于是乎出现了这这种报错,为什么呢?getRequestDispatcher方法它是由Tomcat服务器解析,这个时候解析出来的路径明显是去不了test目录下的,于是乎我把它改成了. ./info.jsp
这个时候运行服务器就变成了这个
这个说明文件已经找到了,但是服务器里面有问题,这两个文件不存在相对关系啊,我们使用绝对路径试试,
运行结果:
可以了!
总结
向这个作者学习https://blog.csdn.net/Java_stud/article/details/80551681
好好学习天天向上!