• SpringMVC相对路径和绝对路径


    1.相对地址与绝对地址定义

    在jsp,html中使用的地址,都是在前端页面中的地址,都是相对地址
    地址分类:
    	(1),绝对地址,带有协议名称的是绝对地址,http://www.baidu.com
    	(2),相对地址,没有协议开头的,例如user/some.do,/user/some.do。相对地址不能独立使用,必须有一个参考地	址。通过参考地址+相对地址本身
    	才可以指定资源。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.访问地址前面加不加 /

    2.1 案例展示

    web.xml文件代码
    
    • 1
    	<servlet>
            <servlet-name>DispatcherServletservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc.xmlparam-value>
            init-param>
            <load-on-startup>1load-on-startup>
        servlet>
        <servlet-mapping>
            <servlet-name>DispatcherServletservlet-name>
            <url-pattern>*.dourl-pattern>
        servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    index.jsp页面代码
    
    • 1
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <a href="web/some.do">发起一个get请求</a>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    MyController类代码
    
    • 1
    @Controller
    public class MyController {
    
        @RequestMapping(value={"/web/some.do"})
        public String ReturnModelAndView(){
            return "view.jsp";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    view.jsp页面代码
    
    • 1
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>view</title>
    </head>
    <body>
    <h1>我是结果页</h1>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    view.jsp文件的位置
    
    • 1

    在这里插入图片描述
    点击index.jsp页面请求前,地址栏网址为
    在这里插入图片描述

    	点击后
    
    • 1

    在这里插入图片描述

    结论
    当你的访问地址没有以 / 开头,例如web/some.do,当你点击链接之后,访问的地址是当前页面的地址加上链接地址。
    http://localhost:8080/springmvc_005_path/  +  web/some.do
    
    • 1
    • 2
    • 3

    3. 访问地址前面加 /

    修改index.jsp代码
    
    • 1
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <a href="/web/some.do">发起一个get请求</a>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    再次启动服务器
    
    • 1

    在这里插入图片描述

    点击请求
    
    • 1

    在这里插入图片描述

    修改index.jsp
    
    • 1
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <a href="${pageContext.request.contextPath}/web/some.do">发起一个get请求</a>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    再次发起请求
    
    • 1

    在这里插入图片描述

    结论:
    不添加 / 时,访问地址参考的地址是  http://localhost:8080 ,然后加上你的访问地址 /web/some.do ,缺少项目名,因此我们
    可以添加	${pageContext.request.contextPath}来补全。
    
    • 1
    • 2
    • 3

    4. 使用base标签简化操作同时解决不加 / 可能引起的问题

    base标签说明
     标签为页面上的所有的相对链接规定默认 URL 或默认目标。
    在一个文档中,最多能使用一个  元素。 标签必须位于  元素内部。
    
    • 1
    • 2
    • 3

    代码展示

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + request.getContextPath() + "/";
    %>
    <html>
    <head>
        <title>Title</title>
        <base href="<%=basePath%>"/>
    </head>
    <body>
    <%--<a href="${pageContext.request.contextPath}/web/some.do">发起一个get请求</a>--%>
    <a href="web/some.do">发起一个get请求</a>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    结果略,可以正常访问
    
    • 1
  • 相关阅读:
    消息队列一文全解!!!
    Redis Key操作
    [线程与网络] 网络编程与通信原理(五): 深入理解网络层IP协议与数据链路层以太网协议
    深入了解 JavaScript 语法错误以及如何防止它们
    如何用AR Engine开发一个虚拟形象表情包?
    Pytorch框架学习记录3——Transform的使用
    Jenkins配置及插件安装
    Proteus单片机仿真实验电路图绘制
    用ChatGPT编写一个词卡显示网页
    学生选课系统 前后端分离 vue springboot
  • 原文地址:https://blog.csdn.net/qq_63524487/article/details/132707152