请求转发中的相对路径与绝对路径
有些人在请求转发后静态资源莫名其妙会加载不到,出现各种404,然后检查拦截器等一系列还是找不到问题的所在,很多情况是由于转发与相对路径而引发的问题;
在学习前端的时候我们都学习过绝对路径与相对路径,/
代表从根目录开始计算,./
则代表从当前目录开始计算;
- 测试项目结构如下:
- demo.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>相对路径: </h3>
<img src="../images/100.png" alt="">
<h3>绝对路径: </h3>
<img src="/images/100.png" alt="">
</body>
</html>
- UserServlet:
package com.dfbz.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author lscl
* @version 1.0
* @intro:
*/
@WebServlet("/user/findAll")
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 转发到/demo.html
request.getRequestDispatcher("/demo.html").forward(request,response);
}
}
- 启动服务器,访问:
http://localhost:8080/page/demo.html
访问:http://localhost:8080/user/findAll
发现使用绝对路径访问的图片依旧可以正常访问,使用相对路径访问的图片却不能访问了,为什么这样呢?
由于demo.html是/user/findAll请求跳转过去的,此时的当前路径并不是根目录/
,而是/user
目录;因此:images/100.png = /user/images/100.png
一开始可以访问是因为当前路径就是根目录”/“,被转发之后当前目录变成了”/user”
绝对路径可以访问的原因是:自始至终都是从根目录/
开始去读取资源;
我们通过网络抓包也能发现这个问题:
// request.getRequestDispatcher("/demo.html").forward(request,response);
response.sendRedirect("/demo.html");
这是因为重定向后,客户端再次去访问:http://localhost:8080/demo.html
请求了,此时的当前路径又变为了/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131740.html