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. 说明

在系统开发的时候,有这么一些需求.就是将一些工作统一处理. 如:登录认证,权限管理等.我们可以使用拦截器。

拦截器与过滤的区别?(回顾)

  1. 过滤器拦截的是请求路径
  2. 拦截器拦截的是表示层方法的映射路径

问题:既然拦截器与Servlet的过滤器功能基本一样,为什么需要使用拦截器呢?

答:如果使用过滤器SpringMVC的一些功能组件就无法使用。而拦截器是SpringMVC的功能,可以使用SpringMVC里面的一些组件!!

关于springMVC的细节的更多相关文章

  1. springmvc细节篇

    前面讲了入门篇,现在来了解下springmvc的细节.mvc框架都有请求映射.数据绑定.请求处理.视图解析这几个过程,现在我们来了解springmvc中的这些细节. 1.使用@RequestMappi ...

  2. SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现

    SpringMVC完成初始化流程之后,就进入Servlet标准生命周期的第二个阶段,即“service”阶段.在“service”阶段中,每一次Http请求到来,容器都会启动一个请求线程,通过serv ...

  3. SpringMVC 应知应会

    springMVC 是表现层技术,可以用来代替 struts2,下面是简略图:主要是处理器和视图,只有这两个部分需要编写代码. springMVC 三大组件:处理器映射器,处理器适配器,视图解析器. ...

  4. 搭建Dynamic Web Project(动态web项目)的springmvc工程2

    本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...

  5. spring与springMVC的父子容器关系

    背景和概述 在spring与springMVC中通过IOC可以管理bean对象,有两个配置文件可以配置ioc spring的配置文件applicationContext.xmlspringMVC的配置 ...

  6. 基于spring的web项目启动时预加载数据到ServletContext

    1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...

  7. Spring MVC 底层原理

    参考博客:http://www.cnblogs.com/xiaoxi/p/6164383.html Spring MVC处理的流程: 具体执行步骤如下: 1 首先用户发送请求给前端控制器,前端控制器根 ...

  8. 框架-spring入门总结

    框架-spring入门总结 参考: http://www.cnblogs.com/heavenyes/p/3908546.html http://www.cnblogs.com/heavenyes/p ...

  9. SpringMVC中的session用法及细节记录

    前言 初学SpringMVC,最近在给公司做的系统做登录方面,需要用到session. 在网上找了不少资料,大致提了2点session保存方式: 1.javaWeb工程通用的HttpSession 2 ...

随机推荐

  1. 几个bat文件(关于robot freamwork安装)

    如果安装后 没有这几文件,或者在运行后 提示 文件缺少这个文件 , 就需要手动创建.   一般文件在 :C:\Python27\Scripts 这个目录下 1.pybot.bat文件: @echo o ...

  2. 理解es6 中 arrow function的this

    箭头函数相当于定义时候,普通函数.bind(this)箭头函数根本没有自己的this,导致内部的this就是定义时候的外层代码块中的this.外层代码块中的this,则取决于执行时候环境上下文cont ...

  3. oracle 安装介绍

    oracle 分为客户端和服务器 全局数据库是 实例名通常就是所说的服务,就是说数据库和操作系统之间的交互用的是数据库实例名 导入 sql文件 @路径    例如@d:/my.sql [oracle@ ...

  4. linux CentOS

    CentOS中由一般用户切换为root用户 1.打开终端,提示符为“$”,表明该用户为普通用户,此时,直接输su,回车,输入root密码,回车,就可以切换到root用户下,此时的提示符变为“#”. 注 ...

  5. 在docker上部署mysql

    1.拉取官方镜像5.6的版本.(查看有哪些版本,可以在阿里云的镜像仓库查看,我配置的镜像是阿里云的) docker pull mysql:5.6 2.查看拉取的镜像,获取镜像id docker ima ...

  6. MySQL 的安装

    MySQL的全部安装步骤. 1::本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...

  7. 【Python全栈-JavaScript】jQuery效果

    jQuery效果 jQuery 效果函数: 方法 描述 animate() 对被选元素应用“自定义”的动画 clearQueue() 对被选元素移除所有排队的函数(仍未运行的) delay() 对被选 ...

  8. jstack命令

    先是有jps查看进程号: hollis@hos:~$ jps 29788 JStackDemo1 29834 Jps 22385 org.eclipse.equinox.launcher_1.3.0. ...

  9. 2019年IntelliJ IDEA 最新注册码,亲测可用(截止到2020年3月11日)

    2019年IntelliJ IDEA 最新注册码(截止到2020年3月11日) 操作步骤: 第一步:  修改 hosts 文件 ~~~ 在hosts文件中,添加以下映射关系: 0.0.0.0 acco ...

  10. centos7.5 安装gaussian09和 gaussianview4

    一.安装gaussian09 1. 解压安装包 $ mkdir Gaussian$ cd Gaussian$ tar xvf g09_linux.tar 2. 设置环境变量 #gaussian09 e ...