Spring MVC配置

一、传统方式配置Spring MVC

(1)导入jar包

        需要导入如下的jar包

        junit-3.8.1.jar
        spring-core-3.0.5.RELEASE.jar
        commons-logging-1.1.1.jar
        spring-context-3.0.5.RELEASE.jar
        spring-expression-3.0.5.RELEASE.jar
        spring-context-support-3.0.5.RELEASE.jar
        spring-aop-3.0.5.RELEASE.jar
        aopalliance-1.0.jar
        spring-tx-3.0.5.RELEASE.jar
        spring-asm-3.0.5.RELEASE.jar
        spring-beans-3.0.5.RELEASE.jar
        spring-web-3.0.5.RELEASE.jar
        spring-webmvc-3.0.5.RELEASE.jar
        jstl-1.2.jar
        servlet-api-2.5.jar
        jsp-api-2.1.jar

(2)配置web.xml

        web.xml中完整代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 id="WebApp_ID" version="2.5">
 <display-name>Spring3mvc</display-name>
 <!-- 添加spring3控制器及映射规则 -->
 <servlet>
  <servlet-name>springMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springMVC</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 <!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 <!-- 默认跳转到根目录下的页面,在这里为index.jsp -->
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

        配置介绍:

    1. 关于<servlet-name>springMVC</servlet-name>

      此项配置用于配置对应的Servlet的配置文件的名称,具体规则为“servlet-name的标签值-servlet.xml”,如本示例会对应一个“springMVC-servlet.xml”的配置文件。

      如果想打破这种默认约定,可以参照如代码段进行配置:

        <!-- 添加spring3控制器及映射规则 -->
      <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:springservlet-config.xml</param-value>
      </init-param>
       <load-on-startup>1</load-on-startup>
      </servlet>

      其中,“classpath:”代表根路径是类路径。

    2. 关于<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      此项配置用于配置前置控制器,默认由前置控制器接收所有的请求,然后调用相应的Controller和Action,解析和渲染指定的视图并返回相应。

    3. 关于<load-on-startup>1</load-on-startup>

      此项配置用于配置启动顺序,正常的取值范围是:负整数、0-5。

      当为正数时,数值越小,优先级越高。

      1代表让这个Servlet随Servletp容器一起启动。

    4. 关于<url-pattern>/</url-pattern>

      此项配置用于配置servlet路径请求映射。

      “/”:代表servlet路径是请求URL去掉context路径,且路径信息为null。

      “/xxx”:代表以“/xxx结尾的路径映射”。

      “*.xxx”:代表以“xxx”结尾的扩展名映射。如*.do、*.jsp、*.html。如果配置为多项,可以用英文逗号隔开。

      “”:用于指定精确映射应用程序contextroot的URL模式。如:http://ip:port/contextroot/

    5. <param-value>/WEB-INF/applicationContext.xml</param-value>

      applicationContext.xml是spring的配置文件,常用“applicationContext+名称.xml”的方式来进行命名。

      此项配置用于配置applicationContext.xml的路径。

    6. 关于存放路径的问题

      常见的存放路径有两个,一个是类路径,一个是WEB-INF目录下。

      类路径的示例:<param-value>classpath:springservlet-config.xml</param-value>

      WEB-INF路径示例:<param-value>/WEB-INF/springservlet-config.xml</param-value>

            在有些情况下,xml文件默认是存放在WEB-INF中,所以在配置中可以省略"/WEB-INF/"。        

(3)配置springMVC-servlet.xml

        spring-servlet.xml这个名字是因为上面web.xml中<servlet-name>标签配的值为spring

        <servlet-name>spring</servlet-name>

        命名规则为:<servlet-name>的标签值-servlet.xml

        如果改为如下:

        <servlet-name>springmvc</servlet-name>

        则对应的文件名则为springmvc-servlet.xml。

        spring-servlet.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:p="http://www.springframework.org/schema/p" 
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:util="http://www.springframework.org/schema/util"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util
  http://www.springframework.org/schema/util/spring-util.xsd
  http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/mvc
  http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
    
    <!-- 默认的注解映射的支持 -->  
    <mvc:annotation-driven/>
      
    <!-- 静态资源映射 -->
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
    <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
    <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
    <mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
    <mvc:resources mapping="images/**" location="/WEB-INF/images/" />
    <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
    <mvc:default-servlet-handler/>
    <!-- 开启controller注解支持 -->
    <!-- use-default-filters="false" 只扫描指定的注解 -->
    <context:component-scan base-package="com.uni2uni.action" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
       <property name="contentType" value="text/html"/>        
       <property name="prefix" value="/WEB-INF/views/"/>
       <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>

        配置介绍:

        a.关于<mvc:annotation-driven/>

        此项配置用于开启默认注解的支持。它等效于如下配置:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

        b.关于配置静态资源映射

        <mvc:default-servlet-handler/>这行代码用于配置静态资源映射,它等效于如下配置:

<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>  
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>  
<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>

        当实际项目中有新增的配置时,就需要根据实际情况进行扩展了。

        c.关于配置注解扫描

        <context:component-scan></context:component-scan>用于配置扫描指定包中类中声明的注解。

        配置注解扫描的配置方式如下所示:

        <context:component-scan base-package="要扫描的包的包名" ></context:component-scan>

        常用的注解有:

      1. @Controller

        声明Action组件

      2. @Service

        声明Service组件

      3. @Repository

        声明Dao组件

      4. @Component 

        泛指组件。

      5. @RequestMapping("/menu") 

        请求映射

      6. @Resource 

        用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 

      7. @Autowired

        用于自动化注入,(srping提供的) 默认按类型装配 

      8. @Transactional( rollbackFor={Exception.class})

        事务管理

      9. @ResponseBody

        将HTTP请求正文转换为适合的HttpMessageConverter对象。

      10. @Scope("prototype") 

        设定bean的作用域

        如果是多个包名,可以用英文逗号隔开;

        可以用*来进行包名的匹配,如com.uni2uni.*;

        本例中“use-default-filters”属性默认为true。此时,会扫描指定包下所有的@Component类,并注册成bean。

        当不需要扫描这么大粒度的包时,可以将此属性设置为false,并使用<context:exclude-filter>和<context:include-filter>标签指定要排除的或包括的类型。

        use-default-filters="false"的情况下,<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描。

        d.关于配置视图解析

        在本例中,设定视图的路径为”WEB-INF/views“,视图文件的后缀名为”.jsp“。

        关于配置视图解析及使用了解即可,后续会详细介绍。    

二、Maven方式配置Spring MVC

(1)在Maven项目中配置Spring mvc

        pom.xml完整代码如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.uni2uni.myapp</groupId>
  <artifactId>testspring</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>testspring Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>3.8.1</version>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-tx</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-asm</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-beans</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <!-- end spring 核心依赖包 -->

  <!-- start spring mvc -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>3.0.5.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>
  <!-- START SERVLET -->
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>2.5</version>
   <scope>provided</scope>
  </dependency>
  <dependency>
   <groupId>javax.servlet.jsp</groupId>
   <artifactId>jsp-api</artifactId>
   <version>2.1</version>
   <scope>provided</scope>
  </dependency>
 </dependencies>
 
  <build>
    <finalName>testspring</finalName>
  </build>
</project>

三、知识扩展

(1)重要的接口和类介绍     

        DispatcherServlet:前置控制器,默认会接收全部请求。

        HandlerMapping接口:用于处理请求的映射。

        DefaultAnnotationHandlerMapping:HandlerMapping接口的实现,用于把一个URL映射到具体的Controller类上。

        HandlerAdapter接口:用于处理请求到Action的映射。

        AnnotationMethodHandlerAdapter:HandlerAdapter接口的适配器,用于把一个URL请求映射到对应Controller类的Action上。

        ViewResolver接口:用于解析View。

        InternalResourceViewResolver:ViewResolver接口的实现,用于把ModelAndView的逻辑视图名解析为具体的View。

(2)Spring MVC的处理流程

        Spring MVC配置_第1张图片

你可能感兴趣的:(Spring MVC配置)