第一种方式:

                            

项目运行效果为

                          

是什么原因呢?

我们打开 WebMvcAutoConfiguration 类

有下面一段代码

       @Bean
        public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) {
            return new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
        }
 
 
        private Optional<Resource> getWelcomePage() {
            String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());
            return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
        }
 
        private Resource getIndexHtml(String location) {
            return this.resourceLoader.getResource(location + "index.html");
        }

 

这段代码是注册一个返回index.html的 java bean
this.mvcProperties.getStaticPathPattern()  打开发现   this.staticPathPattern = "/**";
就是在项目根目录下查找 index.html 如果找到则跳转相应的index.html页面
 

如果我们想访问 templates 下面的index.html 也不删除static下面的 index.html 页面,那能不能实现呢?

 答案是肯定的
首先第一种方式:

@Controller
public class HelloController {
    
    @RequestMapping(value = {"/","/index.html"})
    public String index(){
        return "index";
    }
 
}
  • 当项目启动 controller 跳转到 templates 下面的页面
  • 这种方式是不推荐使用的,推荐使用下面这一种

效果图为

                                

第二种方式:
 

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
 
    /**
     * 拦截某个请求跳转固定位置
     *
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //super.addViewControllers(registry);
        registry.addViewController("/nihao").setViewName("success");
 
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
    }
}
  • 因为 spring 5抛弃了WebMvcConfigurerAdapter  使用 WebMvcConfigurationSupport 代替了它
  • 这个方法的作用就是监听某个请求.返回指定的页面

运行效果为

                         

package com.ruoyi.framework.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.ruoyi.common.config.Global;

/**
 * 通用配置
 * 
 * @author ruoyi
 */
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
    /**
     * 首页地址
     */
    @Value("${shiro.user.indexUrl}")
    private String indexUrl;

    /**
     * 默认首页的设置,当输入域名是可以自动跳转到默认指定的网页
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry)
    {
        registry.addViewController("/").setViewName("forward:" + indexUrl);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        /** 文件上传路径 */
        registry.addResourceHandler("/profile/**").addResourceLocations("file:" + Global.getProfile());
        registry.addResourceHandler("/video/**").addResourceLocations("file:" + Global.getVideoProfile());

        /** swagger配置 */
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐