首页 > 代码库 > (三)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 注解式