关于springMVC的细节
1. Controller的生命周期
Spring框架默认创建的对象是单例.所以业务控制器是一个单例对象.
单例对象带来的问题,就是请求的数据如果放在成员变量上面,会相互影响。
请求使用同一个对象处理,在处理的请求比较多的时候,会导致阻塞!!。
SpringMVC提供了,request,session 两个生命周期
request:每次新的请求,创建一个新的实例.
session:每次会话创建一个新的实例. 就是同一个浏览器,就使用同一个实例
注意事项:配置request、session生命周期,必须要先加入<mvc:annotation-driven />标签。
问题:为什么要加入该标签呢?
由于历史原因,SpringMVC的内核是使用XML编写的。而注解的支持类似系统补丁的方式打到框架里面的。
后来出现很多注解有的,而配置文件没有的功能,这些功能就通过 <mvc:annotation-driven />标签扩展加入!!,常用依赖该标签的功能如下
1.作用域request、session的支持
2.放开静态资源的访问
3.上传组件的支持
4.JSON的支持
1. 上传下载的实现
1.1. 文件上传
SpringMVC支持文件上传组件。commons-fileupload组件,commons-fileupload依赖commons-io组件。
1.1.1. 配置步骤说明
第一步:导入包 commons-fileuplad组件
第二步:配置springmvc支持上传组件
(1)启动SpringMVC注解支持
(2)配置上传解释器 (对象名必须是固定)
第三步:构建一个上传表单
第四步:在业务控制器编写保存上传文件的逻辑
1.1.1. 注意事项
问题:为什么上传解释器,对象名是固定的?
注意,因为核心控制器对上传解释器的名字是固定的.是multipartResolver,所以我们配置上传解释器,名字必须是multipartResolver
--查询核心控制器DispacherServlet代码,发现multipartResolver一个固定加载的属性。
如图所示:SpringMVC的核心控制器里面初始化上传组件时,是通过multipartResolver这个名字精准定位对象的。必须要multipartResolver才可以获得对象
1. 拦截器
1.1. 说明
在系统开发的时候,有这么一些需求.就是将一些工作统一处理. 如:登录认证,权限管理等.我们可以使用拦截器。
拦截器与过滤的区别?(回顾)
- 过滤器拦截的是请求路径
- 拦截器拦截的是表示层方法的映射路径
问题:既然拦截器与Servlet的过滤器功能基本一样,为什么需要使用拦截器呢?
答:如果使用过滤器SpringMVC的一些功能组件就无法使用。而拦截器是SpringMVC的功能,可以使用SpringMVC里面的一些组件!!
关于springMVC的细节的更多相关文章
- springmvc细节篇
前面讲了入门篇,现在来了解下springmvc的细节.mvc框架都有请求映射.数据绑定.请求处理.视图解析这几个过程,现在我们来了解springmvc中的这些细节. 1.使用@RequestMappi ...
- SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
SpringMVC完成初始化流程之后,就进入Servlet标准生命周期的第二个阶段,即“service”阶段.在“service”阶段中,每一次Http请求到来,容器都会启动一个请求线程,通过serv ...
- SpringMVC 应知应会
springMVC 是表现层技术,可以用来代替 struts2,下面是简略图:主要是处理器和视图,只有这两个部分需要编写代码. springMVC 三大组件:处理器映射器,处理器适配器,视图解析器. ...
- 搭建Dynamic Web Project(动态web项目)的springmvc工程2
本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...
- spring与springMVC的父子容器关系
背景和概述 在spring与springMVC中通过IOC可以管理bean对象,有两个配置文件可以配置ioc spring的配置文件applicationContext.xmlspringMVC的配置 ...
- 基于spring的web项目启动时预加载数据到ServletContext
1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...
- Spring MVC 底层原理
参考博客:http://www.cnblogs.com/xiaoxi/p/6164383.html Spring MVC处理的流程: 具体执行步骤如下: 1 首先用户发送请求给前端控制器,前端控制器根 ...
- 框架-spring入门总结
框架-spring入门总结 参考: http://www.cnblogs.com/heavenyes/p/3908546.html http://www.cnblogs.com/heavenyes/p ...
- SpringMVC中的session用法及细节记录
前言 初学SpringMVC,最近在给公司做的系统做登录方面,需要用到session. 在网上找了不少资料,大致提了2点session保存方式: 1.javaWeb工程通用的HttpSession 2 ...
随机推荐
- mysql千万级数据量查询出所有重复的记录
查询重复的字段需要创建索引,多个条件则创建组合索引,各个条件的索引都存在则不必须创建组合索引 有些情况直接使用GROUP BY HAVING则能直接解决:但是有些情况下查询缓慢,则需要使用下面其他的方 ...
- 14 - How to check replication status
The people using PostgreSQL and the Streaming Replication feature seem to ask many of the same quest ...
- sql进阶
--1.变量的声明和赋值 declare @Start DateTime, @End DateTime set @Start = '1999-9-9' set @End = '2000-1-1' ...
- 使用STS创建springboot项目pom.xml文件报错org.apache.maven.archiver.MavenArchiver.getManifest
首先我的STS版本时:3.7.3 解决办法:->help->Install New Software -> add->location ->输入: http://repo ...
- 04.常量变量和数据类型(const)
1.关键字 2.数据类型 告诉编译器定义一个类型变量的空间! 3.常量 4.变量 在程序运行过程中,值可以改变 变量在使用前必须先定义,定义变量前必须有相应的数据类型 标识符命名规则: (1).标识符 ...
- mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8
mysql扩展性架构实践N库到2N 库的扩容,2变4.4变8 http://geek.csdn.net/news/detail/5207058同城 沈剑 http://www.99cankao.com ...
- 数据库主库从库宕机重启后binlog数据同步
由于阿里云经典网络迁移到专用网络,一不小心没有先预备方案调整网段, 导致实例无法以内网IP形式访问数据库,被迫进行数据库停机后网络网段调整,导致宕机了几个小时...被客户各种投诉爆了.. 基于这次数据 ...
- 本地Linux备份服务器[Client]定期备份云服务器[Server]上的文件(下)
https://www.cnblogs.com/kevingrace/p/5972563.html Client上使用rsync命令查看服务器上文件列表rsync --list-only -e &qu ...
- Hydra(爆破神器)
PS:这款暴力密码破解工具相当强大,支持几乎所有协议的在线密码破解,其密码能否被破解关键在于字典是否足够强大.对于社会工程型渗透来说,有时能够得到事半功倍的效果.本文仅从安全角度去探讨测试,使用本文内 ...
- Windows SFTP 的安装
用于Windows系统的免费SFTP服务器-Free SFTP Servers 前不久,有人问我:“怎么从 Linux 系统传文件到 Windows 服务器,不能用 FTP 协议.” 文件数量不大.用 ...