Spring MVC程序可采用Java配置方式和XML配置方式创建。
使用Java配置方式创建一个Spring MVC程序的步骤如下。
(1)启动Eclipse,创建一个新的Maven项目。
(2)在菜单栏中,选择“File”→“New”→“New Maven Project”。
(3)选中“Create a simple project”复选框,单击“Next”按钮。
(4)在“Group Id”文本框中,输入“com.jeff”,在“Artifact Id”文本框中,输入“hello”,从“Packaging”下拉菜单中选择“war”,单击“Finish”按钮,Maven项目的相关信息如图2-1所示。
▲图2-1 Maven项目的相关信息
打开Maven项目的根目录中的pom.xml配置文件,添加Spring依赖的组件,如Servlet API、Spring Core和Spring MVC等。Maven会将Spring及其依赖的组件自动下载到Eclipse项目的Maven Dependencies目录中。
<build>
<finalName>Spring</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>Javax.servlet</groupId>
<artifactId>Javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.Springframework</groupId>
<artifactId>Spring-context</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.Springframework</groupId>
<artifactId>Spring-Webmvc</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
</dependencies>
AppConfig是一个Spring配置类,它是一个标准的Java类。右击Maven项目文件,选择“New”→“Package”,单击“New Java package”,输入“com.jeff.config”。然后,在新建的包下,创建类,类名为“AppConfig”。在该类中,添加如下代码。
import org.Springframework.context.annotation.ComponentScan;
import org.Springframework.context.annotation.Configuration;
import org.Springframework.Web.servlet.config.annotation.EnableWebMvc;
@Configuration //声明为Spring配置类
@EnableWebMvc //这使Spring能够接受和处理Web请求
@ComponentScan (basePackages = {"com.jeff.controller"}) //扫描指定包
public class AppConfig {
}
ServletInitializer类是Spring的服务端程序Servlet的配置类,它取代了web.xml配置文件。它将由SpringServletContainerInitializer类自动检测,可由任何Servlet自动调用。
ServletInitializer类扩展了AbstractAnnotationConfigDispatcherServletInitializer抽象类和实现所需的方法。
import org.Springframework.Web.servlet. support.
AbstractAnnotationConfig DispatcherServletIn itializer;
public class ServletInitializer extends AbstractAnnotationConfig Dispatcher
ServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {//声明了Spring配置类
return new Class<?>[]{AppConfig.class};
}
@Override
protected String[] getServletMappings() {//声明了Servlet根路径的URL
return new String[]{"/"};
}
}
控制器类是处理HTTP请求的方法的类,带@Controller注解。每个处理程序都使用@RequestMapping进行注解,并提供了调用信息。
在com.jeff.controller包中,创建了一个控制器类HelloWorld和方法hello(),代码如下。
import org.Springframework.stereotype.Controller;
import org.Springframework.Web.bind.annotation.RequestMapping;
import org.Springframework.Web.bind.annotation.ResponseBody;
@Controller
public class HelloWorld {
@RequestMapping("hello")
@ResponseBody
public String hello() {
return "Hello, world!";
}
}
使用/hello路由的请求将调用hello()方法。
具体操作如下。
(1)在Eclipse的“Package Explorer”视图中,选择“hello”文件夹。在菜单栏中,选择“Run”→“Maven install”,在target目录下生成spring.war文件。
(2)将该文件复制到Tomcat的webapps文件夹中。
(3)启动Tomcat,Tomcat将检测到sping.war文件,并自动加载应用程序。
(4)在浏览器中访问http://localhost:8080/spring/hello,程序运行结果如图2-2所示。
▲图2-2 运行结果
http://localhost:8080/spring/hello的组成部分介绍如下。
● http是超文本传输协议。
● localhost是应用程序服务器所在机器域名或IP地址。
● 8080是可以访问应用程序服务器的端口号。
● spring是Web应用程序的上下文。
● /hello是请求映射值。
XML配置方式创建Spring MVC程序的步骤如下。
(1)创建一个新的Maven项目。
(2)使用Maven将Spring及其依赖的组件添加到Maven项目中。打开pom.xml文件并将以下JAR依赖包添加到Maven项目中。注意,此处与2.2.1节的配置略有不同,具体代码如下。
<build>
<finalName>Springxml</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>Javax.servlet</groupId>
<artifactId>Javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.Springframework</groupId>
<artifactId>Spring-context</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.Springframework</groupId>
<artifactId>Spring-Webmvc</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
</dependencies>
(3)创建新的Spring配置文件web.xml。在src/main/webapp文件夹中新建目录WEB-INF,然后在新建的目录中创建配置文件web.xml。web.xml文件的内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<Web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/Javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/Javaee
http://xmlns.jcp.org/xml/ns/Javaee/Web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<!-- 配置加载Spring文件的监听器-->
<!-- 配置文件所在位置 -->
<!-- 编码过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.Springframework.Web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- 配置Spring MVC前端核心控制器 -->
<servlet>
<servlet-name>Springmvc</servlet-name>
<servlet-class> org.Springframework.Web.servlet.DispatcherServlet</
servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/Springmvc-config.xml</param-value>
</init-param>
<!-- 配置服务器启动后立即加载Spring MVC配置文件 -->
<!--将使用名为contextConfigLocation的参数初始化,该参数包含XML配置的路径 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Springmvc</servlet-name>
<!--/:拦截所有请求(除JSP)-->
<url-pattern>/</url-pattern>
通过Servlet映射,我们将Servlet类绑定到一个URL模式,该模式指定它将处理哪些HTTP请求。load-on-startup是一个整数值,指定多个Servlet的加载顺序。因此,如果需要声明多个Servlet,则可以定义它们的初始化顺序。
在web.xml配置文件中配置Spring监听器ContextLoaderListener并启动Web容器后,将自动装配ApplicationContext接口的配置信息,若找不到配置信息,那么应用程序会抛出配置信息异常。
<listener>
<listener-class>org.Springframework.Web.context.ContextLoaderListener</listener
-class>
</listener>
(4)创建新的Spring配置文件springmvc-config.xml。
<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"
xmlns:tx="http://www.Springframework.org/schema/tx"
xsi:schemaLocation="http://www.Springframework.org/schema/Beans
http://www.Springframework.org/schema/Beans/Spring-Beans-4.3.xsd
http://www.Springframework.org/schema/mvc
http://www.Springframework.org/schema/mvc/Spring-mvc-4.3.xsd
http://www.Springframework.org/schema/context
http://www.Springframework.org/schema/context/Spring-context-4.3.xsd">
<!-- 配置包扫描器,扫描@Controller注解的类 -->
<context:component-scan base-package="com.jeff.hellowithxml" />
<!-- 加载注解驱动 -->
<mvc:annotation-driven />
</Beans>
(5)创建一个控制类Hello WorldXml,返回“Hello, world!”信息。
package com.jeff.hellowithxml;
import org.Springframework.stereotype.Controller;
import org.Springframework.Web.bind.annotation.RequestMapping;
import org.Springframework.Web.bind.annotation.ResponseBody;
@Controller
Public class HelloWorldXml {
@RequestMapping("hello")
@ResponseBody
Public String hello() {
return "Hello, world!";
}
}
(6)运行Spring Web应用程序。浏览器中访问http://localhost:8080/springxml/hello,程序运行结果与图2-2一致。