URL中的访问路径如何设置?

程序员考拉

共 2031字,需浏览 5分钟

 ·

2020-08-29 02:37


访问路径与资源名称


通常的URL资源路径由两部分构成:访问路径与资源名称. 资源名称指的是要访问资源的直接名称, 如show.jsp, 或与要访问资源存在映射关系的间接名称, 如show.do. 而访问路径, 则是通过该路径可以定位到指定的资源, 即在URL资源访问路径中除了资源名称以外的其他部分. 一般情况下, 在URL访问路径中, 最后一部分为资源名称, 而其他部分则为访问路径.


如下面的URL:


http://localhost:8080/ssm/show.do

其中 http://localhost:8080/ssm 为访问路径, show.do为资源名称.


<body>
    <a href="xxx/ooo/show.do">跳转到show页面a>
body>


其中 xxx/ooo/ 为访问路径, show.do为资源名称.


根据"访问路径是否可以独立完成资源准确定位"的判别标准, 可以将访问路径分为绝对路径与相对路径.


绝对路径


绝对路径, 是指根据给出的访问路径可以准确定位到资源的路径. Web应用的绝对路径是指带访问协议的路径, 如:


http://localhost:8080/ssm/show.do


相对路径


相对路径是指根据访问路径无法准确定位到资源的路径. 因为只有绝对路径才能定位到资源, 所以当资源的路径是相对路径时, 我们的首要任务是找到参照路径, 然后将参照路径和相对路径拼接成绝对路径.


在Web应用中, 相对路径的写法有两种: 以斜杆开头的相对路径和不以斜杆开头的相对路径.


以斜杆开头的相对路径


以斜杆开头的相对路径, 根据路径所在文件所处位置的不同, 又分为前端路径和后端路径.


(1) 前端路径


前端路径是指由浏览器解析执行的代码中所包含的路径, 如html, css, js, 及jsp中的静态路径. 前端路径的参照路径是Web服务器的根路径, 即 http://localhost:8080/


(2) 后端路径


后端路径是指由服务器解析执行的代码及文件中所包含的路径, 如Java代码中的路径, jsp中的动态路径(Java代码块中的路径), xml文件中的路径等. 后端路径的参照路径是Web应用的根路径, 即: http://localhost:8080/ssm/


注意, response.sendRedirect("") 中的路径为前端路径, 因为重定向是把URL发送给客户端, 客户端再次向服务器发送请求. 所以在后台代码中要重定向到show.jsp页面时, 代码如下:


response.sendRedirect("show.jsp");
response.sendRedirect(request.getContextPath + "/show.jsp");


不以斜杆开头的相对路径


不以斜杆开头的相对路径, 无论是前端路径还是后端路径, 其参照路径都是当前资源的访问路径, 而不是当前资源的保存路径.


路径常见问题


(1) 为什么页面超链接的href属性值加上斜杆会报错?


<body>
    <a href="/show.do">跳转到show页面a>
body>

因为超链接上的路径为前端路径, 其参照路径为 http://localhost:8080/ ,拼接为绝对路径后为 http://localhost:8080/show.do , 但该资源真正的绝对路径为 http://localhost:8080/ssm/show.do , 解决办法如下:


<body>
    <a href="${pageContext.request.contextPath}/show.do">跳转到show页面a>
body>


(2)为什么点击超链接跳转到自身后再点击会报错?


Controller代码


@RequestMapping("/test/show.do")
public ModelAndView doShow() {
    return new ModelAndView("/index.jsp");
}


index页面


<body>
  <a href="test/show.do">跳转a>
body>

index页面的路径为 http://localhost:8080/ssm/index.jsp , 当点击第一次时绝对路径为 http://localhost:8080/ssm/test/show.do , 点击第二次时绝对路径为 http://localhost:8080/ssm/test/test/show.do , 解决办法如下:


<body>
    <a href="${pageContext.request.contextPath}/show.do">跳转a>
body>


或者


<%
    String path = request.getContextPath();
    String bathPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <base href="<%=bathPath%>">
head>
<body>
  <a href="test/show.do">跳转a>
body>
html>


页面中的< base>标签, 会在当前页面的所有资源请求路径前加上< base>标签内的路径, 将相对路径变成绝对路径. 该方式实际上是修改了不带斜杆的相对路径的参照路径, 将其修改为了basePath, 所以这种方式要求页面中的请求不能以斜杆开头.


原文链接:blog.csdn.net/litianxiang_kaola/article/details/86485484



浏览 42
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报