1.请求转发与重定向
请求转发:请求转发时地址栏信息不会发生改变,请求转发不适合大量数据的传输,使用请求转发一次最多只能传输512字节的数据,请求转发的作用域在一次请求内,在springmvc中默认使用请求转发
重定向:每次都会创建出一个新的请求,在springmvc使用redirect进行重定向(注意:进行重定向时在springmvc.xml文件中配置的视图解析器中的前缀和后缀无效)
return "redirect:/error.jsp";
2.文件的上传与下载
单个文件的上传(注意:文件上传时需在form表单中指定enctype="multipart/form-data")
jsp
配置:
controller
@RequestMapping("/upload")public String test(MultipartFile img) throws IllegalStateException,IOException{//getOriginalFilename()获取源文件名File file = new ile("d:/",img.getOriginalFilename());img.transferTo(file);return "welcome";}
多个文件的上传
jsp
controller
@RequestMapping("/upload")
public String tests(@RequestParam MultipartFile[] imgs, HttpSession session)throws IllegalStateException, IOException {for (MultipartFile img : imgs) {//session.getServletContext().getRealPath("/")获取服务器根目录//getOriginalFilename()获取源文件名File file = new File(session.getServletContext().getRealPath("/"), img.getOriginalFilename());img.transferTo(file);}
文件下载
@RequestMapping("download")
public ResponseEntity download() throws IOException {// 指定下载文件File file = new File("d:/test.jpg");// 获取文件的输入流InputStream fileInputStream = new FileInputStream(file);// 创建字符数组,并设置数组的大小为预估的字节数byte[] body = new byte[fileInputStream.available()];// 将输入流存储在缓存数组中fileInputStream.read(body);// 获取下载显示的文件名,并解决中文乱码String name = file.getName();String downLoadFileName = new String(name.getBytes("utf-8"), "ISO-8859-1");// 设置Http响应头信息,并且通知浏览器以附件的形式进行下载HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.add("Content-Disposition", "attachment;fileName=" + downLoadFileName); // 设置Http响应状态信息HttpStatus status = HttpStatus.OK;return new ResponseEntity(body, httpHeaders, status);}
3.自定义拦截器
1.自定义拦截器
配置
自定义拦截器类(注意需实现HandlerInterceptor接口)
public class HandelInterceptor implements HandlerInterceptor {//处理方法执行之前@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {System.out.println("处理方法执行之前");//true进行放行 false进行拦截return false;}//处理方法执行之后@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}//所有工作处理 完成后执行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {}}
2.多个自定义拦截器执行顺序(注意与在springmvc中的配置顺序有关)
4.Spring和SpringMVC是父子容器关系解释
Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中
注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。