spring mvc框架是一个开源的java平台,为开发强大的基于java的web应用程序提供全面的基础架构支持非常容易和非常快速。
spring框架最初由rod johnson撰写,并于2003年6月根据apache 2.0许可证首次发布。
本教程是基于2015年3月发布的spring framework版本4.1.6编写的。
spring web mvc框架提供了mvc(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的web应用程序的组件。 mvc模式导致应用程序的不同方面(输入逻辑,业务逻辑和ui逻辑)分离,同时提供这些元素之间的松散耦合。
spring web模型 - 视图 - 控制器(mvc)框架是围绕dispatcherservlet设计的,它处理所有的http请求和响应。 spring web mvc dispatcherservlet的请求处理工作流如下图所示:

以下是对应于到dispatcherservlet的传入http请求的事件顺序:
所有上述组件,即:handlermapping,controller和viewresolver是webapplicationcontext的一部分,它是普通applicationcontext的扩展,带有web应用程序所需的一些额外功能。
需要通过使用web.xml文件中的url映射来映射希望dispatcherservlet处理的请求。 下面是一个示例来显示helloweb dispatcherservlet示例的声明和映射:
<web-app id="webapp_id" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>spring mvc application</display-name>
<servlet>
<servlet-name>helloweb</servlet-name>
<servlet-class>
org.springframework.web.servlet.dispatcherservlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>helloweb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
</web-app>
web.xml文件将保存web应用程序的webcontent/web-inf目录。在helloweb dispatcherservlet初始化时,框架将尝试从位于应用程序的webcontent/web-inf目录中的名为[servlet-name]-servlet.xml的文件加载应用程序上下文。在这个示例中,使用的文件将是helloweb-servlet.xml。
接下来,<servlet-mapping>标记指示哪些url将由dispatcherservlet处理。 这里所有以.jsp结尾的http请求都将由helloweb dispatcherservlet处理。
如果不想使用默认文件名为[servlet-name]-servlet.xml和默认位置为webcontent/web-inf,可以通过在web.xml文件中添加servlet侦听器contextloaderlistener来自定义此文件名和位置 如下:
<web-app...>
<!-------- dispatcherservlet definition goes here----->
....
<context-param>
<param-name>contextconfiglocation</param-name>
<param-value>/web-inf/helloweb-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.contextloaderlistener
</listener-class>
</listener>
</web-app>
现在来看看helloweb-servlet.xml文件的必需配置,放在web应用程序的webcontent/web-inf目录中:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-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="com.h3" />
<bean class="org.springframework.web.servlet.view.internalresourceviewresolver">
<property name="prefix" value="/web-inf/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
以下是有关helloweb-servlet.xml文件的重点说明:
[servlet-name]-servlet.xml文件将用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义。
<context:component-scan ...>标签将用于激活spring mvc注释扫描功能,允许使用@controller和@requestmapping等注释。
internalresourceviewresolver将定义用于解析视图名称的规则。根据上面定义的规则,hello的逻辑视图将委托给位于/web-inf/jsp/hello.jsp这个视图来实现。
下一节将演示如何创建实际组件。即:控制器,模型和视图。
dispatcherservlet将请求委派给控制器以执行特定于其的功能。@controller注释指示特定类充当控制器的角色。@requestmapping注释用于将url映射到整个类或特定处理程序方法。
@controller
@requestmapping("/hello")
public class hellocontroller{
@requestmapping(method = requestmethod.get)
public string printhello(modelmap model) {
model.addattribute("message", "hello spring mvc framework!");
return "hello";
}
}
@controller注释将类定义为spring mvc控制器。这里@requestmapping的第一个用法表示此控制器上的所有处理方法都与/hello路径相关。 下一个注释@requestmapping(method = requestmethod.get)用于声明printhello()方法作为控制器的默认服务方法来处理http get请求。可以定义另一个方法来处理同一url的任何post请求。
可以以另一种形式在上面的控制器中编写,在@requestmapping中添加其他属性,如下所示:
@controller
public class hellocontroller{
@requestmapping(value = "/hello", method = requestmethod.get)
public string printhello(modelmap model) {
model.addattribute("message", "hello spring mvc framework!");
return "hello";
}
}
value属性指示处理程序方法映射到的url,method属性定义处理http get请求的服务方法。关于以上定义的控制器,需要注意以下几点:
spring mvc支持许多类型的视图用于不同的表示技术。包括 - jsp,html,pdf,excel工作表,xml,velocity模板,xslt,json,atom 和 rss 源,jasperreports等。但最常见的是使用jspl编写的jsp模板,这里使用的是jsp模板,并在/web-inf/hello/hello.jsp中写一个简单的hello视图:
<html>
<head>
<title>hello spring mvc</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
这里${message}是在controller中设置的属性。可以在视图中显示多个属性。