Настроить статические ресурсы в Spring MVC
View more Tutorials:

Статья основана на:
-
Eclipse 4.6 (NEON)
-
Spring 4 MVC
В данной статье я покажу вам как конфигурировать источники статических данных в Spring MVC, источники статических данных обычно являются файлами изображения (image), файлы css, и javascript,...
Spring MVC позволяет вам сопоставлять между URL и определенным местоположением источника данных. Вы можете посмотреть изображение ниже:

- File/New/Other..



Ввести:
- Group ID: org.o7planning
- Artifact ID: SpringMVCStaticResource
- Package: org.o7planning.tutorial.springmvcresource

Project создан.

Do not worry with the error message when Project has been created. The reason is that you have not declared Servlet library.
Примечание:
Eclipse может создать project Maven с неправильной структурой. Вам нужно перепроверить и исправить ошибку.
Eclipse может создать project Maven с неправильной структурой. Вам нужно перепроверить и исправить ошибку.

Удостоверьтесь, что ваш project использует Java >=6.
Project properties:

Конфигурация web.xml используя Web App >= 3.
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVCResource</display-name> </web-app>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.o7planning</groupId> <artifactId>SpringMVCResource</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SpringMVCResource Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Servlet API --> <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- Jstl for jsp page --> <!-- http://mvnrepository.com/artifact/javax.servlet/jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- JSP API --> <!-- http://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <!-- Spring dependencies --> <!-- http://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!-- http://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.3.RELEASE</version> </dependency> </dependencies> <build> <finalName>SpringMVCResource</finalName> <plugins> <!-- Config: Maven Tomcat Plugin --> <!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <!-- Config: contextPath and Port (Default - /SpringMVCResource : 8080) --> <!-- <configuration> <path>/</path> <port>8899</port> </configuration> --> </plugin> </plugins> </build> </project>

SpringWebAppInitializer.java
package org.o7planning.springmvcresource.config; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; public class SpringWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext(); appContext.register(ApplicationContextConfig.class); ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDispatcher", new DispatcherServlet(appContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } }
ApplicationContextConfig.java
package org.o7planning.springmvcresource.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @ComponentScan("org.o7planning.springmvcresource.*") public class ApplicationContextConfig { @Bean(name = "viewResolver") public InternalResourceViewResolver getViewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/pages/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
WebMvcConfig.java
package org.o7planning.springmvcresource.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { // Static Resource Config @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // Css resource. registry.addResourceHandler("/styles/**") // .addResourceLocations("/WEB-INF/resources/css/").setCachePeriod(31556926); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }
Некоторые примечания:
Конфигурация Static Resource:
// Css resource. registry.addResourceHandler("/styles/**") // .addResourceLocations("/WEB-INF/resources/css/");


MyController.java
package org.o7planning.springmvcresource.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class MainController { @RequestMapping(value = "/staticResourceTest") public String staticResource(Model model) { return "staticResourceTest"; } }
Static Resource

scripts/common.js
function sayHello() { alert("Hello from JavaScript"); }
/WEB-INF/resource/css/commons.css
.button { font-size: 20px; background: #ccc; } .red-text { color: red; font-size: 30px; } .green-text { color: green; font-size: 20px; }
Views

staticResourceTest.jsp
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Spring MVC Resource example</title> <script type="text/javascript" src="${pageContext.request.contextPath}/scripts/common.js"></script> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/styles/common.css"> </head> <body> <pre> Config: /styles/** ==> /WEB-INF/resources/css/ ---------------------------------------------- /styles/common.css ==> /WEB-INF/resources/css/common.css /styles/path1/abc.css ==> /WEB-INF/resources/css/path1/abc.css /styles/path1/path2/abc.css ==> /WEB-INF/resources/css/path1/path2/abc.css </pre> <div class="red-text">Red text</div> <br> <div class="green-text">Green text</div> <br> <input type="button" class="button" onclick="sayHello();" value="Click me!"> </body> </html>
index.jsp
<html> <body> <a href="staticResourceTest">staticResourceTest</a> </body> </html>
В первый раз, перед тем как запустить приложение вам нужно build (построить) весь project.
Нажмите на правую кнопку мыши на project выберите:


Конфигурация запуска:


Ввести:
- Name: Run SpringMVCResource
- Base directory: ${workspace_loc:/SpringMVCResource}
- Goals: tomcat7:run

Нажмите Run для запуска:


Static Resource Test:


