Spring MVC工作原理

  • Dispatcher Servlet分发器
  • Handler Mapping 处理器映射
  • Controller 控制器
  • ModelAndView 模型和视图对象
  • ViewResolver 视图解析器

Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。

Spring框架是业务层框架,核心组件是容器,它是管理bean的,广义上讲任何一个javaBean它都管理,实例化对象两大概念:IOC、AOP。

拦截配置

*.action 拦截所有访问URL后缀为action, / 拦截所有的访问的URL, 包括action, 静态js, images, css。

如何修改action-servlet.xml文件名和位置?

  • 移动action-servlet.xml到src目录下,改名为spring-mvc.xml
  • 修改web.xml,给DispatcherServlet增加初始参数
  • 通过初始化参数,指定配置文件位置
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
</servlet>

spring-mvc注解方式开发(spring3.2.2)

  • 新建web project,要保证项目编码为UTF-8,否则中文乱码。
  • 引入jar包
  • web.xml中配置分发器servlet DispatchServlet
  • 创建spring配置文件(进行包扫描,和视图解析器) action-servlet.xml 视图解析器访问路径:prefix + logicName + suffix
  • 创建控制器
  • 创建jsp文件
  • 发布、测试

springMVC是何时加载的?

它不是随着web容器启动而加载,而是在第一次访问时才加载

IOC(控制反转)

将一个类放到spring容器(bean)里面,spring容器来创建对象。

例:正常情况你要吃饭,需要先到食堂,然后买饭吃饭。

  • 突然有一天你不想出去了,定了一份外卖,剩了去食堂的过程,只需要吃饭就可以了。
  • 将买饭的任务交给送餐的,对应的就是将对象的创建交给spring,过程不用你管 。

把一个类放到spring容器中, 类叫bean,换句话说,一个bean描述一个类。

  • beans 存放了很多的类
  • id是标识符
  • class是类的全名

spring有很多容器的

spring关心的是集中管理在java企业应用和web应用中涉及的数据持久化,事务处理,消息中间件,分布式计算等抽象资源,并在此基础上,为应用提供了基于pojo的开发环境。

面试要点:Struts1、Struts2和springmvc比较

  • 都是web层框架。
  • Struts1是基于servlet;Struts2是基于filter;springmvc是基于servlet 。
  • Struts1的action是单例模式,线程不安全的;Struts2 action是原型模式 prototype,每次访问对象都会创建新的实例,保证线程安全性;springmvc controller是单例模式,整个程序只有一个对象实例。Spring的安全性是通过绑定threadlocal实现。
  • Struts1使用JSTL EL表达式,但是对集合和索引属性的支持很弱。Struts2采用 OGNL。 struts2是类级别的拦截, 一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应。
  • Strust1中通常以action访问时.do,struts2、spring mvc 都是以.action做结尾。
  • spring3 mvc可以认为已经100%零配置了。

觉得本文对你有帮助?请分享给更多人

原文发布于微信公众号 - 程序员宝库(chengxuyuanbaoku)

原文发表时间:2017-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

pm2模块编写入门

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 PM2 模块 PM2模块是通过PM2来安装和管理,代码可以托管...

22560
来自专栏精讲JAVA

一文理解Netty模型架构

本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给读者提供学习实践参考。

17720
来自专栏熊二哥

Java缓存深入理解

对于缓存大家都不会陌生,但如何正确和合理的使用缓存还是需要一定的思考,本文将基于Java技术栈对缓存做一个相对详细的介绍,内容分为基本概念、本地缓存、远程缓存和...

4.5K90
来自专栏FreeBuf

如何从内存提取LastPass中的账号密码

简介 首先必须要说,这并不是LastPass的exp或者漏洞,这仅仅是通过取证方法提取仍旧保留在内存中数据的方法。之前我阅读《内存取证的艺术》(The Art ...

27980
来自专栏java一日一条

Java锁优化

JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitor...

20510
来自专栏风中追风

分布式环境下的解决方案——分布式锁

锁是一个抽象的概念,锁的实现,需要依存于一个可以存储锁的空间。在多线程中是内存,在多进程中是内存或者磁盘。更重要的是,这个空间是可以被访问到的。多线程中,不同的...

37080
来自专栏熊二哥

FreeMarker快速入门

虽然当前比较推荐使用thymeleaf替代jsp作为java网页开发的模板语言,不过公司推荐使用freemarker,那就顺势而为,速度学一发,然后迅速开始新项...

26590
来自专栏Linyb极客之路

使用Spring Boot实现模块化

53320
来自专栏乐百川的学习频道

Spring学习笔记 Spring Roo 简介

一直以来,Java/Spring开发被认为是笨重的代表,无法快速生成项目原型和骨架。所以,Spring推出了Spring Roo这个项目,帮助我们快速生成项目原...

30170
来自专栏java思维导图

一文理解Netty模型架构

本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给读者提供学习实践参考。

13540

扫码关注云+社区

领取腾讯云代金券