2017-09-10 5 views
0

私は2つのプロジェクトを作成しました。どちらも非常に基本的な設定のSpring MVCと単一のコントローラです。両方のプロジェクトのファイルの中には、コントローラ、ビュー、ビューリゾルバの定義のようなIDENTICALのものがあります。これは、障害の原因を見つける目的で実行されます。projectAでは、コントローラが送信したモデルデータを表示できません。 projectBが問題なく動作します。 (私は春の4.3.9とTomcat 8.5.20を使用しています)2つの非常によく似たSpringMVCプロジェクト。モデルデータを表示することができません

プロジェクトからAbstractAnnotationConfigDispatcherServletInitializerを拡張することにより定義されたディスパッチャサーブレット。 getRootConfigClasses()は、viewリゾルバを定義するweb-config.xmlにリンクするconfigクラスを返します。

├── pom.xml 
└── src 
    └── main 
     ├── java 
     │   └── mywebapp 
     │    ├── config 
     │    │   ├── MyWebAppInitializer.java 
     │    │   └── RootConfig.java 
     │    └── web 
     │     └── HomeController.java 
     ├── resources 
     │   └── web-config.xml 
     └── webapp 
      └── WEB-INF 
       ├── views 
       │   └── home.jsp 
       └── web.xml 

プロジェクトBは - ディスパッチャは、web.xmlで定義されています。サーブレット・コンテキストとルート・コンテキストはweb.xmlにリンクされています。両方のプロジェクトは、同一使用するため

Hello World! 

my message in model 
my message in model 

を返し

├── pom.xml 
└── src 
    └── main 
     ├── java 
     │   └── mywebapp 
     │    └── web 
     │     └── HomeController.java 
     ├── resources 
     │   ├── app-config.xml 
     │   └── web-config.xml 
     └── webapp 
      └── WEB-INF 
       ├── views 
       │   └── home.jsp 
       └── web.xml 

プロジェクト戻り

Hello World! 

${message} 
${message} 

プロジェクトB:

)JSPビュー。 b)前記ビューのコントローラ。ビューリゾルバを定義 C)設定ファイル。(ウェブ-config.xmlの)

とルート・コンテキストファイル(アプリ-config.xmlのとRootConfig.javaは)唯一のサーブレット・コンテキスト・ファイルとの間のリンクとして機能しますディスパッチャーの定義では、障害の原因はディスパッチャーサーブレットのjava-configから来る必要があります。しかし、私はそれを見つけることができません。 プロジェクトプロジェクトBから

package mywebapp.config; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] { RootConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 
} 

のweb.xmlから

MyWebAppInitializer.java

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 

    <display-name>Spring MVC XML Configuration Example</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:app-config.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>my-dispatcher-servlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:web-config.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>my-dispatcher-servlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

ウェブ-config.xmlの - 両方のプロジェクトで共有

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://www.springframework.org/schema/mvc 
         http://www.springframework.org/schema/mvc/spring-mvc.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context.xsd "> 

    <context:component-scan base-package="mywebapp.web" /> 

    <mvc:annotation-driven /> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
     <property name="prefix" value="/WEB-INF/views/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

</beans> 

HomeController.java - BOTHプロジェクト

package mywebapp.web; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class HomeController { 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String index(ModelMap model){ 
     model.addAttribute("message", "my message in model"); 
     return "home"; 
    } 

} 

で共有し、私は私が働いてのjava-config設定テンプレートを持つことができますので、モデルデータを表示するために、失敗の原因を見つけるのに役立つしてください。

RootConfig。Maven原型が作成したweb.xmlを削除 - プロジェクト

package mywebapp.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.ComponentScan.Filter; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.FilterType; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.context.annotation.ImportResource; 

import java.util.List; 

@Configuration 
@ComponentScan (basePackages={"mywebapp"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)}) 
@ImportResource("classpath:web-config.xml") 
public class RootConfig { 
} 
+0

に以下を追加します。 – Jason

+0

@Jasonが追加しました。 – user7175478

答えて

0

ステップ1) でプロジェクトからのjava。

ステップ2)あなたの `RootConfig`クラスを表示してくださいpom.xml

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>3.0.0</version> 
     </plugin> 
    </plugins> 
</build> 
関連する問題