spring 没有使用 RequestMappingHandlerMapping 来映射请求
spring not using RequestMappingHandlerMapping to map request
我正在 Spring MVC 和 tiles 集成上创建一个简单的应用程序。
最初我在加载静态内容页面(如 img)时遇到问题。
所以为了提供静态页面,我在调度程序中包含了下面一行-servlet.xml
<mvc:resources mapping="/resources/**" location="/resources/" />
现在应用程序可以加载静态页面了。但不知何故,其他请求无法到达控制器。在调试时,我发现 handlerMappings 和 handlerAdapters 中分别缺少 "RequestMappingHandlerMapping" 和 "RequestMappingHandlerAdapter"。
当我从 dispatcher-servlet.xml 中省略资源映射条目时,我的动态请求得到了成功的服务。作为解决方法,我在 xml 文件中手动注册了这两个 bean。
调度员-servlet.xml
<context:annotation-config />
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<beans:bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</beans:bean>
<beans:bean id="handlerAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></beans:bean>
<context:component-scan
base-package="com.mds.presentation.controller"></context:component-scan>
<bean
class="org.springframework.web.servlet.view.UrlBasedViewResolver"
id="tilesViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles.xml</value>
</list>
</property>
</bean>
测试控制器
@Controller
public class TestController {
@RequestMapping(value="/login", method=RequestMethod.GET)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav=new ModelAndView("login");
mav.addObject("home","home");
mav.addObject("buy","buy");
mav.addObject("cart","cart");
return mav;
}
}
我的好奇心是为什么 spring 在包含 mvc:resources 时无法自行注册适当的处理程序和适配器。有什么我想念的吗?
我尝试在 spring 文档和 google 中搜索它,但找不到任何相关内容。
我认为自己定义这些 bean 没有意义。
您的 XML 配置中有 <mvc:annotation-driven />
吗?
如果没有,请尝试将其添加到您的 XML 文件并删除:
<beans:bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</beans:bean>
<beans:bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
</beans:bean>
这应该有助于您的请求到达控制器。
基本上,mvc:annotation-driven
标记会设置您的 Spring 上下文,以允许将请求分派给控制器。
标签将配置两个 bean DefaultAnnotationHandlerMapping
和 AnnotationMethodHandlerAdapter
。或者也许 Spring 的新版本中有一些新 bean,但无论如何该标签将为您配置它们。
我正在 Spring MVC 和 tiles 集成上创建一个简单的应用程序。 最初我在加载静态内容页面(如 img)时遇到问题。 所以为了提供静态页面,我在调度程序中包含了下面一行-servlet.xml
<mvc:resources mapping="/resources/**" location="/resources/" />
现在应用程序可以加载静态页面了。但不知何故,其他请求无法到达控制器。在调试时,我发现 handlerMappings 和 handlerAdapters 中分别缺少 "RequestMappingHandlerMapping" 和 "RequestMappingHandlerAdapter"。 当我从 dispatcher-servlet.xml 中省略资源映射条目时,我的动态请求得到了成功的服务。作为解决方法,我在 xml 文件中手动注册了这两个 bean。
调度员-servlet.xml
<context:annotation-config />
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<beans:bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</beans:bean>
<beans:bean id="handlerAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></beans:bean>
<context:component-scan
base-package="com.mds.presentation.controller"></context:component-scan>
<bean
class="org.springframework.web.servlet.view.UrlBasedViewResolver"
id="tilesViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles.xml</value>
</list>
</property>
</bean>
测试控制器
@Controller
public class TestController {
@RequestMapping(value="/login", method=RequestMethod.GET)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav=new ModelAndView("login");
mav.addObject("home","home");
mav.addObject("buy","buy");
mav.addObject("cart","cart");
return mav;
}
}
我的好奇心是为什么 spring 在包含 mvc:resources 时无法自行注册适当的处理程序和适配器。有什么我想念的吗? 我尝试在 spring 文档和 google 中搜索它,但找不到任何相关内容。
我认为自己定义这些 bean 没有意义。
您的 XML 配置中有 <mvc:annotation-driven />
吗?
如果没有,请尝试将其添加到您的 XML 文件并删除:
<beans:bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</beans:bean>
<beans:bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
</beans:bean>
这应该有助于您的请求到达控制器。
基本上,mvc:annotation-driven
标记会设置您的 Spring 上下文,以允许将请求分派给控制器。
标签将配置两个 bean DefaultAnnotationHandlerMapping
和 AnnotationMethodHandlerAdapter
。或者也许 Spring 的新版本中有一些新 bean,但无论如何该标签将为您配置它们。