SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

这篇具有很好参考价值的文章主要介绍了SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场景的开发,比如web开发场景、mybatis开发场景、Redis开发场景....

SpringBoot web相关配置

1 静态资源访问

Springboot工程的静态资源约定(默认)要求放在如下目录

resource

​ —/static

​ — /public

​ —/resources

​ —/META-INF/resources

优先级顺序 /META-INF/resources >>> resources >>> static >>> public

1.1 配置自定义静态资源路径

基于配置类的方式

@Configuration   // 表示当前类是一个配置类
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/imag/**")//浏览器资源访问路径
                .addResourceLocations("classpath:/images/"); //映射本地资源路径
    }
}

基于配置文件的方式

spring:
  mvc:
    static-path-pattern: /images/**
  resources:
    static-locations: classpath:/images/

2 统一异常处理

SpringBoot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。

2.1 自定义全局处理异常

走视图解析器的配置

  • advice 底层是AOP技术 报错之后,在不修改Controller层的基础之上做增强
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public String exceptionHandle(HttpServletRequest request, Exception e){
        return "errorPage";
    }

    @ExceptionHandler(NullPointerException.class)
    public String exceptionHandle1(HttpServletRequest request, Exception e){
        //可根据不同的异常做出不同的处理
        return "errorPage1";
    }
}

前后端分离的配置(返回json数据)

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResultData exceptionHandle(HttpServletRequest request, Exception e){
        return new ResultData(101,"出错啦!!");
    }

    @ExceptionHandler(NullPointerException.class)
    @ResponseBody
    public ResultData exceptionHandle1(HttpServletRequest request, Exception e){
        //可根据不同的异常做出不同的处理
        return new ResultData(101,"出错啦111!!");
    }
}

3 文件上传

后端Controller

注意:如果这个方法不加@ResponseBody 那么就会走视图解析器,会404

@Controller
public class UploadController {
    @RequestMapping("upload")
    //注意:如果这个方法不加@ResponseBody   那么就会走视图解析器,会404
    @ResponseBody
    public ResultData upload(@RequestParam("file")  MultipartFile file) throws IOException {
        try {
            String originalFilename = file.getOriginalFilename();
            String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
            String filename = UUID.randomUUID().toString().replace("-","")+ext;
            file.transferTo(new File("D:\\workspace\\upload\\"+filename));
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultData(100,"上传失败");
        }
        return new ResultData(0,"上传成功");
    }
}

文件上传配置(非必须配置)

spring:
  servlet:
    multipart:
      # 单个上传文件大小(默认1MB)
      max-file-size: 2MB
      # 总上传文件大小(默认10MB)
      max-request-size: 20MB

使用postman测试

springboot内置tomcat中配置外部访问路径

@Configuration
public class MyWebConfig implements WebMvcConfigurer {

    //添加虚拟路径,相同于通过一个路径来访问本地磁盘上的内容
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**")
                .addResourceLocations("file:D:\\workspace\\upload\\");
    }
}

4 拦截器

定义拦截器

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
        if(loginUser == null){
            //登录失败跳转到登录页面
            response.sendRedirect(request.getContextPath()+"/login.html");
            return false;
        }
        return true;//登录成功放行
    }
}

配置拦截器

  • 添加拦截器
  • 定义拦截器的路径
  • 定义排除拦截的路径
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()) //添加拦截器
                .addPathPatterns("/**")  //定义拦截的路径
                .excludePathPatterns("/images");  //定义排除拦截的路径
    }
}

5 统一跨域请求处理

统一的跨域处理文章来源地址https://www.toymoban.com/news/detail-429651.html

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedHeaders("*")
                .allowCredentials(true)
                .allowedMethods("*");
    }
}


@Configuration  //表示当前类是一个配置类
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**")
                .addResourceLocations("classpath:/images/");

        registry.addResourceHandler("/tupian/**")
                .addResourceLocations("file:D:\\workspace\\upload\\");
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")   //请求的资源  /**表示所有资源 、
                .allowedOrigins("*")    //允许指定的源能访问
            				//  .allowedOriginPatterns("*")//允许的请求地址  一般不需要
                .allowedHeaders("*")    //允许携带的请求头
                .allowedMethods("*");    //允许的请求方式
                //.allowCredentials(true) //允许是否携带cookie

        //注意:当设置允许携带Cookie不允许将指定源设置为所有
    }
}

到了这里,关于SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【BUG】SpringBoot 静态资源(static)无法访问问题404

    SpringBoot访问静态资源出现 404 项目场景 问题描述 ​编辑原因分析 解决方案 1. 将静态资源放在static 或 templates目录中 2. 继承WebMvcConfigurerAdapter  【已经过时】 3. 继承WebMvcConfiguratiWebonSupport 【推荐】 4. 实现WebMvcConfigurer接口 【推荐】 WebMvcConfiguratiWebonSupport 与 WebMvcConfigurer 区别

    2024年02月05日
    浏览(42)
  • Nginx访问静态资源配置

    关于 alias和root配置的说明: 一般情况下,在nginx配置中的良好习惯是: 1)在location /中,即路径为“ / ”时, 配置root目录; 2)在location /path中,即路径包含指定内容,如“ localtion /imgs ”时, 配置alias虚拟目录。

    2024年02月09日
    浏览(32)
  • springboot 项目访问静态资源遇到的问题,WebMvcConfigurer和WebMvcConfigurationSupport

    之前发过通过继承WebMvcConfigurationSupport来访问静态资源的文章——img标签访问静态资源,代码如下 这个方法是可行的,但会带来一个小问题。 像这些本身就要访问静态资源的,它们一般是实现了WebMvcConfigurer,而不是继承WebMvcConfigurationSupport。 当我们用上面代码中的方法访问

    2024年01月21日
    浏览(44)
  • tomcat配置静态资源访问(亲测ok版)

    最近偶尔接收一个ssm+jsp的项目,因为之前的文件上传都是存在项目里,用tomcat启动的话,往往不能实时加载图片等资源 做一个用户头像切换功能,上传了文件后(上传是用的layui的组件,上传无问题)。但是加载的时候,必须重新启动项目才可以。我靠,这怎么行? 这里的

    2024年02月10日
    浏览(33)
  • SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问

    使用springboot开发一个项目,开发文件上传的时候,通常会将上传的文件存储到资源目录下的static里面,然后在本地测试上传文件功能没有问题,但是将项目打成jar包放到服务器上运行的时候就会报错,找不到对应目录。或者可以将上传文件存储到和jar包同级的目录下,但是无

    2024年02月12日
    浏览(47)
  • springboot-静态资源目录的配置

    配置节点:spring.web.resources.static-locations 值为要配置的静态资源存放目录 如: 以上配置中,设置静态资源目录为src/main/resources/test/目录。 假如在test目录下存放文件test.txt,程序启动后,便能通过浏览器访问ip:port/test.txt访问文件。 新建WebMvcConfig类,继承WebMvcConfigurationSupport类

    2024年02月16日
    浏览(30)
  • Spring boot之WEB 开发-静态资源访问--自定义转换器--处理JSON--内容协商

    在线文档: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-web-applications 1. 只要静态资源放在类路径下: /static 、/public 、/resources 、/META-INF/resources可以被直接访问- 对应文件WebProperties.java 2. 常见静态资源:JS、CSS 、图片(.jpg .png .gif .bmp .svg)、字体

    2024年02月09日
    浏览(29)
  • idea中没有tomcat,tomcat配置,以及访问静态资源

    1.点击add configurations 2.如下所示 选择tomcat server 3. 配置tomcat 正常情况下 , URL为http://localhost:8080/,Application context就是:/ URL为http://localhost:8080/XXX,Application context就是:/XXX Server中的URL: tomcat启动后,自动跳转的url Deployment中的Application context: 项目实际可以访问到的url 如果是

    2024年01月18日
    浏览(38)
  • nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介

    目录 一.基本安全优化 1.隐藏nginx软件版本信息 2.更改源码来隐藏软件名和版本 (1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改 (2)第二个文件 (3)第三个文件,内置响应信息页面 (4)第四个文件 (5)重新编译安装并重启 3.更改nginx服务的默

    2024年02月13日
    浏览(29)
  • 记录使用nginx部署静态资源流程,以及遇到的访问静态资源404问题

    将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署实现 动静分离 ,提高用户访问静态代码的速度,降低对后台应用访问,减轻后台服务器的压力。 这里我选择放在了 html文件夹 下,(也可以放在和html文件夹同级,或其它位置 打开 conf文件夹 打开总配置文

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包