Spring MVC的初始化:

  WEB容器加载后,通过使用DispatcherServlet拦截器加载IOC容器到WEB容器中,并通过ContextLoderListener将其初始化,

因为Spring MVC是建立在IOC容器基础上,这样才能建立起MVC框架运行机制,从而响应从Web容器传递的HTTP请求;并且通过实

现ServletContextListener接口实现了与Servlet生命周期的结合,获取的实例WebApplicationContext被绑定到ServletContext

上,在IOC容器初始化后,DispatcherServlet开始初始化,建立自己的上下文来持有Bean

  Spring MVC的运作:

  是以DispatcherServlet为中心进行控制的,IOC容器初始化时,控制器Controller和HTTP请求之间的映射关系会被载入到HandlerMapping中,

当MVC框架接收到HTTP请求时,DispatcherServlet会根据URL请求信息在HandlerMapping中进行查询,从而得到对应的HandlerExecutionChain,

并获得了对应的Controller,该Controller会完成请求的响应动作,生成需要的ModelAndView对象,该对象包含Model模型数据和视图对象,

DispatcherServlet把获得的模型数据交给特定的视图对象,在视图对象的render方法中完成视图呈现; M对应ModelAndView的生成,C对应

DispatcherServlet和用户业务逻辑有关的handler实现

因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applicationContext.xml是如何区别的,其实如果直接使用SpringMVC是可以不添加applicationContext.xml文件的。
使用applicationContext.xml文件时是需要在web.xml中添加listener的:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
而这个一般是采用非spring mvc架构,如使用struts之类而又想引入spring才添加的,这个是用来加载Application Context。
如果直接采用SpringMVC,只需要把所有相关配置放到xxx-servlet.xml中就OK了。

pring MVC和Struts2的比较的优点
1 spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。
2 机制:spring mvc的入口是servlet,而struts2是filter
3 spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action
4 struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
5 spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。
struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;
而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
6 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。送上一段代码:

Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。
它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。
所以这也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的DispatcherFilter的前面的原因。因为,它们需要在请求被Struts2框架处理之前,做一些前置的工作。
当Filter被调用,并且进入了Struts2的DispatcherFilter中后,Struts2会按照在Action中配置的Interceptor Stack中的Interceptor的顺序,来调用Interceptor。

web.xml 的加载顺序是:context- param -> listener -> filter -> servlet
servlet、filter针对url,interceptor针对action

servlet2.4规范中提供了8个listener接口,可以将其分为三类,分别如下:
第一类:与servletContext有关的listner接口。包括:ServletContextListener、ServletContextAttributeListener
第二类:与HttpSession有关的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、HttpSessionActivationListener;
第三类:与ServletRequest有关的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener

Servlet

Servlet 是一个独立的 web 开发标准,是一些遵从Java Servlet API的Java类,这些Java类可以响应请求,Servlet对每个请求都是单独启动一个线程;

也可以从JSP角度去理解, JSP是Servlets技术的一个扩展。JSP可以做的任何事情,Servlet都可以完成。但是JSP允许你将Java代码轻松地和HTML语言混合

在一起使用,并完成强大的功能。当第一次访问一个JSP文件时,它会被转换为Java servlet源码,接着被编译成Java字节码,work 存放jsp编译后产生的

class文件;另外将 Servlet 包装成 Context 容器中的 StandardWrapper,这里 StandardWrapper 是 Web 容器中的一部分,所以说 Context 容器才

是真正运行 Servlet 的 Servlet 容器。Servlet 的确已经能够帮我们完成所有的工作了,但是现在的 web 应用很少有直接将交互全部页面都用 servlet

来实现,而是采用更加高效的 MVC 框架来实现。

  

Spring Web的更多相关文章

  1. 《SSM框架搭建》三.整合spring web

    感谢学习http://blog.csdn.net/zhshulin/article/details/37956105#,还是修改了spring到最新的版本和接口开发示例 根据前一篇日志,已经有了myb ...

  2. Spring Web应用的最大瑕疵

    众所周知, 现在的Spring框架已经成为构建企业级Java应用事实上的标准了,众多的企业项目都构建在Spring项目及其子项目之上,特别是Java Web项目,很多都使用了Spring并且遵循着We ...

  3. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  4. spring web.xml 难点配置总结

    web.xml web.xml是所有web项目的根源,没有它,任何web项目都启动不了,所以有必要了解相关的配置. ContextLoderListener,ContextLoaderServlet, ...

  5. Spring web应用最大的败笔

    第一篇 介绍下IOC DI Spring主要是业务层框架,现在已经发展成为一个完整JavaEE开发框架,它的主要特点是IoC DI和AOP等概念的融合,强项在面向切面AOP.推出之初因为Ioc/AOP ...

  6. 菜鸟学习Spring Web MVC之二

    有文章从结构上详细讲解了Spring Web MVC,我个菜鸟就不引据来讲了.说说强悍的XP环境如何配置运行环境~~ 最后我配好的环境Tomcat.Spring Tool Suites.Maven目前 ...

  7. 4.Spring Web MVC处理请求的流程

  8. 1.Spring Web MVC有什么

    Spring Web MVC使用了MVC架构模式的思想,将web层进行职责解耦. 同样也是基于请求驱动的,也就是使用请求-响应模型.它主要包含如下组件: DispatcherServlet :前端控制 ...

  9. Spring Web Flow使用

    就当我写(嘘,抄)着玩的. 使用Spring框架的一个子项目--Spring Web Flow来建立和管理Web应用和UI流程. 第一节:使用Spring Web Flow在一个Spring MVC应 ...

  10. Spring Web Flow 简介

    Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...

随机推荐

  1. 未能正确加载“RoslynPackage”包

    一打开新建程序或者打开项目就报错,原因是安装的组件或者模板丢失或者有问题,在这一过程加载组件必定会产生错误,以下为解决方法: 1.重命名以下文件夹C:\Users\moonlight\Local Se ...

  2. 第15章 .NET中的反射

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  3. Shell学习笔记 - 环境变量配置文件(转)

    一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [root@localhost ~]# sou ...

  4. [转]VS2013自带SQL Server 的启用方法

    本文转自:http://www.icharm.me/vs2013%E8%87%AA%E5%B8%A6%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93sql-server-exp ...

  5. Oracle Recommended Patches -- "Oracle JavaVM Component Database PSU" (OJVM PSU) Patches (文档 ID 1929745.1)

    From: https://support.oracle.com What is "Oracle JavaVM Component Database PSU" ? Oracle J ...

  6. Android Webview 调用JS跳转到指定activity

    JAVA: WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save ...

  7. SQL 订阅发布备注

    单个用户问题 use mastergodeclare @SQL varchar(max)set @SQL=''select @SQL=@SQL+';kill '+RTRIM(spid)from mas ...

  8. vuex2.0.0爬坑记录 -- mutations的第一个参数state不能解构

    今天在学习vuex的过程中,遇到了一个很困扰人的问题,最终利用vuex的状态快照工具logger解决了问题. 问题是这样的,我在子组件中使用了mapState()函数来将状态映射至子组件中,使子组件能 ...

  9. vim c++补全

    弄了个vim对c++的补全,主要参考自: http://vim.wikia.com/wiki/C%2B%2B_code_completion   首先确定vim编辑.cc或者.cpp文件时当前自动补全 ...

  10. 20.cocoapods的安装和使用

    一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...