一、预备工作
- 创建Maven webapp工程。
- 使用Maven配置了需要使用的Jar包,Spring基于4.0.0版本。
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>uestc.shen</groupId>
<artifactId>springMVC</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springMVC Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<slf4j.version>1.7.6</slf4j.version>
<spring.version>4.0.0.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
二、配置DispathcherServlet
在/WEB-INF/web.xml中作如下代码调整:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 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">
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置DispatcherServlet的一个初始化参数,配置SpringMVC配置文件的位置和名称 -->
<!-- 实际上也可以不通过ContextConfigLocation 来配置SpringMVC的配置文件,而使用默认的.
默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml
-->
<!-- <init-param> -->
<!-- <param-name>contextConfigLocation</param-name> -->
<!-- <param-value>classpath:springmvc.xml</param-value> -->
<!-- </init-param> -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 所有请求均被springDispathcerServlet响应 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
(1)其中Maven为我们创建的事基于web-app2.3版本,我们手动更改成2.4或更高版本,此处基于2.5版本,http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
(2)配置一个Servlet,名字自己起,class为org.springframework.web.servlet.DispatcherServlet
,DispathcherServlet负责接收请求,查找对应的Controller,接收返回值,显示视图,给客户反应,主要负责整体流程的控制。
(3)配置Servlet拦截的URL。
三、编写DispatcherServlet的配置
在web.xml中的指定位置,或默认位置,添加一个新的xml文件,作为DIspatcherServlet的配置文件,其中包括beans、context、mvc三种XSD命名空间。
内容如下:
<?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:context="http://www.springframework.org/schema/context"
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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 配置自动扫描的包 -->
<context:component-scan
base-package="com.shen.springmvc"></context:component-scan>
<!-- 配置视图解析器:如何把 handler 方法返回值解析为实际的物理视图 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
<`
bean>
</beans>
(1)配置Spring的自动扫描功能,<context:component-scan base-package="com.shen.springmvc"></context:component-scan>
,扫描指定包下的所有类文件,解析成bean。
(2)配置一个指定的bean,InternalResourceViewResolver
是一种视图解析器,把handler方法返回值(String类型)解析成实际的物理视图(JSP、JSTL、HTML)。
四、编写处理请求的处理器
(1)创建符合命名规则的包名,如com.shen.springmvc.handlers
(2)创建一个类,负责处理请求的一个Controller,示例如下:
@Controller
public class HelloWorld {
/**
* 1.使用@RequestMapping 注解来映射请求的URL
* 2.返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewReslover 视图解析器,会做如下的解析:
* 通过prefox + returnVal + suffix 这样的方式得到实际的物理视图,然后做转发操作
* /WEB-INF/views/ + success + .jsp
*/
@RequestMapping("/helloworld")
public String hello() {
System.out.println("hello world!");
return "success";
}
}
说明:
(1)使用@Controller注解,标识该类是一个bean,其次我们知道他是一个Controller,使用@Controller而不是@Component。
(2)hello方法负责响应什么URL呢?使用@RequestMapping注解,value为响应的URL,因为可能响应多个URL,则是数组的形式,@RequestMapping(value = { "/helloworld1", "/helloworld2" })
,若只有一个,则可以直接@RequestMapping("/helloworld")
。
(3)在注释中写道,返回值为String类型,被视图解析器解析成前缀+retVal+后缀
,做转发操作。
五、编写视图
在/WEB-INF/下创建视图,其中包括视图解析器需要的视图。
/springMVC/src/main/webapp/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="helloworld">Hello World</a>
</body>
</html>
/springMVC/src/main/webapp/WEB-INF/views/success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>Page success !</h4>
</body>
</html>
六、测试代码
采用Tomcat服务器的形式运行,不多说。