依賴
pom.xml ( maven )
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
沒有使用 maven 的需手工導入包 ( 3.0.4 + 版本自由選擇 ) :<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
spring-core-3.0.5.RELEASE.jar
spring-asm-3.0.5.RELEASE.jar
spring-web-3.0.5.RELEASE.jar
spring-beans-3.0.5.RELEASE.jar
spring-context-3.0.5.RELEASE.jar
spring-aop-3.0.5.RELEASE.jar
spring-webmvc-3.0.5.RELEASE.jar
spring-context-support-3.0.5.RELEASE.jar
spring-expression-3.0.5.RELEASE.jar
aopalliance-1.0.jar
commons-logging-1.1.1.jar
web.xml 配置
為使用 Spring MVC,首先需要在 web.xml 中配置 DispatcherServlet。它與 Struts 的過濾器作用類似,主要負責攔截請求并分發給對應的目標來處理。
web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
這種配置方式要求項目中必須存在 WEB-INF/[servlet-name]-servlet.xml 配置文件 ( 如這里的 dispatcher-servlet.xml )。<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
你也可以通過 <init-param> 來自定義指定配置文件的路徑和名稱。
web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<load-on-startup>1</load-on-startup><servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
load-on-startup 配置的是一個非負整數值,表示 Servlet 啟動的優先級別。數值越小,優先級別越高。
0 或 不配置,表示只有當第一次使用該 Servlet 時,容器才會去啟動它 ( 包括加載、實例化、以及調用 init() 方法完成初始化 )。
1 或 > 1,表示 Servlet 將隨運用程序的啟動而啟動。
<url-pattern>*.action</url-pattern>
表示攔截所有 .action 的請求,并交由 Spring MVC 來處理,非 .action 的請求,將不由 Spring MVC 處理。
多個值之間用英文的逗號 “,” 分隔,需要注意的是,值與值之間不能存在空格:<url-pattern>*.action,*.htm</url-pattern>
<url-pattern>/</url-pattern>
表示攔截所有請求,并全部交由 Spring MVC 來處理。
Spring MVC 配置文件配置
spring-mvc.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">
<!-- 自動掃描的包 -->
<context:component-scan base-package="org.lychie.tutorial.**.controller" />
<!-- 開啟注解支持 -->
<mvc:annotation-driven/>
<!-- 視圖處理 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/pages/" />
<!-- 后綴 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
<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">
<!-- 自動掃描的包 -->
<context:component-scan base-package="org.lychie.tutorial.**.controller" />
<!-- 開啟注解支持 -->
<mvc:annotation-driven/>
<!-- 視圖處理 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/pages/" />
<!-- 后綴 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
Simple Example
HelloWorldController.java
package org.lychie.tutorial.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorldController {
@RequestMapping("/hello_world")
public String execute(){
return "hello_world_page";
}
}
訪問方式:/hello_world.actionimport org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorldController {
@RequestMapping("/hello_world")
public String execute(){
return "hello_world_page";
}
}
頁面結果:WEB-INF/pages/hello_world_page.jsp ( 與 spring-mvc.xml 配置文件中的配置相關聯,具體是:前綴 + 方法返回值 + 后綴 )
@Controller
標識這是一個控制器,與 Struts 的 Action 作用相似。被標識的類具有處理請求的能力。
@RequestMapping
映射方法訪問的 URL 地址,具體的使用放到下一章節中。