2017-10-13 11 views
0

なぜTomcatがJSPページをレンダリングしないのですか?場合、私は、サーブレットコンテナのURLに言っている:(コントローラがGETハンドル以降 - 要求)それよりもhttp://localhost:8080/contactsはすべての権利だが、私は直接Tomcatに伝えるたびどこもらうよりも、プロジェクト内の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:

<%@ 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")'は、Webアプリケーションルートの場所をTomcatに通知します。 'WEB-INF/views'はサーブレットマッピングの一部ではないので、Tomcatはlist.jspを取得できません。 –

+0

@dsp_userここで言うことは、いくつかのレベルで間違っています。 '@RequestMapping("/contacts ")'はSpringのサーブレットに着信要求をいつこのコントローラに送るかを指示します。 '/ contacts'はWebアプリケーションルート+ SpringサーブレットのマッピングURLパターンに対する相対パスです。アプリケーションルート自体ではありません。すなわち '/spring-servlet-mapping/contacts' –

答えて

0

サーブレット仕様の§10.5に記載されているように:

...静的リソース場合を除きJARファイルにパッケージ化されている場合、クライアントからWEB-INF /ディレクトリはSC_NOT_FOUND(404)応答で返されなければなりません。

すなわち、WebアプリケーションのWEB-INFディレクトリにのみアクセス可能なリソースは、ウェブ断片ジャー中に包装されているものです。

リクエスト・ディスパッチャを使用してWEB-INFディレクトリにJSP(またはその他のリソース)をインクルードまたは転送することはできますが、クライアントはリクエスト・ディスパッチャを使用して直接アクセスすることはできません。

これにより、エンドユーザーは、構成の一部である可能性のある機密情報やクラスファイル自体にアクセスできなくなります。

関連する問題