番禺网站建设价格,服务支持型网站,汕头网站关键排名,网站推广投放目录 项目准备JSONJSON作用JSON演示ResponseBody注解日期返回json格式 文件上传与下载文件上传准备工作文件项上传文件完成 文件下载文件下载页面下载业务代码 SpringMVC的执行流程 项目准备
大体步骤#xff1a;
新建dynamic web project#xff0c; 修改默认输出的class路… 目录 项目准备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等JSONJavaScript Object NotationJavaScript对象表示法是一种基于JavaScript 语法开放的轻量级数据交换格式使用js语法来描述数据对象JSON作为一个轻量级的数据格式相对于XML文档更小结构清晰简洁读写效率更高XML需要很多的标签在数据传输的时候无疑会消耗更多网络资源和流量 (1)用XML表示一个对象
person id1nametom/nameage20/agesalary5000.0/salary
/person(2)用JSON表示一个对象{“id”:1,“name”:“tom”,“salary”:5000.0}
JSON演示
html
head
meta charsetUTF-8
titleInsert title here/titlescript typetext/javascript// 定义jsonvar obj {id:123,name:王天霸,age:30};// 弹出框alert(obj.name);alert(obj.age);var arr [{name:tom,age:20},{name:jack,age:30}];alert(arr[1].age)alert(arr[0].name)/script
/head
body/body
/htmlResponseBody注解
会把数据转成json格式并且不会走视图解析器了
Controller
public class JsonController {/*** 返回一个json格式的user对象 * tips406:缺少jar*/RequestMapping(/user)ResponseBody // 会把数据转成json格式并且不会走视图解析器了 public User json1(){User user new User(111, 力很弱, 20); return user; }RequestMapping(/list)ResponseBody // 会把数据转成json格式并且不会走视图解析器了 public ListUser json2(){User user1 new User(111, 力很弱, 20); User user2 new User(222, 王天霸, 21);User user3 new User(333, 阮经天, 22);ListUser 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(patternyyyy^_^MM^_^dd HH^_^mm^_^ss,timezoneGMT8)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;}Overridepublic String toString() {return User [id id , name name , age age ];}}JsonController /*** 日期格式问题*/RequestMapping(/date)ResponseBodypublic User json3(){User user new User(111, 力很弱, 20, new Date()); return user; }文件上传与下载
文件上传与下载实质都是IO流的读写操作
文件上传
文件上传把本地资源上传到服务器即将本地磁盘中的文件复制到服务器指定的地方 输入流(读) - 输出流(写)
准备工作
1.新建upload.html填写上传表单
html
head
meta charsetUTF-8
titleInsert title here/title
/head
body!-- 上传三要素表单的提交的方式必须是postinput中必须有typefile enctype:值必须是multipart/form-data-- form action/upload methodpost enctypemultipart/form-data username: input typetext nameusernamebr/图片input typefile namephotobr/input typesubmit value上传/form
/body
/html2.导包 commons-fileupload-1.2.2.jarcommons-io-1.4.jar
3.上传解析器 SpringMVC.xml
bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver!-- 设置上传文件的最大尺寸为1MB --property namemaxUploadSize!-- spring el写法1MB --value#{1024*1024}/value/property!-- 效果同上 --
property namemaxUploadSize value1048576 /
/bean文件项
以前写的usernamepassword。。。 简单的表单项 文件上传 复杂表单项
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);// 获取文件名 u19008.jpgString filename photo.getOriginalFilename(); // 获取上传文件的后缀int index filename.lastIndexOf(.);// 后缀String suffix filename.substring(index); // 随机生成一个文件名 1610434039685.xml// 获取时间戳long i System.currentTimeMillis(); // 拼接之后的名字String name isuffix; // 通过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 importjava.net.URLEncoder%
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd
html
head
meta http-equivContent-Type contenttext/html; charsetUTF-8
titleInsert title here/title
/head
bodya href/download?filename%URLEncoder.encode(美女.jpg, utf-8) %美女.jpg/abr/a href/download?filenamestar.mp4star.mp4/abr/a href/download?filenamesuiji.zipsuiji.zip/abr/a href/download?filenamewords.txtwords.txt/abr/
/body
/htmltips要解决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的执行流程
四大器前端控制器、处理器映射器、处理器适配器、视图解析器 前端控制器之前还有一个过滤器之后有三个阶段的拦截器