springmvc笔记

springmvc拦截器,spring类型转换,spring实现文件上传/下载

1、SpringMVC标准配置

导入jar包:core contaner

在web.xml文件中配置springmvc的前端控制器,两个filter

创建springmvc.xml,并配置

编写controller层代码

2、类型转换器

spring自带一些简单的类型转换器

string-->int/float/double

string-->boolean类型

3、全局类型转换器

全局类型转换器:一次配置,全局使用

具体实现步骤:

  1、自定义一个类实现converter<S,T>接口

  2、在springmvc的配置文件中配置一个FormattingConversionServiceFactoryBean

  3、MVC:annotation-driven标签配置一个converservice-Service属性

4、局部类型转换器

 局部类型转换器 :在controller层的方法上每一次使用都需要配置一次。

@DateTimeFormat:时间类型转换器,指定pattem属性,进行设置实现样式

@NumberFormat:数据类型的转换器,指定pattem属性,进行设置实现样式

@CookieValue:用来获取某个cookie的值

5、文件上传/下载代码

文件上传要求:

前端页面:

  1、必须发送post请求

  2、Form表单的encytype=“multipart/form-data”

  3、type=“file”

后端要求:

  1、导入文件上传所需的jar包:commons-fileupload.jar commons-io.jar

  2、在springmvc.xml文件中配置一个多媒体解析器

  3、在controller层的方法上使用MultiPartFile类型的参数接收一个文件

文件下载要求:

  1、返回值类型必须是ResponseEntity类型

  2、设置两个响应头信息

controller层代码

package com.offcn.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/file")
public class FileController {

// 下载

@RequestMapping("/download")
public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
String fileName = "风吹麦浪.mp3";

String realPath = request.getServletContext().getRealPath("/WEB-INF/" + fileName);
FileInputStream fis = new FileInputStream(new File(realPath));

byte[] body = new byte[fis.available()];
fis.read(body);

MultiValueMap<String, String> headers = new HttpHeaders();
fileName = new String(fileName.getBytes("UTF-8"),"iso8859-1");
headers.add("Content-Disposition", "attachment;filename="+fileName);
HttpStatus statusCode = HttpStatus.OK;
ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(body, headers, statusCode);
return responseEntity;
}

// 上传

@RequestMapping("/upload")
public ModelAndView upload(MultipartFile file, String username, HttpServletRequest request) throws Exception {

ServletContext context = request.getServletContext();
String realPath = context.getRealPath("upload");
File directory = new File(realPath);
if (!directory.exists()) {
directory.mkdirs();
}

String fileName = UUID.randomUUID().toString().replaceAll("-", "")+file.getOriginalFilename();
FileOutputStream fos = new FileOutputStream(new File(realPath + "/" + fileName));

System.out.println(realPath+"/"+fileName);
InputStream in = file.getInputStream();
IOUtils.copy(in, fos);
fos.close();
in.close();

ModelAndView mv = new ModelAndView("success");
mv.addObject("fileName", fileName);
return mv;
}
}

在spring中配置文件上传所需的多媒体解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="#{500*1024*1024}"/>
</bean>

6、拦截器[ Interceptor ]

在浏览器请求到达目标方法前进行拦截,对请求进行权限验证,访问控制,请求验证等

具体实现:

  1、自定义一个类,实现Handlerlnterceptor接口

  2、在springmvc.xml的配置文件中通过mvc:interceptors标签内部配置该拦截器对象

大致执行流程

FirstInterceptor#prehandle---->HandlerAdapter#handle----->FirstIntercepotr#postHandle-------

----->dispatcherServlet#render------->FirstInterceptor#afterCompletion

多拦截器执行顺序由springmvc.xml文件中的配置先后决定,拦截器也可以只拦截某些指定的请求

在默认情况下拦截所有请求,除了jsp

7、SpringMvc的运行大致流程

用户发送请求----->DispatcherServlet(前端控制器)------->HandlerMapping(处理器映射器)-----

---->DispatcherServlet(前端控制器)------->HandlerAdapter(处理器适配器)------>Handler(处理器)---

---->HandlerAdapter(处理器适配器)------>DispatcherServlet(前端控制器)------>ViewResolver(视图解析器)--

---->DispatcherServlet(前端控制器)------>Jsp,freemaker(视图)------>DispatcherServlet(前端控制器)----

---->响应给用户

初学者的springmvc笔记02的更多相关文章

  1. html初学者了解的笔记02

    一.Html简介 HTML 是一种标记语言 忽略大小写,语法宽松 使用 HTML 标记和元素,可以: 控制页面和内容的外观 发布联机文档 使用 HTML 文档中插入的链接检索联机信息 创建联机表单,收 ...

  2. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  3. 《30天自制操作系统》笔记(02)——导入C语言

    <30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...

  4. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

  5. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

    # 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...

  6. JS自学笔记02

    JS自学笔记02 1.复习 js是一门解释性语言,遇到一行代码就执行一行代码 2.查阅mdn web文档 3.提示用户输入并接收,相比之下,alert只有提示的作用: prompt(字符串) 接收: ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  8. CS229 笔记02

    CS229 笔记02 公式推导 $ {\text {For simplicity, Let }} A, B, C \in {\Bbb {R}}^{n \times n}. $ ​ $ {\bf {\t ...

  9. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

随机推荐

  1. 封装自己的jquery插件

    自己尝试封装的一个在工作当中使用的多级弹窗插件: ;(function ($, window, document) { //用一个自调用匿名函数把插架代码包裹起来,防止代码污染 $.fn.multi ...

  2. [Python3] 040 文件 一般使用

    目录 文件 1. open 函数 2. with 语句 3. 先写再读 3.1 写 3.2 读 4. "位置"的查询与移动 4.1 tell() 4.2 seek(cookie, ...

  3. git clone 报错 fatal: protocol '–https' is not supported 解决办法

    版本:git 2.22.0 系统:win7旗舰版 先把https去掉 再把https加上 神奇的事情出现了,这样就可以了. 很多人都说这样解决了,原因不知道. Administrator@BWE8QX ...

  4. windows10 AppStore安装 应用商店重新安装

    点击左下角的搜索按钮,如下图所示   输入powershell,在结果中找到widows powershell应用,如下图所示   右键单击widows powershell应用,选择以管理员运行,如 ...

  5. sql server不同排序规则的数据库间字段的比较

    不同的排序规则的字段是不能直接比较的.会提示:无法解决 equal to 操作的排序规则冲突.可以把字段强制转换一个排序规则,这样就能比较了.示例: ------------------------- ...

  6. Configure脚本支持说明

    在Linux上安装Nginx需要执行Configure脚本,该脚本需要做一些参数说明: 选项 说明 --prefix=<path> 指定Nginx软件的安装路径,若不指定默认安装在/usr ...

  7. 并发编程 深入分析Volatile的实现原理

    在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”.可见性的意思是当一个线 ...

  8. Codeforces 817+818(A~C)

    (点击题目即可查看原题) 817A Treasure Hunt 题意:给出起点和终点,每次移动只能从 (a,b)移动至(a+x,b+y) , (a+x,b-y) , (a-x,b+y) , (a-x, ...

  9. 坦克大战--Java类型 ---- (1)音乐播放

    实现原理 我用接口java.applet.AudioClip实现音乐播放,那么我们需要了解这个接口的情况. 我们主要使用其中的三个方法: (1)void loop(); //循环播放(2)void p ...

  10. CentOS7通过YUM安装MySQL5.6

    检查系统中的 MySQL,并删除现有的 Mysql 软件包. $ rpm -qa | grep mysql 这里如果没有返回任何东西证明没有安装任何 MySQL 相关的应用.如下图: 由于 cento ...