引言

1.MVC :Model-View-Control

框架性质的C 层要完成的主要工作:封装web 请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。

2. 简要概述springmvc

Spring C 层框架的核心是 DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即 使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。 Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。

一、入门实例

1. 搭建环境

在spring 的官方API 文档中,给出所有包的作用概述,现列举常用的包及相关作用:

org.springframework.aop-3.0.5.RELEASE.jar :与Aop 编程相关的包

org.springframework.beans-3.0.5.RELEASE.jar :提供了简捷操作bean 的接口

org.springframework.context-3.0.5.RELEASE.jar :构建在beans 包基础上,用来处理资源文件及国际化。

org.springframework.core-3.0.5.RELEASE.jar :spring 核心包

org.springframework.web-3.0.5.RELEASE.jar :web 核心包,提供了web 层接口

org.springframework.web.servlet-3.0.5.RELEASE.jar :web 层的一个具体实现包,DispatcherServlet也位于此包中。

后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。

2. 编写HelloWorld 实例

步骤一、建立名为springMVC_01_helloword ,并导入上面列出的jar 包。

步骤二、编写web.xml 配置文件,代码如下:

Java代码

  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version=< span="">"2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6. spmvc
  7. <servlet-< span="">class>
  8. org.springframework.web.servlet.DispatcherServlet
  9. class>
  10. 1
  11. spmvc
  12. *.do

简要说明 :DispatcherServlet 就是一个Servlet ,也是对请求进行转发的核心Servlet 。在这里即所有.do 的请求将首先被DispatcherServlet 处理,而DispatcherServlet 它要作的工作就是对请求进行分发(也即是说把请求转发给具体的Controller )。可以简单地认为,它就是一个总控处理器,但事实上它除了具备总控处理理器对请求进行分发的能力外,还与spring 的IOC 容器完全集成在一起,从而可以更好地使用spring 的其它功能。在这里还需留意 < servlet-name > spmvc ,下面步骤三会用到。

步骤三、建立 spmvc-servlet.xml 文件,它的命名规则: servlet-name-servlet.xml 。它的主要代码如下:

Xml代码

  
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. >
  3. <beans>
  4. <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  5. <property name="mappings">
  6. <props>
  7. <prop key="/hello.do">helloControlprop>
  8. props>
  9. property>
  10. bean>
  11. <bean id="helloControl" class="com.asm.HelloWord">bean>
  12. beans>

说明: hello.do 的请求将给名为 helloControl 的 bean 进行处理。

步骤四、完成 HelloWord.java 的编写,代码如下:

Java代码

  
  1. package com.asm;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.Controller;
  6. public class HelloWord implements Controller {
  7. public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
  8. throws Exception {
  9. ModelAndView mav = new ModelAndView("hello.jsp");
  10. mav.addObject("message", "Hello World!");
  11. return mav;
  12. }
  13. }

说明 :ModelAndView 对象是包含视图和业务数据的混合对象,即是说通过此对象,我们可以知道所返回的相应页面(比如这里返回hello.jsp 页面),也可以在相应的页面中获取此对象所包含的业务数据(比如这里message-hello worrld )。

步骤五、在当前项目web 根目录下编写hello.jsp ,主要代码如下:

< body >

世界,你好!

获取值: ${message }

步骤六:输入 .../hello.do 进行测试。

4. 简析spring mvc 工作原理

(1 )启动服务器,根据web.xml 的配置加载前端控制器(也称总控制器) DispatcherServlet 。在加载时、会完成一系列的初始化动作。

(2 )根据servlet 的映射请求(上面的helloWorld 实例中针对.do 请求),并参照“控制器配置文件”(即spmvc-servlet.xml 这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比如上例会分发给HelloWorld 控制器进行处理)

(3 )后端控制器调用相应的逻辑层代码,完成处理并返回视图对象( ModelAndView )给前端处理器。

(4 )前端控制器根据后端控制器返回的 ModelAndView 对象,并结合一些配置(后面有说明),返回一个相应的页面给客户端。

小结 :这种Front Controller 模式常应用在主流的web 框架中,比如典型的struts1.x 框架.Front Controller 模式:所有请求先交给一个前端处理器(总控处理器)处理,然后前端处理器会参照一些配置文件再把具体的请求交给相应的后端处理器。后端处理器调用逻辑层代码,并根据逻辑返回相应的视图对象给前端控制器。然后前端控制器再根据视图对象返回具体的页面给客户端(提示:和spring mvc 一样,在struts1.x 中前端控制器是Servlet, 而在struts2 中前端控制器是Filter )。 概述 Front Controller 模式:前端控制器预处理并分发请求给后端控制器,后端控制器进行真正的逻辑处理并返回视图对象,前端控器器根据视图对象返回具体页面给客户端。

5. 初识spring mvc 的视图

在前面的HelloWorld 实例中,在HelloWorld.java 中返回 ModelAndView mav = new ModelAndView( "hello.jsp" ) 参数为 hello.jsp ,它会对应于当前项目根目录下的 hello.jsp 页面。但 spring mvc 为我们提供了一个特别的视图定位方式,下面改进前面的 HelloWord 实例:

改进一 :在 spmvc-servlet.xml 中增加如下代码:

Xml代码

  
  1. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  2. <property name="prefix" value="/WEB-INF/page/" />
  3. <property name="suffix" value=".jsp" />
  4. bean>

改进二 :在HelloWorld.java 重新定义返回的 ModelAndView 对象,即把 ModelAndView mav = new ModelAndView( "hello.jsp" ) 改为 ModelAndView mav = new ModelAndView( "hello" )

改进三 :在/WEB-INF/page 目录下建立hello.jsp 页面

进行上面三个改进操作后,重新访问hello.do 会访问到WEB-INF/page/hello.jsp 页面。

简析视图定位 :当返回 ModelAndView 对象名称为hello 时,会给hello 加上前后缀变成

/WEB-INF/page/hello.jsp 。因此在给前后缀赋值时,应特别注意它和返回的 ModelAndView 对象能否组成一个正确的文件全路径。在前面的“简析spring mvc 工作原理(4) ”点中提到在根据ModelAndView 对象返回页面时,会结合一些配置。这里就是结合了视图定位方式,给viewName 加上前后缀进行定位。

【编辑推荐】

Struts VS Spring两种MVC框架比较

Spring MVC框架的高级配置

Spring MVC框架的高级配置(上)

Spring MVC框架的高级配置(下)

设计REST风格的Java MVC框架:WebWind

【责任编辑: 金贺 TEL:(010)68476606】

Spring-MVC入门(一):入门实例相关推荐

  1. Spring MVC 4快速入门Maven原型已改进

    Spring Boot使Spring入门非常容易. 但是仍然有人对不使用Spring Boot并以更经典的方式引导应用程序感兴趣. 几年前,我创建了一个原型(早于Spring Boot),简化了引导S ...

  2. Spring MVC测试框架入门–第1部分

    最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spring MVC代码" ...

  3. Spring MVC测试框架入门–第2部分

    这个迷你系列的第一个博客介绍了Spring MVC测试框架,并展示了其在单元测试Spring MVC Controller类中作为控制器而不是POJO进行单元测试的用途. 现在是时候讨论使用框架进行集 ...

  4. Spring MVC 教程,快速入门,深入分析

    目录  转载自:http://elf8848.iteye.com/blog/875830 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf 点击打开链接 SpringMVC核 ...

  5. Spring mvc 3.0 入门及应用

    [一]Spring应用 Spring 支持json格式的jar jackson-all-1.7.3  http://jackson.codehaus.org/ Spring MVC 3.x annot ...

  6. Spring MVC 教程,快速入门,深入分析【转】

    2019独角兽企业重金招聘Python工程师标准>>> 转自:赵磊 地址:http://elf8848.iteye.com 目录  一.前言 二.spring mvc 核心类与接口 ...

  7. [spring mvc]Hello World入门

    1.新建项目 File->New->Other,选择Dynamic web project: 项目建好之后,目录结构如下: 2.WEB-INF/web.xml 中配置 dispatcher ...

  8. Spring MVC 4快速入门Maven原型得到了改进–更多Java 8功能

    对于所有有兴趣在没有Spring Boot的情况下快速引导Spring 4应用程序的开发人员,请检查刚刚更新的我的Spring MVC 4 Quickstart Maven原型. 原型已经将Java ...

  9. Spring MVC验证器应用实例(超详细)

    本节使用一个应用 springMVCDemo08 讲解 Spring 验证器的编写及使用.该应用中有一个数据输入页面 addGoods.jsp,效果如图 1 所示. 有一个数据显示页面 goodsLi ...

  10. java 处理物料清单_JAVA Spring MVC 物料清单BOM 展开实例

    相关概念:BOM 展开.LIST对象.JSON 字符串.JSON 对象 最近在开发一个管理软件,涉及到物料清单(又称产品结构)BOM管理的相关内容,其中之一就是BOM 的展开.BOM的展开一般有纵向优 ...

最新文章

  1. InnoDB Master Thread I/O Rate详解
  2. ArcGIS Engine开发前基础知识(2)
  3. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波
  4. 利用mvc 模型绑定验证方法验证普通类对象数据是否合法
  5. SQL2K数据库开发十五之表操作查看表中的数据
  6. vscode vim快捷键失效_VIM真的好用吗?到底要不要学习VIM?
  7. python中的struct模块
  8. 6、numpy之文件保存与加载
  9. YARN——NM重启后的任务恢复
  10. Intellij Idea Database schemas显示
  11. 使用腾讯云sms实现短信验证功能
  12. 【UOJ #390】【UNR #3】百鸽笼(指数型生成函数,二项式定理)
  13. 微机原理与接口技术[第三版]——第五章课后习题答案
  14. php考试报名,报名系统
  15. 3分钟秒懂 物理学家进一步逼近绝对零度
  16. 使用tushare筛选某一天的ST股票
  17. 浅谈 MVC与三层架构
  18. 2021年考博英语复习攻略!
  19. SPEC2006详细参数和测试过程常见问题处理总结(附实例操作)
  20. 误报率、漏报率、准确率和召回率(虚警率、漏警率)

热门文章

  1. 9273:PKU2506Tiling
  2. Web开发人员常备连接总结
  3. 测试思想-测试设计 测试用例设计之正交法
  4. PEInfo编程思路讲解03 - 工具篇03|解密系列
  5. 沃顿商学院:价格杠杆,企业竞争的底层逻辑
  6. 产品问答 | PM该陪技术加班吗?要怎样培养技术认知?
  7. 分分钟收入上万 她做到了网红最难的粉丝沉淀
  8. 脑洞一下 | 产品经理是如何用一张小票推算店面房租的?
  9. 产品功能上线前,如何高效的埋点?
  10. 微课堂 | 欢迎加入核心交流群,往期微课堂的嘉宾都在这里