一、SpringMVC返回值
①json数据
访问控制器返回Json类型数据
导入对应的JSON包
支持:
jackson : jackson-databind/jackson-annotations/jack-core
gson: gson
注意: jackson需要三个jar包!如果使用maven引入jackson-databind会连带引入 core和annotations。如果非maven项目,必须加入三个jar包!
Fastjson:fastjson
实现代码:
主要使用@ResponseBody
@ResponseBody
@RequestMapping("/json")
public List<User> getJson() {
User user = new User();
user.setUsername("小毛");
user.setPassword("admin");
user.setBirthday(new Date());
List<User> list = new ArrayList<User>();
list.add(user);
list.add(user);
return list;
}
②String
情况1: 查找到指定的视图
return "user/show"; 默认就是转发
情况2: 转发或者重定向
return "redirect: path";
return "forword:path";
③ModelAndView
返回数据视图模型对象
ModelAndView mv = new ModelAndView();
mv.setViewName("查找视图路径");
mv.addObject("key","object type data");
④Object对象
配合@ResponseBody返回Json数据类型!
@ResponseBody
@RequestMapping("/json1")
public User getJson1() {
User user = new User();
user.setUsername("小毛");
user.setPassword("admin");
user.setBirthday(new Date());
return user;
}
⑤void
可以返回其他mimetype类型的数据!通常将方法定义成void!
配合方法传参得到Response对象,通过Response.getWriter().writer("数据")
二、SpringMVC实现文件上传
Spring MVC为文件上传提供了直接支持,这种支持是通过即插即用的MultipartResolver实现. Spring使用Jakarta Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。
在SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要先在上下文中配置MultipartResolver。
①需要引入jar包:
commons-fileupload.jar
commons-io.jar
②在SpringMVC.xml中配置multipartResolver
<!--multipartResolver配置 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="5242880"/>
<property name="uploadTempDir" value="file:/d:/temp"/>
</bean>
其中属性详解:
defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1
maxUploadSize="5400000" 是上传文件的大小,单位为字节
uploadTempDir="file:/d:/temp" 为上传文件的临时路径
③编写文件上传表单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<center>
<form method="post" enctype="multipart/form-data" action="user/upload">
<label for="name">文件名称<input type="text" id="name" name="name" /></label>
<input type="file" name="file" />
<button>提交</button>
</form>
</center>
</body>
</
④编写控制器
@Controller
@RequestMapping("/user")
public class UploadController {
@RequestMapping("/upload")
public String saveFile(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) throws IOException {
// 接收表单提交的数据,包含文件
System.out.println("name = " + name);
if (!file.isEmpty()) {
file.transferTo(new File("G:/temp/" + file.getOriginalFilename()));
}
return "success";
}
}
SpringMVC会将上传文件绑定到MultipartFile对象上. MultipartFile提供了获取长传文件内容,文件名等方法,通过transferTo()方法还可将文件存储到磁盘中,具体方法如下:
改进版:
@Controller
@RequestMapping("/user")
public class UploadController {
@RequestMapping("/upload")
public String saveFile(@RequestParam("name") String name, @RequestParam("file") MultipartFile file,HttpServletRequest request) throws IOException {
// 接收表单提交的数据,包含文件
System.out.println("name = " + name);
File path = createDir(request.getSession().getServletContext());
String fileName=createName(file.getOriginalFilename());
File f=new File(path, fileName);
if (!file.isEmpty()) {
file.transferTo(f);
}
return "success";
}
// 创建目录---以日期,一天一个文件夹
private File createDir(ServletContext context) {
String realPath = context.getRealPath("/static/upload");
String date = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
File file = new File(realPath, date);
if (!file.exists()) {
file.mkdir();
}
return file;
}
// 创建文件名--区分同名文件,在文件名前加上当前的时间
private String createName(String name) {
return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()) + "_" + name;
}
}