<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!--
配置Handler(controller)的bean,让Handler(controller)在spring容器中加载
bean的name属性就相当于一个url,所以name属性应该写成url形式,且应该以.action结尾,因为在web.xml中配置了url-pattern为.action
-->
<bean id="queryItems1" name="/queryItems.action" class="com.java.controller.ItemsController"/>
<bean id="queryItems2" name="/queryItems4.action" class="com.java.controller.ItemsHandler"/>
<!-- 配置注解的Handler(Controller)的bean,不需要id和name -->
<!-- <bean class="com.java.controller.ItemsAnnotationController"/> -->
<!--
设置包扫描,设置后不需要将Handler(Controller)在该文件里面配置成bean了,
它会自动扫描标注了@Controller,@Service,@Repository,@Component注解的类
实际开发中使用这种方式
-->
<context:component-scan base-package="com.java.controller"></context:component-scan>
<!--
配置处理器映射器
处理器映射器会将bean的name作为url进行查找(映射路径),需要在配置Handler(Controller)时指定bean的name属性,也就是url
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--
另一种处理器映射器:简单url映射器
同一个Handler可以有多个简单url映射
-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- 同一个Handler可以有多个简单url映射 -->
<prop key="/queryItems1.action">queryItems1</prop>
<prop key="/queryItems2.action">queryItems1</prop>
<prop key="/queryItems3.action">queryItems2</prop>
</props>
</property>
</bean>
<!-- 配置处理器适配器:配置了该处理器适配器后,Handler需要实现Controller接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 另一个处理器适配器 :配置了该处理器适配器后,Handler需要实现HttpRequestHandler接口-->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 配置注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 配置注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 该标签可以直接代替上面的两个配置注解的处理器映射器和适配器的配置,而且还会加载很多其他的参数配置,比如会加载json的转换器 -->
<!-- <mvc:annotation-driven></mvc:annotation-driven> -->
</beans>
一.非注解的处理器映射器和适配器
非注解的处理器映射器:
①:<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
处理器映射器会将bean的name作为url进行查找(映射路径),需要在配置Handler(Controller)时指定bean的name属性,也就是url
②:<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/queryItems1.action">queryItems1</prop>
<prop key="/queryItems2.action">queryItems2</prop>
</props>
</property>
</bean>
需要在配置的Handler(Controller)bean中设置bean的id属性,id被用在<prop>de标签里面
key即为映射的url访问路径,作用同第一种映射器的Handler的name
多个处理器映射器可以同时存在,
非注解的处理器适配器:
①:<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
配置了该处理器适配器后,Handler(Controller)需要实现Controller接口
②:<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
配置了该处理器适配器后,Handler需要实现HttpRequestHandler接口
配置此种处理器适配器后Handler的编写类似于原始的servlet,利用request进行内部转发或response重定向
多个适配器可以同时存在
二.注解的处理器映射器和适配器
①:注解的处理器映射器:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
②:注解的处理器适配器:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
③:<mvc:annotation-driven></mvc:annotation-driven>
<mvc:annotation-driven></mvc:annotation-driven>可以直接代替上面的两个配置注解的处理器映射器和适配器的配置,
而且还会加载很多其他的参数配置,比如会加载json的转换器,实际开发中会使用这种方式
注意:注解的处理器映射器必须和注解的处理器适配器配对使用
④:<context:component-scan base-package="com.java.controller"></context:component-scan>
设置包扫描,设置后不需要将Handler(Controller)在该文件里面配置成bean了,
它会自动扫描标注了@Controller,@Service,@Repository,@Component注解的类
实际开发中使用这种方式
三.Controller的方法的返回值的几种类型
①:ModelAndView
需要定义一个ModelAndView对象,将数据和映射路径放在里面
②:String
可以在定义的方法的形参里面定义一个Model或者ModelMap对象,用来存放数据,返回的字符串的值就是逻辑视图名(url映射路径,同上)
此种方法可以进行重定向和转发
①:重定向:逻辑视图名前面加上redirect
return "redirect:queryItems.action";
②:内部转发:逻辑视图名前面加上forward
return "forward:queryItems.action";
③:void
可以在定义的方法的形参里面定义request和response,用来存放和读取传输的数据,并进行servlet形式的重定向和转发
也可以通过response指定响应结果(跟servlet差不多)