2018-09-27

SpringMVC简介

表示层框架

SpringMVC本身是Spring3.x表示层的一部分,

SpringMVC不强制要求使用jsp页面作为视图层(因为它有视图定位器),

struts1和struts2要求使用jsp页面作为视图层

MVC :Model-View-Control

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

简要概述springmvc

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

优点:

使用简单

编写程序容易

使用灵活

常见的MVC框架比较

1、运行性能上:

    Jsp+servlet > struts1 > spring mvc > struts2+freemarker> struts2,ognl,值栈。

2、开发效率上,基本正好相反

    值得强调的是,spring mvc开发效率和struts2不相上下。

    Struts2的性能低的原因是因为OGNL和值栈造成的。所以,如果你的系统并发量高,可以使用freemaker进行显示,而不是采用OGNL和值栈。这样,在性能上会有相当大得提高。

SpringMVC开发环境搭建步骤

pringmvc项目需在tomcat6.0以上服务器上工作

1、找到开发spring3mvc应用需要使用到的jar文件.

下载spring-framework-3.x.x.RELEASE.zip.

下载完后解压文件,开发spring3mvc应用需要依赖的jar文件在解压目录的lib文件夹下。

不同的应用需要的JAR包是不同的。下面给出了开发spring3mvc程序最少需要的JAR及相关作用

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 的所有jar 包(所有jar 包位于dist 目录下)。

2、编写spring3mvc的配置文件

spring3mvc中,框架是通过DispatcherServlet启动的。

在web.xml中的配置如下:

<servlet>

    <servlet-name>spmvc</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

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

</servlet>

<servlet-mapping> 

    <servlet-name>spmvc</servlet-name> 

    <url-pattern>*.do</url-pattern> 

</servlet-mapping>

简要说明 :

DispatcherServlet 就是一个Servlet ,也是对请求进行转发的核心Servlet 。在这里即所有.do 的请求将首先被DispatcherServlet 处理。

而DispatcherServlet 它要作的工作就是对请求进行分发(也即是说把请求转发给具体的Controller )。

可以简单地认为,它就是一个总控处理器,但事实上它除了具备总控处理理器对请求进行分发的能力外,还与spring 的IOC 容器完全集成在一起,从而可以更好地使用spring 的其它功能。

在这里还需留意DispatcherServlet 命名为 spmvc

< servlet-name > spmvc 因为我们将在在 WEB-INF 目录下建立一个名为 spmvc -servlet.xml 的文件

spring3mvc的配置文件的命名规则: servlet-name-servlet.xml 。

DispatcherServlet在初始化时将会在WEB-INF/下寻找该文件,该文件的配置模版如下:

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 

</beans>

在配置文件spmvc-servlet.xml 中加入如下配置:

<beans>

    helloControl

</beans>

它配置了以下功能:

1、配置 SimpleUrlHandlerMapping(处理器映射器,又叫指令分派器)

在上面的配置文件中, /hello.do 的请求将被 helloController 处理。 “/hello.do”和“helloController” 是变量, 你可以更改。

但是你注意到了吗, hello.do 以 .do 作为后缀名。 如果这里(本文的条件下)你不使用.do 作为后缀名, 就没有程序来处理这个请求了。因为 DispatcherServlet 将收到的请求转交给 SimpleUrlHandlerMapping, DispatcherServlet 收不到的请求,SimpleUrlHandlerMapping 当然也收不到了。

2、你可以在 props 标签内配置多个 prop 标签.

hello.do的请求将交由名字为helloControl的bean本例为com.asm.HelloWord进行处理

例子中使用到com.asm.HelloWord类如下:

package com.asm; 

import org.springframework.web.servlet.mvc.Controller; 

import org.springframework.web.servlet.ModelAndView; 

import javax.servlet.ServletException; 

import javax.servlet.http.HttpServletRequest; 

import javax.servlet.http.HttpServletResponse; 

public class HelloWord implements Controller { 

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception

    {

        ModelAndView mav = new ModelAndView("hello.jsp");

        mav.addObject("message", "Hello World!");

        return mav;

    }

说明 :

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

例子中使用到的web 根目录下/hello.jsp主要代码如下:

<body>

世界,你好!获取值: ${message }<br>

</body>

注: spring3mvc可以直接使用EL表达式访问ModelAndView对象中的属性。

访问HelloWorld应用的url:http://127.0.0.1:8080/springMVC_01_helloword/hello.do

SpringMVC执行流程

1、tomcat一启动,读取web.xml,创建DispatcherServlet对象

2、到项目的WEB-INF下找到主配文件,创建web工厂,一创建web工厂就会创建指令分派器对象、业务层前端控制器对象

3、浏览器发请求,tomcat首先创建request对象接收请求参数,然后看到是请求是.do,根据web.xml配置就把请求交给DispatcherServlet。DispatcherServlet拿到请求后,首先进行截取(/hello.do),然后到web工厂里拿到请求分派器(simpleUrlHandlerMapping),根据请求分派器里的prop的key(截取的请求信息)找到对应的value(后台控制器的id),然后根据value到web工厂里找到对应的控制器对象(相当于struts里的action),自动执行这个对象的handleRequest方法,把request和response注入。返回值类型是ModelAndView(相当于struts里的ActionForward)。最后返回给DispatcherServlet。

DispatcherServlet如何处理返回的结果

1、DispatcherServlet从ModelAndView里拿到view,map。

2、又把从map里拿到的key和value设到request内置对象里。

3、最后服务端跳转到视图组件所标识的页面上

ModelAndView的数据结构

有一个view(存放转向视图的字符串)和一个map(存放结果信息)

SimpleUrlHandlerMapping:处理器/映射器/指令分派器

@Controller 标明的类是:后端控制器(服务器一启动就创建)

创建web工厂创建三个对象

请求分派器对象

后端控制器对象(单例的,1个)

视图定位器对象

异常处理器



先生成bean工厂然后生成session工厂

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容