Spring – ResourceBundle MessageSource PropertiesFile Esempio

Introduzione

In Spring, esiste un meccanismo di mapping delle risorse. Ossia ad esempio tutte le url del tipo ..WEB_INF/resource/…..
possono essere automaticamente trasformate in ./style/…
Esiste ovviamente anche un meccanismo per i file di properties.

Creazione Progetto

Dal meù File/New/Other  cliccare su “Maven Project

 

Selezionare  “Create a simple project (skip archetype selection)

 

 

Inserire i seguenti valori:
Group ID: iljavarolo
Artifact ID: SpringMVCResource
Packaging: war

Cliccare su “Finish

Il progetto creato dovrebbe avere una struttura del genere:

 

Se non esiste la cartella WEB-INF crearla.

 

Configurazione Spring

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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>iljavarolo</groupId>
  <artifactId>springuploadfile</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>springuploadfile</name>
    <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.1.4.RELEASE</version>
        </dependency>
 
        <!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
 
        <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
 
 
        <!-- Apache Commons FileUpload -->
        <!-- http://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
 
        <!-- Apache Commons IO -->
        <!-- http://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
 
 
    </dependencies>
 
 
 
    <build>
        <finalName>SpringMVCFileUpload</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>

            </plugin>
        </plugins>
    </build>
</project>

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   version="3.0">
 
   <display-name>Archetype Created Web Application</display-name>
   <servlet>
       <servlet-name>spring-mvc</servlet-name>
       <servlet-class>
           org.springframework.web.servlet.DispatcherServlet
       </servlet-class>
       <load-on-startup>1</load-on-startup>
   </servlet>
 
   <servlet-mapping>
       <servlet-name>spring-mvc</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>
 
   <!-- Other XML Configuration -->
   <!-- Load by Spring ContextLoaderListener -->
   <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>
          /WEB-INF/root-context.xml
        </param-value>        
   </context-param>
 
 
   <!-- Spring ContextLoaderListener -->
   <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
 
</web-app>

da notare che nel web.xml si definiscono i due file di configurazione di Spring

  •          /WEB-INF/spring-security.xml
  •          /WEB-INF/root-context.xml

Inoltre, la DispatcherServlet di Spring leggerà il suo file di configurazione in base al principio {servlet-name} ==> /WEB-INF/{servlet-name}-servlet.xml, quindi in questo caso la servlet name vale “spring-mvc”   e il file avrà il nome di “spring-mvc-servlet.xml

root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
 
   <!-- Empty -->
 
</beans>

spring-mvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.1.xsd  
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.1.xsd  
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
 
    <!-- Package Scan -->
    <context:component-scan base-package="iljavarolo" />
     
    <!-- Enables the Spring MVC Annotation Configuration -->
    <context:annotation-config />
     
    <!-- Important!! -->
    <!-- Default Servlet Handler (For Resources *.css, *.js, image,..) -->
    <mvc:default-servlet-handler />
       <mvc:annotation-driven />    
 
    <!-- Config resource mapping -->
    <mvc:resources mapping="/styles/**" location="/WEB-INF/resources/css/" />
     
     
    <!-- Config Properties file -->
    <bean id="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list><value>classpath:ApplicationRB.properties</value></list>
        </property>
    </bean>
 
 
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 
        <property name="prefix">
            <value>/WEB-INF/pages/</value>
        </property>
 
        <property name="suffix">
            <value>.jsp</value>
        </property>
         
        <property name="exposedContextBeanNames">
            <list><value>appProperties</value></list>
        </property>
    </bean>
 
 
     
</beans>

Configurazione Risorse e Properties Files

Nel spring-mvc-servlet.xml, con questa dichiarazione

   <!-- Enables the Spring MVC Annotation Configuration -->
   <context:annotation-config />

si mappa qualsiasi url che comincia con la parola styles, seguita da qualsiasi cosa, con /WEB-INF/resources/css/

quindi se digito un url del tipo:

http://localhost:8080/SpringMVCResource/styles/common.css

verrà ridefinita con

http://localhost:8080/SpringMVCResource/WEB-INF/resources/css/common.css

Il file di properties, ApplicationRB.properties, verrà indicato, sempre nel spring-mvc-servlet.xml, con la seguente dichiarazione:

    <!-- Config Properties file -->
    <bean id="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list><value>classpath:ApplicationRB.properties</value></list>
        </property>
    </bean>

ApplicationRB.properties

text.loginPrompt=Enter user name and password
text.userName=User Name
text.password=Password

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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 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>
 
    <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>

resourceBundleTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring MVC Resource Bundle example</title>
 
 
</head>
<body>
 
   <h2>${appProperties['text.loginPrompt']}</h2>
    
    ${appProperties['text.userName']} <input type="text" name="userName"> <br>
    ${appProperties['text.password']} <input type="password" name="password"> <br>
     
     
</body>
</html>

Classi Java

MyController.java

package iljavarolo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class MyController {
 
    @RequestMapping(value = "/staticResourceTest")
    public String staticResource(Model model) {
        return "staticResourceTest";
    }
 
    @RequestMapping(value = "/resourceBundleTest")
    public String resourceBundle(Model model) {
        return "resourceBundleTest";
    }
}

Build  Applicazione

Buildare l’intero progetto, cliccando su run As–>Maven Install

Dal menù “Run Configuration” settare la seguente configurazione per l’avvio:

inserire i seguenti valori:
Name: Run SpringMVCSecurityXML
Base directory: ${workspace_loc:/SpringMVCSecurityXML}
Goals: tomcat7:run

Buildare l’intero progetto cliccando su “Run“:

Avvio Applicazione

digitare nel browser questa url:

http://localhost:8080/SpringMVCResource/styles/common.css

se tutto è stato fatto correttamente apparirà questa schermata:

Per testare le staticResource:

http://localhost:8080/SpringMVCResource/staticResourceTest

Per testare i file di properties, digitare:

http://localhost:8080/SpringMVCResource/resourceBundleTest

Download sorgenti intero progetto


Lascia un commento

Il tuo indirizzo email non sarà pubblicato.