以下内容引用自http://wiki.jikexueyuan.com/project/spring/web-mvc-framework.html

Spring web MVC框架提供了模型-视图-控制(Model-View-Controller(MVC))的体系结构和可以用来开发灵活、松散耦合的Web应用程序的组件。MVC模式使应用程序的不同方面(输入逻辑、业务逻辑和UI逻辑)的分离,同时提供了在这些元素之间的松散耦合。

  • 模型(Model)封装了应用程序数据,并且通常它们由POJO组成。

  • 视图(View)主要用于呈现模型数据,并且通常它生成客户端的浏览器可以解释的HTML输出。

  • 控制器(Controller)主要用于处理用户请求,并且构建合适的模型并将其传递到视图呈现。

DispatcherServlet

Spring Web模型-视图-控制(MVC)框架是围绕DispatcherServlet设计的,DispatcherServlet用来处理所有的HTTP请求和响应。Spring Web MVC DispatcherServlet的请求处理的工作流程如下图所示:

下面是对应于DispatcherServlet传入HTTP请求的事件序列:

  • 收到一个HTTP请求后,DispatcherServlet根据HandlerMapping来选择并且调用适当的控制器。

  • 控制器接受请求,并基于使用的GET或POST方法来调用适当的Service方法。Service方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到DispatcherServlet中。

  • DispatcherServlet会从ViewResolver获取帮助,为请求检取定义视图。

  • 一旦确定视图,DispatcherServlet将把模型数据传递给视图,最后呈现在浏览器中。

上面所提到的所有组件,即HandlerMapping、Controller和ViewResolver是WebApplicationContext的一部分,而WebApplicationContext是带有一些对Web应用程序有必要且有额外特性的ApplicationContext的扩展。

必须的配置

你需要映射你想让DispatcherServlet处理的请求,通过使用在web.xml文件中的一个URL映射。下面是一个显示声明和映射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文件将被保留在你的应用程序的WebContent/WEB-INF目录下。在初始化HelloWebDispatcherServlet时,该框架将尝试加载位于该应用程序的WebContent/WEB-INF目录中文件名为[servlet-name]-servlet.xml的应用程序内容。在这种情况下,我们的文件将是HelloWeb-servlet.xml。

<servlet-mapping>标签表明哪些URLs将被DispatcherServlet处理。这里所有以.jsp结束的HTTP请求将由HelloWeb DispatcherServlet处理。

如果你不想使用默认文件名[servlet-name]-servlet.xml和默认位置WebContent/WEB-INF,通过以下参数进行重写:

<servlet>
<servlet-name>mHelloWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- override default name [servlet-name]-servlet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-myconfig.xml</param-value>
</init-param>

<load-on-startup>1</load-on-startup>
</servlet>

也可以通过在web.xml文件中添加servlet监听器ContextLoaderListener自定义添加其它文件的名称和位置,如下所示:

<web-app...>
....
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/HelloWeb-context.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.xsd
            http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.jsoft.testspring" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> </beans>

提示:其实这就是一个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()方法作为控制器的默认Service方法来处理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)属性定义了Service方法来处理HTTP GET请求。关于上面定义的控制器,这里有以下几个要注意的要点:

  • 你将在一个Service方法中定义需要的业务逻辑。你可以根据每次需求在这个方法中调用其他方法。

  • 基于定义的业务逻辑,你将在这个方法中创建一个模型。你可以设置不同的模型属性,这些属性将被视图访问并显示最终的结果。这个示例创建了一个带有属性“message”的模型。

  • 一个定义的Service方法可以返回一个包含视图名称的字符串用于呈现该模型。这个示例返回“hello”作为逻辑视图的名称。

创建JSP视图

对于不同的展现技术,Spring MVC支持许多类型的视图。这些包括JSP、HTML、PDF、Excel工作表、XML、Velocity模板、XSLT、JSON、Atom和RSS摘要、JasperReports等等。但我们最常使用的是利用JSTL编写的JSP模板。所以让我们在/WEB-INF/hello/hello.jsp中编写一个简单的hello视图:

<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

其中,${message}是我们在控制器内部设置的属性。你可以在你的视图中有多个属性显示。

Spring的Web MVC框架的更多相关文章

  1. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  2. Spring 4 官方文档学习 Web MVC 框架

    1.介绍Spring Web MVC 框架 Spring Web MVC 框架是围绕DispatcherServlet设计的,所谓DispatcherServlet就是将请求分发到handler,需要 ...

  3. 12.Spring——Web MVC框架

    1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web         MVC 框架提供了模型-视 ...

  4. Spring 4 官方文档学习(十一)Web MVC 框架之themes

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-themeresolver ...

  5. Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

    接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...

  6. Spring 4 官方文档学习(十一)Web MVC 框架

    介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...

  7. Spring官方文档翻译——15.1 介绍Spring Web MVC框架

    Part V. The Web 文档的这一部分介绍了Spring框架对展现层的支持(尤其是基于web的展现层) Spring拥有自己的web框架--Spring Web MVC.在前两章中会有介绍. ...

  8. Spring Web MVC框架简介

    Web MVC framework框架 Spring Web MVC框架简介 Spring MVC的核心是`DispatcherServlet`,该类作用非常多,分发请求处理,配置处理器映射,处理视图 ...

  9. Spring与web MVC的整合——Spring的应用上下文管理

    问题1 如何让web容器加载你的web MVC框架 对于基于servlet的web容器来说,遵循的是servlet规范,入口配置文件是web.xml.这类web容器会在启动的时候会而且仅会加载如下三种 ...

随机推荐

  1. ABAP和XML数据格式互相转换的两种方式

    ABAP和XML数据格式互相转换是广大开发人员经常遇到的需求.本文介绍两种方式. 1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_x ...

  2. Java三大特性之继承

    二.类的继承 1. 概念:从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力. 2. 一个不由任何类派生出来的类称为基类,一个派生类最近的上层类称为该类的父类,从某一类派生出来 ...

  3. Vue项目结构梳理

    Vue项目结构图: 简单介绍目录结构 build目录是一些webpack的文件,配置参数什么的,一般不用动 config是vue项目的基本配置文件 node_modules是项目中安装的依赖模块 sr ...

  4. 制作JPEGImages出现的bug

    我用的是下面这个脚本进行改名字: import os import sys path = "/home/bnrc/py-faster-rcnn/data/VOCdevkit2007/VOC2 ...

  5. 苹果面临起诉:App Store 涉嫌垄断吗?

    今日导读 现代社会,手机在手,啥也不愁.购物不用带钱包,网上支付可以搞定一切:旅游懒得背相机,修图 App 帮你打造最美的自己.看直播.学英语.玩游戏.听音乐,我们的生活已经充斥着各类 App.据悉, ...

  6. Perl monks 的 快速回复

    on Jun 20, 2019 at 11:39 UTC ( #11101620=perlquestion: print w/replies, xml ) Need Help?? jimyokl ha ...

  7. Css选择器和JQuery基本编程接口

    使用JQuery之前,首先从官网下载库文件 http://jquery.com/ jquery-2.1.4.js和jquery-2.1.4.min.js,前者是完整无压缩版本,用于开发调试:后者是压缩 ...

  8. consul无client模式

    1.推consul的镜像到生产应用全部服务器. 每个consul的server模式的容器,都需要单独的物理服务器. 主节点:docker run -d --net=host --name=consul ...

  9. 关于web页面优化

    简单汇总了一下web的优化方案(主要的前端优化策略) 减少http请求次数 文件合并(js.css.图片):ps:多个图片合并之后,总体积会变小 内联图片,即data:URL scheme,但容易导致 ...

  10. day17-python之文件操作

    1.内置函数 #!/usr/bin/env python # -*- coding:utf-8 -*- # print(abs(-1)) # print(abs(1)) # # print(all([ ...