SpringMVC 연구 노트 -07 경로 주소

jsp 및 html에서 사용하는 주소는 모두 프런트 엔드 페이지의 주소입니다. 프로토콜로 시작하지 않는 주소는 상대 주소입니다.

https://www.baidu.com 과 같은 인터넷의 웹 페이지에 액세스하기 위해 도메인 이름을 사용합니다 . 프로토콜 이름이있는 이러한 유형의 주소는 절대 주소입니다.

SpringMVC의 상대 주소는 현재 주소 (참조 주소) + 절대 주소를 연결하는 상대 주소를 통해 액세스됩니다.

1. 상대 주소가 /로 시작하지 않습니다.

프로젝트가 시작된 후 브라우저의 주소 표시 줄 URL은 참조 주소입니다 : http : // localhost : 8080 / SpringMVC_01 / , 상대 주소가 연결되어 절대 주소를 얻습니다.

2. /로 시작하는 상대 주소

이때 프로젝트의 참조 주소가 http : // localhost : 8080되었고 접속 후 액세스 한 리소스 경로가 잘못되었음을 확인했습니다. 실제로 /로 시작하는 상대 주소, 그가 사용하는 참조 주소는 호스트 이름이며 프로젝트 이름이 없습니다.이 방법을 사용해야하는 경우 프로젝트 이름을 추가해야합니다 (동적으로 가져 오기 위해 EL 표현식 사용). :

3. 장점 비교

/로 시작하지 않는 것이 간단 해 보이지만 단점도 있습니다. 뷰 파서를 사용하지 않고 페이지가 index.jsp로 돌아갈 수 있도록합니다.

    @RequestMapping(value = "/some.do" , method = RequestMethod.GET)
    public ModelAndView doSome(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-get");

        modelAndView.setViewName("/index.jsp");

        return modelAndView;
    }
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.1.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <!--声明组件扫描器-->
    <context:component-scan base-package="com.zzt.Controller"/>

    <!--配置视图解析器-->
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    </bean>-->

    <!--配置注解驱动-->
    <mvc:annotation-driven/>

    <!--静态资源处理 方式1
    <mvc:default-servlet-handler/>-->

    <!--静态资源处理 方式2-->
    <mvc:resources mapping="/static/**" location="/static/" />


</beans>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="test/some.do">发起some.do请求</a>
</body>
</html>

SpringMVC는 forward 메소드를 사용하므로 점프에 따라 URL이 변경되지 않으며, 이때 주소는 다음과 같이 구문 분석 할 수 있습니다.

참조 경로 : http : // localhost : 8080 / SpringMVC_02 / test /

출처 : some.do

이때 다른 요청을하면 어떻게됩니까?

/로 시작하지 않는 메소드를 사용하지만 두 번째 요청을 시작할 때 참조 경로가 첫 번째 것과 다릅니다. splicing을 통해 http : // localhost : 8080 / SpringMVC_02 / test / 뒤에 추가합니다. 상대 주소 자원,의 시험 / some.do 입니다 통해 http : // localhost : 8080 / SpringMVC_02 / 시험 / 검사 / some.do 분명히에 매핑이 존재하지 않을뿐만 아니라 정적 자원입니다.

해결 방법 1 : 동적 프로젝트 이름 추가

<a href="${pageContext.request.contextPath}/test/some.do">发起some.do请求</a>

해결 방법 2 : html의 <base> 태그를 사용하여 기본 주소를 수정합니다. /로 시작하지 않는 모든 상대 주소는 기본 주소를 참조 주소로 사용합니다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <base href="http://localhost:8080/SpringMVC_02/">
</head>
<body>
    <a href="test/some.do">发起some.do请求</a>
</body>
</html>

물론 기본 태그의 기본 주소를 각 페이지별로 따로 작성하는 것은 불가능하므로 jsp에서 동적으로 프로젝트 주소를 얻을 수도 있습니다.

<%@ 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="test/some.do">发起some.do请求</a>
</body>
</html>

 

추천

출처blog.csdn.net/qq_39304630/article/details/112982996