为什么请求转发时是跳转到 ../show.jsp ,而不是 /show.jsp
public void show(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("NAME","张三");
request.getRequestDispatcher("../show.jsp").forward(request,response);
}
正在回答 回答被采纳积分+1
同学你好。首先明确浏览器负责解析请求的URL,服务器端根据路径寻找资源。
路径分为三种,分为相对路径、根路径和绝对路径。
1、相对路径
1)从本身的同级目录开始构建的(如果是写在Servlet里,那就是指从WebContent文件夹,在IDEA中是web文件夹开始),以"./"开头,但"./"可省略,例如 要访问的show.jsp在当前页面的同级目录下有两种写法"./show.jsp" 或"show.jsp"。但是在这里,就会被解析成localhost:8080/test/show.jsp
2)"../" 表示上一级目录开始,像在这里,我们请求TestController的路径为“test/show.do”,就需要使用"../show.jsp",跳出test目录。返回到web项目的根路径再去寻找。此时拼出的url才是localhost:8080/show.jsp
2、根路径
特征是最前面加/,代表相对于当前 WEB 站点根目录的路径,一般要带上ContextPath上下文路径(一般为项目名,这个项目中是“/”)。同学使用的“/show.jsp”就是根路径。服务器拿到请求后会直接在当前web项目的根路径,也就是代码中的web文件夹中寻找。
3、绝对路径
就是将“http://localhost:8080/” 也带上的全路径,和浏览器访问的时候使用的路径相同。一般我们会事先拼接好web项目的根路径:
String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"
request.getScheme()获取的是协议名,也就是"http"。request.getServerName()获取的是当前主机名,也就是localhost,值可能是"127.0.0.1"。request.getServerPort()获取的是端口号,Tomcat的默认端口号为"8080"。request.getContextPath()获取的是上下文路径,一般为项目名,在这里是“/”。
如果解答了同学的疑问,望采纳~
祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星