首页 > 代码库 > (三)Spring MVC 注解式
(三)Spring MVC 注解式
非注解方式
处理器适配器:
上一节中使用的处理器适配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,能执行实现了Controller接口的Handler。
还有一个处理器适配器是:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,能执行实现了HttpRequestHandler接口的Handler。
缺点:都必须重写实现的接口的方法,也就是一个Handler中不能有两个方法或两个以上的来处理不同的逻辑。
处理器映射器:
上一节中使用的映射器是:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,可以根据bean的name作为url进行查找。
还有一种处理器映射器叫简单映射器:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping,它的映射方式是直接根据url来的。
缺点:每一个Handler都要去XML中配置url。
注解方式
把非注解方式中的处理器映射器和处理器适配器都换成下面的:
注解映射器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
注解适配器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
即:
1 <bean class="com.springmvc.practice.HelloWorldController" /> 2 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 3 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
至于url,只需要我们在类上用@Controller注解,在方法上用@RequestMapping注解就可以了。这样一个方法就对应一个url,多个方法可以被映射。
开发中
1、我们只需要配置<mvc:annotation-driver/>,就不用再配置适配器和映射器了。即
1 <mvc:annotation-driver/>2 等于 3 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 4 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
2、使用<context:component-scan base-package="com.demo.web.controllersl" />,就不用在xml中一个一个配置Handler的bean了
1 <!-- use-default-filters="false" 只扫描指定的注解 --> 2 <context:component-scan base-package="com.demo.web.controllers" use-default-filters="false" />
现在XML文件配置成这样子:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:util="http://www.springframework.org/schema/util" 7 xmlns:mvc="http://www.springframework.org/schema/mvc" 8 xsi:schemaLocation=" 9 http://www.springframework.org/schema/beans 10 http://www.springframework.org/schema/beans/spring-beans.xsd 11 http://www.springframework.org/schema/util 12 http://www.springframework.org/schema/util/spring-util.xsd 13 http://www.springframework.org/schema/context 14 http://www.springframework.org/schema/context/spring-context.xsd 15 http://www.springframework.org/schema/mvc 16 http://www.springframework.org/schema/mvc/spring-mvc.xsd" > 17 18 <!-- 默认的注解映射的支持 --> 19 <mvc:annotation-driven/> 20 21 <!-- 如果当前请求为“/”时,则转发到“/helloworld/index” --> 22 <mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 23 <!-- 静态资源映射 --> 24 <mvc:resources mapping="/js/**" location="/WEB-INF/js/" /> 25 <mvc:resources mapping="/css/**" location="/WEB-INF/css/" /> 26 <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" /> 27 <mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" /> 28 <mvc:resources mapping="images/**" location="/WEB-INF/images/" /> 29 <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 --> 30 <mvc:default-servlet-handler/> 31 32 <!-- 开启controller注解支持 --> 33 <!-- use-default-filters="false" 只扫描指定的注解 --> 34 <context:component-scan base-package="com.demo.web.controllers" use-default-filters="false"> 35 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 36 </context:component-scan> 37 38 <!-- 视图解析器 --> 39 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 40 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 41 <property name="contentType" value="text/html"/> 42 <property name="prefix" value="/WEB-INF/views/"/> 43 <property name="suffix" value=".jsp"/> 44 </bean> 45 46 </beans>
(三)Spring MVC 注解式