2016-10-20 105 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