在web项目中配置springmvc主要包括三个步骤
- 添加所需的jar包
- 配置web.xml
- 配置servlet-name-servlet.xml
一、添加所需的jar包
在spring 的官方API文档中给所有的包的作用做了概述,这里列出几个常用的:
1、org.springframework.aop-{vision}.jar:与Aop编程相关的包
2、org.springframework.beans-{vision}.jar:提供了简洁操作bean的接口
3、org.springframework.context-{vision}.jar:构建在bean基础上,又来处理资源文件与国际化
4、 org.springframework.core-{vision}.jar:spring核心包
5、org.springframework.web-{vision}.jar:核心包,提供web层接口
6、org.springframework.web.servlet-{vision}.jar:web层的一个具体实现包,DispatcherServlet就位于该包中
jar包的添加利用maven自动实现,具体的代码如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--spring的版本信息-->
<spring.version>3.2.2.RELEASE</spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--org.springframework.web.servlet-{vision}.jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webMVC</artifactId>
<version>${spring.version}</version>
</dependency>
二、配置web.xml
springMVC的核心是DispatcherServlet,使用springMVC的第一步就是将下面的DispatchServlet配置到web.xml,其中servlet-name属性非常重要,默认情况下,DispatchServlet会加载servlet-name-servlet.xml的文件,在本次例子中默认会加载WEN-INF目录下的spring-servlet.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--定义了web应用的名称-->
<display-name>MavAppDemo</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
除了上述加载默认servlet-name-servlet.xml的文件的配置方式,还可以通过init-param标签来设置DispatchServlet具体加载的xml文件。(其实load-on-startup不加并不会出错,但是如果要修改servlet-name-servlet.xml的配置位置或名字,init-param一定要放在load-on-startup前面,否则xml校验出错)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--定义了web应用的名称-->
<display-name>MavAppDemo</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
classpath*:/spring/spring-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
简要说明:
DispatcherServlet就是一个Servlet,是对请求进行转发的核心Servlet,本例中所有.do的请求将首先被DispatcherServlet处理,而DispatcherServlet它要作的工作就是对请求进行分发(也即是说把请求转发给具体的Controller)。可以简单地认为,它就是一个总控处理器,事实上它除了具备总控处理理器对请求进行分发的能力外,还与spring的IOC容器完全集成在一起,从而可以更好地使用spring的其它功能。
三、servlet-name-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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 添加注解驱动 -->
<mvc:annotation-driven />
<!-- 默认扫描的包路径 -->
<context:component-scan base-package="com.www.xww" />
</beans>
mvc:annotation-driven 是springMVC中@Controller分发请求所必须的,这是一种简写模式,完全可以通过手动配置DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter这两个bean来代替。
补充:
HandlerMapping 是Springmvc用来找到并保存url请求和处理函数间的mapping关系,包括SimpleUrlHandlerMapping(通过配置文件,把一个URL映射到Controller)和DefaultAnnotationHandlerMapping(通过注解,把一个URL映射到Controller类上)。以后者为例,它的作用是扫描当前所有已经注册的spring beans中的@requestmapping标注以找出url 和 handler method处理函数的关系并予以关联。
Handleradapter 是Springmvc用来实际调用处理函数的。以AnnotationMethodHandlerAdapter为例 ,DispatcherServlet根据handlermapping找到url请求对应的处理函数后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。
通过以上三个步骤就可以基本实现一个spring的功能。还有一些功能的配置见
idea 中webapp项目的springMVC配置(2)