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(前端控制器)----

---->响应给用户

最新文章

  1. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之目录结构
  2. getchar()(转)
  3. iPhone的Push(推送通知)功能原理浅析
  4. VS2013模块对于SAFESEH映像是不安全的解决方法
  5. 逗号分隔的字符串转换为行数据(collection)
  6. IE6、7绝对定位层被遮挡的原因(主要是父层决定的)
  7. java EE实现动态SQL的
  8. DEEPIN 2014 正式版 试用体验
  9. SQL语言学习-数据操纵语言
  10. ecshop给虚拟商品添加出售和未出售的导出xlc
  11. 同一个form里,不管哪个 submit 都是直接提交form表单里的内容
  12. 基于PaaS和SaaS研发的商业云平台实战 转 (今后所有的IT行业会持续集成,往虚拟化方向更快更深的发展,商业化才是这些技术的最终目的)
  13. .net中读取xml文件中节点的所有属性信息
  14. [转载]github在线更改mysql表结构工具gh-ost
  15. MyBatis(七) 自定义映射结果ResultMap
  16. Python——day11 函数(对象、名称空间、作用域、嵌套、闭包)
  17. Pandas截取列部分字符,并据此修改另一列的数据
  18. Python学习(二十七)—— Django和pymysql搭建学员管理系统
  19. mysql 案例~ mysql故障恢复
  20. Kylin知识点介绍

热门文章

  1. 【机器学习理论】概率论与数理统计--假设检验,卡方检验,t检验,F检验,方差分析
  2. hadoop的目录结构介绍
  3. sqlalchemy的join使用
  4. 谷歌云SSH开启root密码登陆
  5. [转帖]深入浅出全面解析RDMA
  6. IDEA Git回退到指定历史版本
  7. Win10开机后内存突然飙升
  8. Oracle sqlplus prelim 参数介绍
  9. C++ 多态、虚函数(virtual 关键字)、静态联编、动态联编
  10. C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)