Spring引导服务静态资源 - sitemap.xml

时间:2016-10-20 09:13:58

标签: java spring jsp spring-mvc spring-boot

我使用JSP作为视图技术在spring boot 1.3.3.RELEASE上工作。

JSP页面,CSS,JS和图像等静态资源正在正确加载。但是如何提供静态资源,如txt或xml(robots.txt,sitemap.xml)

我的控制器正在处理请求并尝试呈现jsp视图。

Application.java

@SpringBootApplication
public class SampleWebJspApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SampleWebJspApplication.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleWebJspApplication.class, args);
    }

}

控制器

@Controller
public class WelcomeController {

    @RequestMapping(value = "/{name}")
    public String welcome(@PathVariable String name) {       
        return name;
    }
}

application.properties

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp

以下网址由控制器处理并呈现home.jsp

/home  
/home.css
/home.js
/home.txt 
/home.xml 

以下网址无效

/home.jsp - 404 
/robots.txt - 404 - trying to render robots.jsp
/sitemap.xml - 404 - trying to render sitemap.jsp

3 个答案:

答案 0 :(得分:1)

Spring-Boot不再使用jsp,他们试图强迫你使用百日咳或其他模板引擎,静态资源可从某些目录获得。 / static就是其中之一。并且百万美元文件需要在模板文件夹中。

我最新弹簧靴的设置如下

  

应用/ SRC /主/资源/静态

                          /templates

                          application.properties

对于其他的,您需要为其他位置/robots.txt等添加资源处理程序

答案 1 :(得分:0)

Jsp仍适用于春季靴子。

不确定您是否已经这样做但重要的是将这些依赖项添加到您的maven或gradle中。

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

答案 2 :(得分:0)

您已使用此行spring.mvc.view.prefix配置了Spring的View Resolver,因此控制器返回的每个响应都将链接到视图Resolver,后者将尝试根据/WEB_INF/JSP查找资源您返回的字符串名称(不确定您是否已将此文件夹放在资源下,因为您的应用程序是Spring引导程序,而不是Java Web应用程序)。为了做到这一点并保留视图解析器,可以连接另一个servlet以共享静态资源,或者将ResourcesController连接到默认位置。类似的东西:

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
        "classpath:/myStaticResources/", "classpath:/static/" };

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}
}  

更多信息herehere

Spring Boot也为你提供了这样的方式:

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

有关应用程序属性的更多信息here