@RequestMapping の動作にいくつかの奇妙な問題があります。これがシナリオです
@Controller クラスといくつかの @RequestMapping メソッドを含む Web プロジェクトがあります。彼らは正常に動作します。たとえば、1 つのマッピングは @RequestMapping("/jpm/{param}/add") です。
最初のプロジェクトに戦争オーバーレイを使用した別の Web プロジェクトがあります。すべてが正常に動作し、コントローラーとそのメソッドを継承します。今のところ問題ありません。
今度は、2 番目のプロジェクトに新しい @Controller が必要です。他のものと同じように追加しますが、別の @RequestMapping ("/jpm/{param}/activate") メソッドを使用します。
@Controller と @RequestMapping は、ログで確認できるようにSpringによって正常に読み取られますが、「/jpm/{param}/add」は機能しますが、「/jpm/{param}/activate」は機能しません。404リソースがないと表示されます見つかった。
両方のクラスは異なるパッケージに含まれていますが、両方がロードされています。各プロジェクトに 1 つずつ、コンポーネント スキャンという 2 つのコンテキストがあります。両方のクラスが同じパッケージ (名前) にある場合、(異なるプロジェクトであっても) 正常に動作することがわかりました。
それは正常ですか?私は何が欠けていますか?コントローラーとマッピングが読み取られるのに機能しないのはなぜですか?
私はこれに腹を立てています、どんなアドバイスも大歓迎です!.
web.xml (最初のプロジェクト)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/applicationContext.xml,
WEB-INF/spring-locale.xml,
WEB-INF/spring-security.xml,
WEB-INF/spring-datasource.xml,
WEB-INF/spring-hibernate.xml,
WEB-INF/spring-jpm.xml
</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<servlet>
<servlet-name>jpm</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
...
これが私のMVC構成ファイルで、ほとんどが標準的なものです
<?xml version="1.0" encoding="UTF-8"?>
<!-- this file will contain all of JPM Spring Web MVC-specific components -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
...
<context:component-scan base-package="jpaoletti.jpm2.controller"/>
...
</beans>
*最終編集: 解決策 *
ドキュメントのためだけに:
最初のプロジェクトで、サーブレット設定ファイル (jpm-servlet.xml) を追加しました
<import resource="jpm-servlet-custom.xml" />
そして2番目のプロジェクトでは:
jpm-servlet-custom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="another.package.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
</beans>