参考文章

默认

  • 上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources >resources/resources > static > public,在这四个目录中都写一个index.html,访问localhost:8080,会访问到META-INF/resource下的index.html,而如果该目录为空则会访问resource下的index.html,像这样依次去寻找资源来展示。

    开发存放目录

  • 一般来说,开发时会把不需要权限就可以访问的页面直接放在static下面,比如index.html等,还有css、js、images文件夹都会建在static下面。而需要权限限制的页面放在resources/templates下面,这个位置相当于WEB-INF,这些文件一般需要通过controller来进行跳转。
  • 如果一定要把默认主页这种可以直接访问的页面都放在templates下的话,那可以配置个controller保证访问得到它(一般我们会顺便获取一些信息,比如文件列表或者评委名单之类,带回到页面显示):

    @Controller
    @RequestMapping
    public class IndexController {
    
        @RequestMapping("/index.html")
        public ModelAndView index(){
            ModelAndView modelAndView = new ModelAndView("index");
            ……
            return modelAndView;
        }
    }
    
  • 当然我们可以通过下面这种方法改变这种默认的配置

    # 默认值为 /**
    spring.mvc.static-path-pattern=
    # 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
    spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
    
  • 或者还可以写个class继承自WebMvcConfigurerAdapter来指定方式访问页面,参见下面指定方式访问静态资源

    自定义

  • 上面主要是修改类似默认主页这样的静态资源的访问方式,如果现在我们在项目中放了一张图片,这不是springboot能管理得了的,那么我们应该如何访问它呢?

    指定方式访问静态资源

  • 这就是自己额外增加配置的情况,我们可以通过自定义资源映射来定义访问的方式,具体方法则是重写一个叫做addResourceHandlers方法。

    @Configuration
    public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
        /**
        * 配置静态访问资源
        * @param registry
        */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/");
            super.addResourceHandlers(registry);
        }
    }
    
  • 通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。我们访问resources下自定义my文件夹中的elephant.jpg 图片的地址为 http://localhost:8080/my/elephant.jpg
  • 如果你想指定外部的目录也很简单,直接addResourceLocations指定即可,代码如下:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/my/**").addResourceLocations("file:E:/my/");
        super.addResourceHandlers(registry);
    }
    

    指定方式访问页面

在thymeleaf的默认路径resources/templates下找login页面

  • 一般会报下面这种错误可能是系统找到了模板页,但却不是请求的模板页,或者是th标签使用错误,比如忘记引入命名空间之类。

    拦截器

  • 实现步骤:
  1. 实现HandlerInterceptor接口
  2. 重写WebMvcConfigyurerAdapter的addInterceptors方法,将自定义的拦截器类添加进来
  • 代码实例:SpringMvc02/interceptor/MyInterceptor、domain/MyWebMvcConfigurerAdapter、template/login.html、controller/LearnResourceController(功能:登录后访问学习资料页面,未登录直接访问学习资料页面则会直接跳转登录页面;这里有个小bug好像登录不上去,但拦截的功能是实现了的)

    配置文件

    存放目录

  • 项目根目录下
  • 项目根目录中config目录下
  • 项目的resources目录下
  • 项目resources目录中config目录下

    读取顺序

  1. config/application.properties(项目根目录中config目录下)
  2. config/application.yml
  3. application.properties(项目根目录下)
  4. application.yml
  5. resources/config/application.properties(项目resources目录中config目录下)
  6. resources/config/application.yml
  7. resources/application.properties(项目的resources目录下)
  8. resources/application.yml