无法解析名为'dispatcherServlet'的servlet中名为'HelloWorld'的视图

时间:2017-08-01 13:40:01

标签: spring spring-boot vue.js

我刚开始学习Spring Boot。

我想显示html页面。

但它不起作用。

如果我将HelloWorld.html更改为HelloWorld.ftl我可以显示ftl页面,但vue.js不是解析文件。

以下是我的Spring启动配置文件和控制器。

应用:

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/**

资源:static/js/vue.jstempates/HelloWorld.html

控制器:

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "HelloWorld";
    }
}

1 个答案:

答案 0 :(得分:0)

Spring boot提供即插即用型设施,是春季靴子的美感。同样适用于从具有弹簧启动的Web应用程序中的位置提供静态内容。默认情况下,spring boot将类路径中的静态资源作为默认属性提供:

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

默认的静态路径模式是:

spring.mvc.static-path-pattern=/**

但优良做法是提供非默认值。

然而,spring boot还通过实现WebMvcConfigurerAdapter以编程方式提供该配置的自定义。

@EnableAutoConfiguration
public class AddCustomLocations {
    @Bean
    WebMvcConfigurer configurer () {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addResourceHandlers (ResourceHandlerRegistry registry) {
                registry.addResourceHandler("/pages/**").
                          addResourceLocations("classpath:/my-custom-location/");
            }
        };
    }

    public static void main (String[] args) {

        SpringApplication app =
                  new SpringApplication(AddCustomLocations.class);
        app.run(args);
    }
}

现在添加新的静态内容,例如src/main/resources/new-custom-location/page1.js,当找到类似http://localhost:8080/pages/page1.js的网址格式时,page1.js将作为静态资源。

现在templates/HelloWorld.html需要修改默认属性(假设文件夹templates已存在):

spring.mvc.view.prefix=/templates/
spring.mvc.view.suffix=.html

目录/templates/下的相应html页面将由viewResolver呈现。

编辑答案:

如果您使用@EnableWebMvc,请将其删除。你的问题应该得到解决。 如果仍未解决问题,则覆盖类addViewControllers(ViewControllerRegistry registry)的{​​{1}}方法,就像我们在早期代码中所做的那样。在WebMvcConfigurerAdapter方法之后,在上面的代码中添加以下代码段。

addResourceHandlers (ResourceHandlerRegistry registry)

前缀@Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); registry.addViewController("/hello").setViewName("hello"); registry.addViewController("/test").setViewName("testPage"); } 和后缀/templates/将由视图解析程序添加。