2016-10-20 106 views
0

我在spring引导1.3.3.RELEASE上使用JSP作为视图技术。Spring引导服务静态资源 - sitemap.xml

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 
+0

你有设计你的控制器来处理这些URL,现在你很惊讶它的行为你设计它的行为方式? – zeroflagL

回答

0

弹簧引导没有做JSP的了,他们正试图强迫你使用thymeleaf或其他模板引擎,静态资源可从某些目录。 /静态就是其中之一。并且thymeleaf文件需要位于模板文件夹中。

我对我的最新春季启动设置如下

应用/ src目录/主/资源/静态

      /templates 

          application.properties 

其他那些你需要添加一个resourcehandler为其他地址/robots.txt等

+0

我在静态文件夹下有robotx.txt和sitemap.xml。但它仍然会尝试加载* .jsp。但奇怪的是它不处理* .jsp – Mukun

+0

如果你可以在github上联系我,我可以让你访问我的工作库,你可以看到所有的配置,而不通过互联网共享给世界+狗,github的名字是theresajayne –

+0

是否可以在Git中向用户发送消息。 ?我没有看到任何选择。除了跟随和创造问题和拉动请求。 – Mukun

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> 
+0

我已经有了这些依赖和JSP正在工作。在提供静态资源(如文本文件或xml文件)时出现问题。 – Mukun

+0

然后,特蕾莎可能是正确的一些限制。请参阅有关限制的官方说明。它表示:如果可能,应该尽量避免使用JSP,但将它们与嵌入式servlet容器一起使用时存在一些已知限制。 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations。它没有说明任何关于txt或xml类型的静态资源。 –

0

你这一行spring.mvc.view.prefix配置Spring的视图解析器,所以你的控制器返回的每个响应,会被链接到视图解析器,这将尝试基于字符串的名字你找到/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.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/

更多信息here