2017-10-13 1 views
0

왜 Tomcat이 JSP 페이지를 렌더링하지 않습니까? 경우에는 내가 서블릿 컨테이너 URL에 말하고 : (컨트롤러가 GET 처리 이후 - 요청) 그것보다 더 http://localhost:8080/contacts 괜찮아,하지만 직접 톰캣에 말할 때마다 어디에서 얻을 수보다 프로젝트의 JSP 물리적 http://localhost:8080/WEB-INF/views/list.jsp입니다Tomcat이 JSP 페이지를 렌더링하지 않습니다.

404 오류

이쪽하게 IntelliJ IDEA 프로젝트 구조는 다음과 같습니다

enter image description here

pom.xml :

<dependencies> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <!--support @Service, @Repository --> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-commons</artifactId> 
      <version>2.0.0.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 



     <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <!-- teg library --> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.7.25</version> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 

컨트롤러 :

@Controller 
@RequestMapping("/contacts") 
public class ContactController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String list(Model model) { 


     return "list"; 
    } 
} 

JSP :

서블릿 사양의 §10.5에 기술 된 바와 같이
<%@ page contentType="text/html; charset=UTF-8" language="java" %> 

<%-- 
    Created by IntelliJ IDEA. 
    User: Игорь 
    Date: 07.10.2017 
    Time: 13:18 
    To change this template use File | Settings | File Templates. 
--%> 

<html> 
<head> 
    <title>Title</title> 
</head> 
<body> 

<% System.out.println("Inside JSP file!!!!!!!!!!!!!!!!!!!"); %> 

<h1>Contact Listing</h1> 


SOME MESSAGE! 

</body> 
</html> 
+3

'@RequestMapping ("/ contacts")'은 웹 응용 프로그램 루트의 위치를 ​​Tomcat에 알려줍니다. 'WEB-INF/views'는 서블릿 매핑의 일부가 아니므로 Tomcat은 list.jsp를 검색 할 수 없습니다. –

+0

@ dsp_user 여기서 말하는 내용은 몇 가지 수준에서 잘못되었습니다. @RequestMapping ("/ contacts")'Spring 서블릿이 들어오는 요청을 언제이 컨트롤러로 보내야하는지 알려준다. '/ contacts'는 웹 응용 프로그램 루트 + Spring 서블릿 매핑 URL 패턴에 대한 상대 *입니다. 응용 프로그램 루트 자체는 아닙니다. 즉 '/spring-servlet-mapping/contacts' –

답변

0

:

경우를 제외

... 정적 자원 JAR 파일에 패키지되어있는 경우, 클라이언트가 WEB-INF/디렉토리는 SC_NOT_FOUND (404) 응답과 함께 반환되어야합니다.

즉 웹 응용 프로그램의 WEB-INF 디렉토리에있는 유일한 액세스 가능한 자원은 웹 조각 병에 패키지 된 자원입니다.

요청 처리기를 사용하여 WEB-INF 디렉토리에 JSP (또는 다른 자원)를 포함하거나 전달할 수 있지만 클라이언트가 직접 요청에 액세스하지 못할 수 있습니다.

이렇게하면 최종 사용자가 구성 또는 클래스 파일 자체에 포함될 수있는 잠재적으로 중요한 정보에 액세스하지 못하게합니다.

관련 문제