内容:
文件下载
1.jsp:
<a href="/downloadimg">下载图片</a>
2.controller:
//进入拦截器
@RequestMapping("downloadimg")
public ResponseEntity<byte[]>downloadpic(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"));
ResponseEntity<byte[]>entity=new ResponseEntity<byte[]>(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配置
<mvc:interceptors>
<!--第一个拦截器-->
<mvc:interceptor>
<!--多个路径-->
<!--<mvc:mapping path="/Inteceptor/*"/>-->
<!--单个路径-->
<mvc:mapping path="/**"/>
<!--不拦截路径-->
<mvc:exclude-mapping path="/Inteceptor/bb"></mvc:exclude-mapping>
<!--自定义拦截器-->
<bean class="stu.adam.springMVC.Inteceptor.OneInteceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
springmvc静态资源

一般静态资源类型转换问题统一在:
mvc.xml文件里加这句话
<mvc:default-servlet-handler />
springmvc类型转换问题(重点是时间类型转换问题):
1.注解(要导包)

2.自定义转换格式
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
p:indentOutput="true"
p:simpleDateFormat="yyyy-MM-dd HH:mm:ss"
/>
浙公网安备 33010602011771号