01-SpringMVC的请求-文件上传-客户端表单实现
文件上传3要素;
method=“post”
enctype=“multipart/form-data”
type=“file”
02-SpringMVC的请求-文件上传-文件上传的原理
enctype为multipart/form-data
enctype为application/x-www-form-urlencoded
请求体有什么不同?
03-SpringMVC的请求-文件上传-单文件上传的代码实现1
1.导入坐标:
commons-fileupload;
commons-io;
2.在spring-mvc.xml中配置文件上传解析器;
3.在Controller方法中声明参数:
文件对应的参数的类型必须是MultipartFile;
文件对应的参数的名称必须和表单中的名称一致!!;
*******************************************************
配置的文件解析器的id名称必须是:multipartResolver
04-SpringMVC的请求-文件上传-单文件上传的代码实现2
如何获取文件名称?
MultipartFile:
getOriginalFilename
如何把文件保存到服务器本地磁盘?
MultipartFile:
transferTo(File dest)
05-SpringMVC的请求-文件上传-多文件上传的代码实现
当上传多个文件,表单项的名称相同时,服务器端如何接受文件?
MultipartFile[]
单文件上传 jsp代码
controller代码
@ResponseBody
// 单文件上传
@RequestMapping("/upload")
public void upload(String username, MultipartFile multipartFile) throws IOException {
System.out.println(username);
// 获取文件的名称
String originalFilename = multipartFile.getOriginalFilename();
System.out.println(“文件的名字是:” + originalFilename);
// 文件上传到指定位置
multipartFile.transferTo(new File(“C:\Users\liunian\Desktop\” + originalFilename));
}
controller代码
@ResponseBody
// 多文件上传
@RequestMapping("/uploads")
public void upload(String username, MultipartFile[] multipartFile) throws IOException {
System.out.println(username);
for (MultipartFile file : multipartFile) {
String filename = file.getOriginalFilename();
System.out.println(filename);
file.transferTo(new File(“C:\Users\liunian\Desktop\” + filename));
}
}
多文件上传jsp代码
07-SpringMVC拦截器-拦截器的作用
拦截器(interceptor)有什么作用?
拦截请求,做一些共性操作
什么是拦截器链?
多个拦截器可以组成拦截器链;
08-SpringMVC拦截器-interceptor和filter区别
拦截器:
使用范围?
使用了SpringMVC框架的项目中才能使用
拦截内容?
如果DispatcherServlet的访问路径配置为/:
springmvc拦截到Controller中的方法及静态资源,不拦截jsp;
如果静态资源被放行了,那么只拦截Controller的方法,不拦截jsp及静态资源;
如果DispatcherServlet的访问路径配置为*.do:
springmvc拦截到Controller中的方法,不拦截jsp,静态资源;
只拦截Controller的方法,不拦截jsp及静态资源;
过滤器:
使用范围?
只要是javaWeb工程,就可以使用
拦截内容?
一般过滤器的拦截路径配置为 /*,那么会拦截所有的请求;
09-SpringMVC拦截器-快速入门
自定义拦截器的步骤?
1.自定义类,实现HandlerInterceptor接口,重写方法;
2.在spring-mvc.xml中配置:
mvc:interceptors
mvc:interceptor
拦截器中的方法分别在什么时间点执行?
preHandle;
在Controller方法执行之前执行
postHandle;
在Controller方法执行之后,在视图返回之前执行
afterCompletion:
在视图返回之后执行
preHandle方法的返回值代表的含义?
返回true:
放行;
返回false:
不放行;
10-SpringMVC拦截器-快速入门详解
多个拦截器的执行顺序?
在配置文件中,哪个在前面,先执行哪个!
11-SpringMVC拦截器-知识小结
用户登录权限控制
1.访问登录页面 /pages/login.jsp;
2.登录成功后跳转到首页 /index.jsp
3.订单查询业务,在/pages/orderlist.jsp中展示所有的订单信息
16-SpringMVC异常处理-异常处理的思路
dao层,service层,controller层抛出的异常,最终谁能接收到?
springMVC
17-SpringMVC异常处理-异常处理的方式
18-SpringMVC异常处理-简单异常处理器
这个属性配置的是什么?发生异常后,默认跳转的页面
这个属性配置的是什么?指定的异常跳转指定的页面
19-SpringMVC异常处理-自定义异常处理器
自定义异常的步骤?
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
第四个参数什么意思?
异常
返回值什么意思?
跳转的视图
return null;
}
package live.longmarch.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
@PackageName: live.longmarch.exception
@ClassName: MyExceptionResolver
@Author: gaoning
@Date: 2019/12/6 21:29
@Description:
*/
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
//记录异常信息:要么写到日志文件中,要么写到数据库中
ServletContext servletContext = httpServletRequest.getServletContext();
// 获取真实路径
String realPath = servletContext.getRealPath("/");
// 判断是否有目录,没有目录创建目录。然后把异常写在日志中
String dirPath = realPath + “/exception”;
File dir = new File(dirPath);
if (!dir.exists()){
dir.mkdirs();
}
// 创建文件目录
String filePath = dirPath + “/exception.txt”;
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath,true)));
StackTraceElement[] stackTrace = e.getStackTrace();
for (StackTraceElement stackTraceElement : stackTrace) {
bw.write(stackTraceElement.toString());
bw.newLine();
bw.flush();
}
} catch (Exception ee) {
}finally {
if (bw != null){
try {
bw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
ModelAndView mv =new ModelAndView();
if (e instanceof NullPointerException){
mv.setViewName("error2");
}else {
mv.setViewName("error");
}
return mv;
}
}
20-SpringMVC异常处理-知识要点