SpringBoot 는 어떻게 페이지 의 실현 방법 을 되 돌려 줍 니까?

SpringBoot 에서 Controller 와 페이지 의 결합 을 사용 하면 사용자 의 기능 과 페이지 데이터 의 전달 을 잘 실현 할 수 있 습 니 다.그러나 페이지 로 돌아 갈 때 404 또는 500 의 오류 가 발생 했 습 니 다.저 는 페이지 의 귀환 과 이 안에 포 함 된 구 덩이 를 어떻게 실현 하 는 지 정 리 했 습 니 다.
SpringBoot 에서 Thymeleaf 에 대한 통합 은 기본적으로 완선 되 었 으 나 특수 한 상황 에서 Thymeleaf 를 필요 로 하지 않 거나 사용 할 수 없 기 때문에 두 가지 상황 으로 나 누 어 페이지 의 귀환 에 대해 논술 한다.
우선 이 두 가지 상황 에서 발생 할 수 있 는 오류 이자 초보 자 들 에 게 자주 발생 하 는 오류 입 니 다.
직접 코드 올 리 기:

@RestController
public class TestController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }
}
이 코드 의 취 지 는 index.html 페이지 로 돌아 가 는 것 이지 만 실행 결 과 는 페이지 에서 index 를 출력 하 는 것 입 니 다.
원인 분석:@RestController 주 해 는@ResponseBody 와@Controller 가 합 쳐 진 역할 에 해당 합 니 다.@RestController 주석 Controller 를 사용 할 때 Controller 의 방법 은 jsp 페이지 나 html 로 돌아 갈 수 없습니다.설 정 된 보기 해상도 기 Internal ResourceView Resolver 는 작 동 하지 않 습 니 다.돌아 오 는 내용 은 Return 의 내용 입 니 다.
Mapping 주해 와 함께@Response Body 를 사용 할 때 도 같은 문제 가 발생 할 수 있 습 니 다.
해결 방법:①@ResponseBody 를 제거 하거나 Rest 가 함 유 된 주 해 를 해당 하 는 원시 주해 로 바 꿉 니 다.
② String 을 통 해 되 돌아 오지 않 고 Model AndView 대상 을 통 해 되 돌아 갑 니 다.상기 예 는 return 문 구 를 다음 문장 으로 바 꿀 수 있 습 니 다.

return new ModelAndView("index");
Model AndView 대상 을 사용 하여 되 돌 릴 때@Response Body 와 유사 한 주석 이 있 는 지 고려 할 필요 가 없습니다.
또 하나의 주의해 야 할 점 이 있 습 니 다:@RequestMapping 의 경 로 는 돌아 오 는 페이지 이름과 똑 같 지 않 아야 합 니 다.그러면 500 의 오 류 를 보고 할 수 있 습 니 다!!!
아래 와 같이 이렇게 하면 안 된다.

@Controller
public class TestController {
    @RequestMapping("/index")
    public String idx() {
        return "index";
    }
}
1.템 플 릿 엔진 을 사용 하지 않 은 상태 에서:
템 플 릿 엔진 을 사용 하지 않 은 상태 에서 페이지 를 방문 하 는 방법 은 두 가지 가 있 습 니 다.
1)방문 할 페이지 를 resources/static/폴 더 에 두 면 이 페이지 에 직접 접근 할 수 있 습 니 다.예:

아무것도 설정 되 지 않 은 상태 에서 직접 접근 할 수 있 습 니 다:

같은 resources 에 있 지만 templates 폴 더 에 있 는 login.html 에 접근 할 수 없습니다.

2)redirect 를 사용 하여 페이지 의 도약 을 실현 한다.
예제 코드(페이지 경로 가 위 와 일치 하 는 경우):

@Controller
public class TestController {
    @RequestMapping("/map1")
    public String index() {
        return "redirect:index.html";
    }
    @RequestMapping("/map2")
    public String map2() {
        return "redirect:login.html";
    }
}
실행 결과:

이 방법 은 html 파일 을 static 디 렉 터 리 에 두 어야 페이지 의 도약 을 실현 할 수 있다 는 것 을 의미한다.
물론 이 저장 경로 문 제 를 해결 하 는 최종 해결 방안 이 있 습 니 다.그것 은 바로 springmvc 의 설정 을 사용 하 는 것 입 니 다.

spring:
  mvc:
    view:
      suffix: .html
    static-path-pattern: /**
  resources:
    static-locations: classpath:/templates/,classpath:/static/
이렇게 설정 하면 맵 1 과 맵 2 가 페이지 에 접근 할 수 있 습 니 다.
2,Thymeleaf 템 플 릿 엔진 사용:
필요 한 의존 도 를 pom.xml 에 추가 합 니 다.

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.1.6.RELEASE</version>
</dependency>
같은 페이지 경로 에서 controller 코드 를 다음 코드 로 변경 합 니 다:

@Controller
public class TestController {
    @RequestMapping("/map1")
    public String index() {
        return "index";
    }
    /**                     */
    /*public ModelAndView index() {
        return new ModelAndView("index");
    }*/
    @RequestMapping("map2")
    public String map2() {
        return "login";
    }
}
실행 결과:

이것 은 또 하나의 문 제 를 설명 합 니 다.필요 한 페이지 는 templates 폴 더 아래 에 두 어야 합 니 다.물론 설정 파일 을 변경 할 수도 있 습 니 다.

spring:
  thymeleaf:
    prefix: classpath:/static/
    suffix: .html
    cache: false #    
prefix 에 대응 하 는 값 을 변경 하면 Thymeleaf 가 방문 한 디 렉 터 리 를 변경 할 수 있 습 니 다.목록 이 하나 밖 에 없 는 것 같 습 니 다.
종합:템 플 릿 엔진 의 사용 여 부 는 페이지 접근 을 실현 할 수 있 습 니 다.페이지 에 저 장 된 위치 와 방문 하거나 돌아 올 때 접미사 이름 을 추가 하지 않 는 문제 가 있 습 니 다.
여기 서 SpringBoot 가 어떻게 페이지 로 돌아 가 는 지 에 대한 실현 방법 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 가 페이지 로 돌아 가 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기