重定向与Flash属性
重定向可以在方法中重定向 从一个方法指向另一个方法 传值只能两个页面传值不能跨页面 需要重定向,则可以在返回的结果前加上一个前缀“redirect:”,可以重定向到一个指定的页面,也可以是另一个action
@RequestMapping("/action22")
public String action2(Model model) {
return "index";
}
@RequestMapping("/action23")
public String action3(Model model) {
model.addAttribute("name", "action3Message");
return "redirect:action22";
}
Flash属性 在多个页面传值时可以用于Flash属性进行传值
向方法加入RedirectAttributes形参用redirectAttributes形参点addFlashAttribute("", );方法 进行传值
// 接收重定向参数
@RequestMapping("/action2")
public String action2(Model model, Product product) {
model.addAttribute("message", product);
model.addAttribute("name","李四");
System.out.println(model.containsAttribute("product")); // true
return "index";
}
//重定向属性
@RequestMapping("/action3")
public String action3(Model model, RedirectAttributes redirectAttributes) {
Product product = new Product(2, "iPhone7 Plus", 6989.5);
redirectAttributes.addFlashAttribute("product", product);
return "redirect:action2";
}
转发
str=”forward : 路径” 请求转发到一个页面中
str=”forward : controller的映射” 请求转发到一个controller方法中 可进行跨页面传值
//11.转发
@RequestMapping("/act11")
public String act11(Model model){
return "index";
}
//12.转发
@RequestMapping("/act12")
public String act12(Model model){
model.addAttribute("msg","act12");
return "forward:act11";
}
文件上传
Servlet3.0以下的通过commons-fileupload上传 需要
添加上传依赖包commons-io 2.4版本 commons-fileupload 1.3.1 版本
表单需加enctype=“multipart/form-data” 文件上传input标签中需加multiple="multiple"关键
修改配置文件,增加上传配置defaultEncoding:默认编码格式
maxUploadSize:上传文件最大限制(字节byte)
maxInMemorySize:缓冲区大小
在pom.xml文件添加依赖
<!--文件上传 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>```
**controller页面**
```java
@Controller
@RequestMapping("/up")
public class UpFileController {
@RequestMapping(value="/fileSave",method=RequestMethod.POST)
public String fileSave(Model model, @RequestParam MultipartFile[] files, HttpServletRequest request) throws Exception{
String username=request.getParameter("username");
System.out.println(username);
//文件存放的位置
String path=request.getServletContext().getRealPath("/files");
String fileName=null;
for (MultipartFile file : files) {
fileName=file.getOriginalFilename();
System.out.println(file.getOriginalFilename());
File tempFile=new File(path, fileName);
if(!tempFile.exists()) {
tempFile.mkdirs();
}
file.transferTo(tempFile);
}
System.out.println(path);
model.addAttribute("path",path);
model.addAttribute("fileName",fileName);
model.addAttribute("username",username);
return "upload";
}
springmvc-servlet.xml配置文件jsp页面
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8" /> <property name="maxUploadSize" value="10485760000" /> <property name="maxInMemorySize" value="40960" /> </bean>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<h2>上传文件(支持多文件上传)</h2>
<form action="<%=request.getContextPath()%>/up/fileSave" method="post" enctype="multipart/form-data">
<p>
姓名:<input type="text" name="username"><br>
文件:
<input type="file" name="files" multiple="multiple" />
<%--<input type="file" name="files" multiple="multiple" />--%>
<%--<input type="file" name="files" multiple="multiple" />--%>
<p>
<button>提交</button>
</p>
<p>
${message}<br>
路径:${path}<br>
文件名:${fileName}<br>
姓名:${username}<br>
<img src="<%=request.getContextPath()%>/files/${fileName}">
</p>
</form>
</body>
</html>