以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_overview.htm

说明:示例基于Spring MVC 4.1.6。

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

  • 模型封装了应用程序数据,通常它们将由POJO组成。

  • 视图负责呈现模型数据,并在总体上产生HTML输出,客户端的浏览器可以解释。

  • 控制器负责处理用户的请求和建立适当的模型,并将其传递到用于呈现该视图。

DispatcherServlet

Spring Web模型视图控制器(MVC)框架围绕一个处理所有HTTP请求和响应的DispatcherServlet进行设计。Spring Web MVC DispatcherServlet的请求处理工作流程如下图所示:

以下是与DispatcherServlet的传入HTTP请求相对应的事件序列:

  • DispatcherServlet收到HTTP请求后,请咨询HandlerMapping以调用相应的Controller。

  • 该控制器接受请求,并调用基于所使用GET或POST方法相应的服务的方法。服务方法将根据定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet。

  • 所述的DispatcherServlet将帮助从的ViewResolver到拾取该请求的已定义视图。

  • 一旦视图完成,DispatcherServlet将模型数据传递到最终在浏览器上呈现的视图。

所有上述组件即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中的文件将被保留在WebContent/WEB-INF的Web应用程序目录。OK,初始化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.tutorialspoint" /> <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请求。上述控制器有以下重点要注意:

  • 您将在服务方法中定义所需的业务逻辑。您可以根据需要调用此方法内的其他方法。

  • 根据定义的业务逻辑,您将在此方法中创建一个模型(Model)。您可以设置不同的模型属性,并且这些属性将被视图访问以呈现最终结果。此示例创建一个其属性为“message”的模型。

  • 定义的服务方法可以返回一个包含用于渲染模型的视图(View)名称的String 。此示例返回“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}是我们在Controller中设置的属性。您可以在视图中显示多个属性。

Spring MVC-概述(转载实践)的更多相关文章

  1. 01 - spring mvc 概述及配置DispatcherServlet

    1.Spring mvc 基于model2实现,整体框架流程如(图片来自百度): ①web容器接收到http请求,若匹配DispatcherServlet的请求映射路径(web.xml),则容器会交给 ...

  2. Spring MVC概述

    Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速. Spring框架最初由Rod Johnson撰写,并于2003年6 ...

  3. Spring MVC 概述

    [简介] Spring MVC也叫Spring web mvc,属于表现层的框架.SpringMVC是Spring框架的一部分,是在Spring 3.0后发布的. 由以上Spring的结构图可以看出, ...

  4. Spring MVC概述(2)

    1.Spring 为展现层提供基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一. 2.Spring 3.0后全面超越Struts2,成为最优秀的MVC框架. 3.Spring MVC ...

  5. Spring MVC教程——检视阅读

    Spring MVC教程--检视阅读 参考 Spring MVC教程--一点--蓝本 Spring MVC教程--c语言中午网--3.0版本太老了 Spring MVC教程--易百--4.0版本不是通 ...

  6. 【深度分析】:阿里,腾讯面试题 SpringBoot整合Spring MVC

    Java学习总结 SpringBoot整合Spring MVC 1.SpringMVC概述 MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为 ...

  7. 四、Spring——Spring MVC

    Spring MVC 1.Spring MVC概述 Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet负责截获请求并将其分配给响应的处理器处 ...

  8. 玩转单元测试之Testing Spring MVC Controllers

    玩转单元测试之 Testing Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/4311657.html The Spri ...

  9. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers

    就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/43 ...

  10. Spring MVC (JDK8+Tomcat8)

    1 Spring MVC概述 Spring MVC是Spring为表现层提供的基于MVC设计理念的优秀的web框架,是目前最主流的MVC框架之一. Spring3.0后全面超越Struts2,成为最优 ...

随机推荐

  1. gcd&&exgcd&&斐蜀定理

    gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...

  2. openstack 性能优化极致

  3. JS——事件详情(鼠标事件:clientX、clientY的用法)

    鼠标位置 >可视区位置:clientX.clientY 跟着鼠标移动的div案例 代码如下图:   这个案例,运用到前一篇文章中的event事件来处理.获取div的left和top值,当鼠标移动 ...

  4. python 关于文件操作的一些理解

    在用python进行数据处理编程中,往往涉及到文件IO口读写,IO口的读写性能会极大的影响程序的运行时间.在进行文件写入时,一般会存在两种情况.第一种是数据到来马上进行数据写入,即来一条写一条,第二种 ...

  5. Mysql Event 自动分表

    create table TempComments Like dycomments; 上述 SQL语句创建的新表带有原表的所有属性,主键,索引等. 自动分表怎么做呢? 使用上述语句自动创建分表. 那么 ...

  6. 【python】random

    1.random 和其他语言一样,返回大于等于0.小于1的浮点数 2.uniform(a,b) 返回大于等于a.小于等于b的浮点数 3.randint(a,b) 这个很好理解,返回一个介于a和b之间的 ...

  7. python 上手

    1.安装模块 cmd---“pip install [模块名]” 2.爬虫常用模块 requests beautifulsoup4 3.检查已安装的模块 cmd ---"pip list&q ...

  8. PHP获得文件的大小并转换格式

    利用filesize($filename)函数获得一个文件的大小 参数$filename为文件的绝对路径,返回的值是文件的大小字节数. 文件较大的时候看起来不方便,下面是一个格式化方法 functio ...

  9. 使用Visio—UML画类图

    在一个VS工程中,由于类的个数较多,而参数描述不是特别清晰.若此工程的生命周期较长,则有必要对工程进行完整分析,给出完整的文档.需要画出类图,并对每个成员进行详细描述. 一.画出类图 在VIsio中, ...

  10. 多开 MFC线程

    序言:我才编程几年啊!就要处理多线程.对于只写函数的我,这难度简直了!不过MFC的多线程,貌似比较简单,还能处理的了. (1).开MFC多个线程 在视频采集的过程中,如果不使用媒体计数器,会造成主线程 ...