目录

项目准备JSONJSON作用JSON演示@ResponseBody注解日期返回json格式

文件上传与下载文件上传准备工作文件项上传文件完成

文件下载文件下载页面下载业务代码

SpringMVC的执行流程

项目准备

大体步骤:

新建dynamic web project, 修改默认输出的class路径,修改content directory名,勾选生成web.xml拷贝SpringMVC核心配置文件 开启扫描包路径 放行静态资源 使spring注解生效 视图解析器拷贝web.xml 前端控制器,过滤器部署Tomcat导包编写TestControllerwebapp\WEB-INF\views下新建index.jsp

测试

JSON

JSON作用

在实际开发中,通常需要和别的系统交换数据,数据交换的格式通常有XML和JSON等;JSON(JavaScript Object Notation:JavaScript对象表示法)是一种基于JavaScript 语法开放的轻量级数据交换格式,使用js语法来描述数据对象;JSON作为一个轻量级的数据格式,相对于XML,文档更小,结构清晰简洁,读写效率更高,XML需要很多的标签,在数据传输的时候无疑会消耗更多网络资源和流量: (1)用XML表示一个对象:

tom

20

5000.0

  (2)用JSON表示一个对象:{“id”:1,“name”:“tom”,“salary”:5000.0}

JSON演示

Insert title here

@ResponseBody注解

会把数据转成json格式,并且不会走视图解析器了

@Controller

public class JsonController {

/**

* 返回一个json格式的user对象

* tips:406:缺少jar

*/

@RequestMapping("/user")

@ResponseBody // 会把数据转成json格式,并且不会走视图解析器了

public User json1(){

User user = new User(111, "力很弱", 20);

return user;

}

@RequestMapping("/list")

@ResponseBody // 会把数据转成json格式,并且不会走视图解析器了

public List json2(){

User user1 = new User(111, "力很弱", 20);

User user2 = new User(222, "王天霸", 21);

User user3 = new User(333, "阮经天", 22);

List list = new ArrayList<>();

list.add(user1);

list.add(user2);

list.add(user3);

return list;

}

}

日期返回json格式

User

public class User {

private Integer id;

private String name;

private Integer age;

@JsonFormat(pattern="yyyy^_^MM^_^dd HH^_^mm^_^ss",timezone="GMT+8")

private Date date;

public User() {

super();

}

public User(Integer id, String name, Integer age) {

super();

this.id = id;

this.name = name;

this.age = age;

}

public User(Integer id, String name, Integer age, Date date) {

super();

this.id = id;

this.name = name;

this.age = age;

this.date = date;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

@Override

public String toString() {

return "User [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

JsonController

/**

* 日期格式问题

*/

@RequestMapping("/date")

@ResponseBody

public User json3(){

User user = new User(111, "力很弱", 20, new Date());

return user;

}

文件上传与下载

文件上传与下载实质都是IO流的读写操作

文件上传

文件上传:把本地资源上传到服务器,即将本地磁盘中的文件复制到服务器指定的地方 输入流(读) - 输出流(写)

准备工作

1.新建upload.html,填写上传表单

Insert title here

username:

图片:

2.导包 commons-fileupload-1.2.2.jar,commons-io-1.4.jar

3.上传解析器 SpringMVC.xml

#{1024*1024}

文件项

以前写的username,password。。。 :简单的表单项 文件上传: 复杂表单项

tips:文件名和路径名尽量不要重复,如upload

UploadController

@Controller

public class UploadController {

/**

* photo: 复杂表单项---以前获取参数的方式不行了

* MultipartFile:文件项 接收的是一个地址值---包含了上传的内容了

*/

@RequestMapping("/upload")

public String uploadFile(MultipartFile photo){

boolean empty = photo.isEmpty();

if (!empty) {

String filename = photo.getOriginalFilename();

System.out.println(filename);

}

return null;

};

}

上传文件完成

@Controller

public class UploadController {

/**

* photo: 复杂表单项---以前获取参数的方式不行了

* MultipartFile:文件项 接收的是一个地址值---包含了上传的内容了

*/

@RequestMapping("/upload")

public String uploadFile(MultipartFile photo,HttpServletRequest request) throws IOException{

if (!photo.isEmpty()) {

// 获取当前项目路径

String realPath = request.getServletContext().getRealPath("/upload1");

// 获取文件名 u=19008.jpg

String filename = photo.getOriginalFilename();

// 获取上传文件的后缀

int index = filename.lastIndexOf(".");

// 后缀

String suffix = filename.substring(index);

// 随机生成一个文件名 1610434039685.xml

// 获取时间戳

long i = System.currentTimeMillis();

// 拼接之后的名字

String name = i+suffix;

// 通过File构造获取一个完整的file路径

File file = new File(realPath, name);

// 输入流

InputStream input = photo.getInputStream();

// 获取输出流

FileOutputStream output = new FileOutputStream(file);

// 上传的核心代码

IOUtils.copy(input, output);

// 关流

output.close();

input.close();

}

// 重定向到当前页面

return "redirect:/uploadFile.html";

}

}

文件下载

从服务器将文件复制到本地磁盘中 重点:输入流,输出流

把download目录放入工程中代表服务器资源

文件下载页面

新建download.jsp

<%@page import="java.net.URLEncoder"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

Insert title here

美女.jpg

star.mp4

suiji.zip

words.txt

tips:要解决IE浏览器点击有中文的A标签报错400的问题,用uff-8编码解决

下载业务代码

tips: 1.要解决浏览器能打开就直接打开不下载的问题 2.要解决中文乱码的问题(文件名乱码)

DownloadController

@Controller

public class DownloadController {

@RequestMapping("/download")

public void download(String filename,HttpServletRequest req,

HttpServletResponse resp) throws IOException{

// 获取download路径

String realPath = req.getServletContext().getRealPath("/download");

// 完整的file文件

File file = new File(realPath, filename);

// 不同的浏览器去处理中文乱码方式

if(req.getHeader("User-Agent").toUpperCase().indexOf("TRIDENT")!=-1){

filename = URLEncoder.encode(filename, "utf-8");

//电脑自带edge【edʒ】浏览器

}else if(req.getHeader("User-Agent").toUpperCase().indexOf("EDGE")!=-1){

filename = URLEncoder.encode(filename, "utf-8");

}else{//其他浏览器

filename = new String(filename.getBytes("UTF-8"),"ISO-8859-1");//转码的方式

};

// 告诉浏览器我要以下载的方式处理这个文件

resp.setHeader("Content-Disposition", "attachment; filename=" + filename);

// 获取输入流

FileInputStream input = new FileInputStream(file);

// 获取响应输出流

ServletOutputStream output = resp.getOutputStream();

// 核心代码

IOUtils.copy(input, output);

// 关流

output.close();

input.close();

}

}

SpringMVC的执行流程

四大器:前端控制器、处理器映射器、处理器适配器、视图解析器 前端控制器之前还有一个过滤器,之后有三个阶段的拦截器

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: