springMVC(文件上传--拦截器--全局异常处理器)

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中配置文件上传解析器;
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"/>
		<property name="maxUploadSize" value="500000"/>
	</bean>
	
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代码




06-SpringMVC的请求-知识要点

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

<mvc:mapping path="/**"/>

</mvc:interceptor>
</mvc:interceptors>

拦截器中的方法分别在什么时间点执行?
	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异常处理-知识要点

springMVC异常流程
在这里插入图片描述

拦截器过滤器作用时期
在这里插入图片描述

在这里插入图片描述

发布了71 篇原创文章 · 获赞 1 · 访问量 1166

猜你喜欢

转载自blog.csdn.net/weixin_44993313/article/details/103430611