初学者的springmvc笔记02
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的更多相关文章
- html初学者了解的笔记02
一.Html简介 HTML 是一种标记语言 忽略大小写,语法宽松 使用 HTML 标记和元素,可以: 控制页面和内容的外观 发布联机文档 使用 HTML 文档中插入的链接检索联机信息 创建联机表单,收 ...
- 软件测试之loadrunner学习笔记-02集合点
loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...
- 《30天自制操作系统》笔记(02)——导入C语言
<30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...
- 《The Linux Command Line》 读书笔记02 关于命令的命令
<The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...
- 强化学习读书笔记 - 02 - 多臂老O虎O机问题
# 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...
- JS自学笔记02
JS自学笔记02 1.复习 js是一门解释性语言,遇到一行代码就执行一行代码 2.查阅mdn web文档 3.提示用户输入并接收,相比之下,alert只有提示的作用: prompt(字符串) 接收: ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- CS229 笔记02
CS229 笔记02 公式推导 $ {\text {For simplicity, Let }} A, B, C \in {\Bbb {R}}^{n \times n}. $ $ {\bf {\t ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
随机推荐
- 关联规则(Apriori算法)
关联分析直观理解 关联分析中最有名的例子是“尿布与啤酒”.据报道,美国中西部的一家连锁店发现,男人们会在周四购买尿布和啤酒.这样商店实际上可以将尿布与啤酒放在一块,并确保在周四全价销售从而获利.当然, ...
- sqlalchemy的join使用
——.先看mysql的join链接方法 #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Floa ...
- MSF魔鬼训练营-3.4.2网络漏洞扫描-OpenVAS(待补完)PS:在虚拟机里面运行OpenVAS扫描的进度真的是超慢啊...
由于新版的kali中没有预装OpenVAS.所以在虚拟机中安装花了非常多的时间. 安装过程参考:http://www.cnblogs.com/zlslch/p/6872559.html过程写的非常详 ...
- [转帖]etcd 在超大规模数据场景下的性能优化
etcd 在超大规模数据场景下的性能优化 阿里系统软件技术 2019-05-27 09:13:17 本文共5419个字,预计阅读需要14分钟. http://www.itpub.net/2019/ ...
- git clone 含有子模块的项目
当一个 git 项目包含子模块(submodule) 时,直接克隆下来的子模块目录里面是空的. 有两种方法解决: 方法一 如果项目已经克隆到了本地,执行下面的步骤: 初始化本地子模块配置文件 git ...
- Django之自定义标签,过滤器,以及inclusion_tag
目录 Django之自定义标签,过滤器,以及inclusion_tag 自定义过滤器 自定义标签 inclusion_tag inclusion_tag() 项目实例: inclusion_tag() ...
- Linux服务器Java进程突然消失排查办法
出处:JAVA进程突然消失的原因? 问题描述 在实际生产环境下,如果我们遇见Java进程突然消失,该如何去排查问题? 思路 可能有几种原因: ①.Java应用程序的问题:发生OOM导致进程Crash ...
- 阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答.1.同步与异步 同步和异步关注的是消息通信机制 (syn ...
- java中如果删除导入的jar包,工程出现叹号解决方案
第一步:在工程上右键 第二步:选中build Path 第三步:选择Configue bulid path 第四步:选择liberary 第五步:鼠标点击带红色叉叉的 第六步:点击edit 第七步:点 ...
- win10操作系统的安装
电脑被重装操作系统了,一切从头开始啦!!! 不过倒是学习了,给大家分享一些学习经验~ 1:制作启动盘 制作启动盘的首先要准备一个空的U盘,为什么说空的呢,因为制作的时候会格式化U盘,只能存个操作系统, ...