spring-mvc笔记(三)
内容:
文件下载
1.jsp:
下载图片
2.controller:
//进入拦截器
@RequestMapping("downloadimg")
public ResponseEntitydownloadpic(HttpServletRequest request) throws IOException {
String path=request.getServletContext().getRealPath("download/微信图片_20211215195603.jpg");
FileInputStream inputStream=new FileInputStream(path);
byte[]buffer=new byte[inputStream.available()];
inputStream.read(buffer);
HttpHeaders httpHeaders=new HttpHeaders();
String fileName=path.substring(path.indexOf("\\")+1);
httpHeaders.setContentDispositionFormData("attachment",URLEncoder.encode(fileName,"utf-8"));
ResponseEntityentity=new ResponseEntity(buffer,httpHeaders,HttpStatus.OK);
return entity;
}
springmvc的异常处理(自定义异常):
1.枚举类
package stu.adam.springMVC.http;
/**
* @program: springMVC-3
* @description:
* @author: adam
* @create: 2021-12-20 19:46
**/
//I.枚举异常类编写
public enum StatusEnum {
ERROR(500,"服务器错误"),
SUCCESS(200,"请求成功"),
PAGE_LOSE(404,"请求页面丢失"),
USER_ERROR(501,"登录错误");
//定义属性
//状态码
private int status;
//提示信息
private String message;
StatusEnum(int status, String message) {
this.status = status;
this.message = message;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2.
package stu.adam.springMVC.exception;
import lombok.Getter;
import lombok.Setter;
import stu.adam.springMVC.http.StatusEnum;
/**
* @program: springMVC-3
* @description:
* @author: adam
* @create: 2021-12-20 19:53
**/
//II.异常自定义
@Getter
@Setter
public class HttpException extends RuntimeException{
//类定义
private StatusEnum statusEnum;
//构造器
public HttpException(StatusEnum statusEnum) {
this.statusEnum = statusEnum;
}
//getset
public StatusEnum getStatusEnum() {
return statusEnum;
}
public void setStatusEnum(StatusEnum statusEnum) {
this.statusEnum = statusEnum;
}
}
3.
package stu.adam.springMVC.control;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import stu.adam.springMVC.exception.HttpException;
import stu.adam.springMVC.http.StatusEnum;
/**
* @program: springMVC-3
* @description:登录异常
* @author: adam
* @create: 2021-12-20 20:02
**/
//III.logincontroller层编写
@Controller
public class LoginController {
@GetMapping("error")
public String error(){
if(true){
throw new HttpException(StatusEnum.USER_ERROR);
}
return "success";
}
}
4.
package stu.adam.springMVC.Exceptionhandler;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import stu.adam.springMVC.exception.HttpException;
import stu.adam.springMVC.http.MessageBean;
import stu.adam.springMVC.http.StatusEnum;
import javax.security.auth.login.LoginException;
/**
* @program: springMVC-3
* @description:
* @author: adam
* @create: 2021-12-20 20:07
**/
/*
*
* */
//iv 异常类处理编写
@ControllerAdvice
public class ErrorExceptionHandler {
@ExceptionHandler(HttpException.class)
public ResponseEntity loginHandler(HttpException e) {
StatusEnum statusEnum = e.getStatusEnum();
int status = statusEnum.getStatus();
String message = statusEnum.getMessage();
MessageBean messageBean = new MessageBean();
messageBean.setStatusCode(status);
messageBean.setMessage(message);
return ResponseEntity.ok(messageBean);
}
}
5.
package stu.adam.springMVC.http;
import lombok.Data;
/**
* @program: springMVC-3
* @description:
* @author: adam
* @create: 2021-12-20 20:16
**/
//v.bean编写
@Data
public class MessageBean {
private Integer statusCode;
private String message;
}
效果:(json格式)
springmvc拦截器:
1.自定义拦截器
public class OneInteceptor implements HandlerInterceptor
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("preHandle执行了");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
System.out.println("postHandle执行了");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
System.out.println("afterCompletion执行了");
}
}
2.测试对象
package stu.adam.springMVC.control;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @program: springMVC-3
* @description:
* @author: adam
* @create: 2021-12-20 20:56
**/
@Controller
public class ControllerTest {
@RequestMapping("/a")
public String aa(){
System.out.println("aa excute执行了");
return "success";
}
@RequestMapping("/b")
public String bb(){
System.out.println("bb excute执行了");
return "success";
}
@RequestMapping("/c")
public String cc(){
System.out.println("cc excute执行了");
return "success";
}
}
3.拦截xml配置
springmvc静态资源
一般静态资源类型转换问题统一在:
mvc.xml文件里加这句话
springmvc类型转换问题(重点是时间类型转换问题):
1.注解(要导包)
2.自定义转换格式