我对@RequestMapping 行为有一些奇怪的问题。这是场景
我有一个带有 @Controller 类和一些 @RequestMapping 方法的 Web 项目。他们工作正常。例如,一种映射是 @RequestMapping("/jpm/{param}/add")
我有另一个 web 项目,第一个项目上有战争覆盖。一切正常,我继承了控制器及其方法。到目前为止没有问题。
现在我想在第二个项目中有一个新的@Controller。我像另一个一样添加它,但使用了不同的 @RequestMapping ("/jpm/{param}/activate") 方法。
@Controller 和 @RequestMapping 被 Spring 读取得很好,因为我可以在日志中看到它们,但是,虽然“/jpm/{param}/add”有效,但“/jpm/{param}/activate”无效,它说 404 资源无效成立。
两个类都在不同的包中,但都加载了,我有两个上下文:组件扫描,每个项目一个。我发现如果两个类都在同一个包(名称)中,它们可以正常工作(即使在不同的项目中)。
这正常吗?我错过了什么?为什么控制器和映射被读取但不起作用?
我对此感到生气,欢迎任何建议!
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>
*最终编辑:解决方案*
仅用于文档:
在第一个项目中,我添加了 servlet 配置文件 (jpm-servlet.xml)
<import resource="jpm-servlet-custom.xml" />
在第二个项目中:
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>