MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

  • Java
  • Spring

Contents

  1. Spring
    1. ApplicationContextAware
    2. ResourceLoaderAware
    3. EnvironmentAware
    4. REST service (SpringBoot)
    5. Tomcat REST service
    6. Spring MVC (SpringBoot)
    7. testSpringMVCJSP
    8. testSpringThymeleaf ( Spring MVC + Thymeleaf + Bootstrap + JQuery + Tomcat )
    9. spring-mvc-html

Spring

Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.

http://spring.io/guides

http://spring.io/guides/gs/serving-web-content/

http://spring.io/guides/gs/convert-jar-to-war-maven/

ApplicationContextAware

  • https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContextAware.html

ApplicationContextAware, Interface to be implemented by any object that wishes to be notified of the ApplicationContext that it runs in.

   1 void setApplicationContext(ApplicationContext applicationContext)
   2 // applicationContext.getBean()
   3 // applicationContext.getEnvironment()
   4 

ResourceLoaderAware

  • https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ResourceLoaderAware.html

ResourceLoaderAware, Interface to be implemented by any object that wishes to be notified of the ResourceLoader (typically the ApplicationContext) that it runs in.

   1 void setResourceLoader(ResourceLoader resourceLoader)
   2 // resourceLoader.getClassLoader()
   3 // resourceLoader.getResource(String location)
   4 

EnvironmentAware

  • https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/Environment.html

EnvironmentAware, Interface to be implemented by any bean that wishes to be notified of the Environment that it runs in.

   1 void setEnvironment(Environment environment)
   2 // environment.containsProperty() 
   3 // environment.getProperty()
   4 // environment.getActiveProfiles()
   5 

REST service (SpringBoot)

spring.io/guides/gs/rest-service/

Structure

.
|-- pom.xml
|-- src
|   `-- main
|       `-- java
|           `-- hello
|               |-- Application.java
|               |-- Greeting.java
|               `-- GreetingController.java

Steps

   1 mkdir -p /tmp/greetingSpring
   2 mkdir -p /tmp/greetingSpring/src/main/java/hello
   3 mkdir -p /tmp/greetingSpring/target
   4 cd /tmp/greetingSpring

pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" 
   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   5 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   6   <modelVersion>4.0.0</modelVersion>
   7   <groupId>org.springframework</groupId>
   8   <artifactId>gs-rest-service</artifactId>
   9   <version>0.1.0</version>
  10   <parent>
  11     <groupId>org.springframework.boot</groupId>
  12     <artifactId>spring-boot-starter-parent</artifactId>
  13     <version>1.1.5.RELEASE</version>
  14   </parent>
  15   <dependencies>
  16     <dependency>
  17       <groupId>org.springframework.boot</groupId>
  18       <artifactId>spring-boot-starter-web</artifactId>
  19     </dependency>
  20   </dependencies>
  21 <properties>
  22 <start-class>hello.Application</start-class>
  23 </properties>
  24 <build>
  25 <plugins>
  26 <plugin>
  27 <artifactId>maven-compiler-plugin</artifactId>
  28 <version>2.3.2</version>
  29 </plugin>
  30 <plugin>
  31 <groupId>org.springframework.boot</groupId>
  32 <artifactId>spring-boot-maven-plugin</artifactId>
  33 </plugin>
  34 </plugins>
  35 </build>
  36 <repositories>
  37 <repository>
  38 <id>spring-releases</id>
  39 <url>http://repo.spring.io/libs-release</url>
  40 </repository>
  41 </repositories>
  42 <pluginRepositories>
  43 <pluginRepository>
  44 <id>spring-releases</id>
  45 <url>http://repo.spring.io/libs-release</url>
  46 </pluginRepository>
  47 </pluginRepositories>
  48 </project>

src/main/java/hello/Application.java

   1 package hello;
   2 
   3 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
   4 import org.springframework.boot.SpringApplication;
   5 import org.springframework.context.annotation.ComponentScan;
   6 
   7 @ComponentScan
   8 @EnableAutoConfiguration
   9 public class Application {
  10 
  11     public static void main(String[] args) {
  12         SpringApplication.run(Application.class, args);
  13     }
  14 }

src/main/java/hello/Greeting.java

   1 package hello;
   2 
   3 public class Greeting {
   4 
   5     private final long id;
   6     private final String content;
   7 
   8     public Greeting(long id, String content) {
   9         this.id = id;
  10         this.content = content;
  11     }
  12 
  13     public long getId() {
  14         return id;
  15     }
  16 
  17     public String getContent() {
  18         return content;
  19     }
  20 }

src/main/java/hello/GreetingController.java

   1 package hello;
   2 
   3 import java.util.concurrent.atomic.AtomicLong;
   4 import org.springframework.web.bind.annotation.RequestMapping;
   5 import org.springframework.web.bind.annotation.RequestParam;
   6 import org.springframework.web.bind.annotation.RestController;
   7 
   8 import org.springframework.web.context.request.async.DeferredResult;
   9 import java.util.concurrent.Callable;
  10 import java.util.concurrent.ExecutorService;
  11 import java.util.concurrent.Executors;
  12 
  13 @RestController
  14 public class GreetingController {
  15     private ExecutorService es =  Executors.newFixedThreadPool(50); 
  16 
  17     public class MyCall implements Runnable {
  18 
  19         private DeferredResult df; 
  20         private String template;
  21         private String name;
  22         private AtomicLong counter;
  23 
  24         public MyCall(DeferredResult df, String template, String name, AtomicLong counter){
  25           this.df = df;
  26           this.template=template;
  27           this.name=name;
  28           this.counter = counter;
  29         }
  30 
  31         @Override
  32         public void run(){
  33             Greeting g  = new Greeting(this.counter.incrementAndGet(), String.format(this.template, this.name));
  34             this.df.setResult(g);
  35         }
  36     }
  37 
  38     private static final String template = "Hello, %s!";
  39     private final AtomicLong counter = new AtomicLong();
  40 
  41     @RequestMapping("/greeting")
  42     public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
  43         return new Greeting(counter.incrementAndGet(), String.format(template, name));
  44     }
  45 
  46     @RequestMapping("/greetingdf")
  47     public DeferredResult<Greeting> greetingdf(@RequestParam(value="name", required=false, defaultValue="World") String name) {
  48         DeferredResult<Greeting> deferredResult = new DeferredResult<Greeting>();
  49         MyCall mc = new MyCall( deferredResult , template,name,counter  );
  50         es.execute(mc);
  51         return deferredResult;
  52     }
  53 }

Build with

  • mvn clean compile package

Run with:

  • jar -tf target/gs-rest-service-0.1.0.jar # check JAR contents
  • java -jar target/gs-rest-service-0.1.0.jar
  • open URL http://localhost:8080/greeting

Tomcat REST service

Structure

.
|-- pom.xml
|-- src
    `-- main
        `-- java
            `-- hello
                |-- Application.java
                |-- Greeting.java
                `-- GreetingController.java

pom.xml

   1 <project xmlns="http://maven.apache.org/POM/4.0.0" 
   2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   4 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   5     <modelVersion>4.0.0</modelVersion>
   6     <groupId>org.springframework</groupId>
   7     <artifactId>gs-rest-service-tomcat</artifactId>
   8     <version>0.1.0</version>
   9     <packaging>war</packaging>
  10 
  11     <parent>
  12         <groupId>org.springframework.boot</groupId>
  13         <artifactId>spring-boot-starter-parent</artifactId>
  14         <version>1.1.5.RELEASE</version>
  15     </parent>
  16 
  17     <dependencies>
  18         <dependency>
  19             <groupId>org.springframework.boot</groupId>
  20             <artifactId>spring-boot-starter-web</artifactId>
  21             <scope>compile</scope> 
  22         </dependency>
  23     </dependencies>
  24 
  25     <properties>
  26         <start-class>hello.Application</start-class>
  27     </properties>
  28     <build>
  29         <plugins>
  30             <plugin>
  31                 <artifactId>maven-compiler-plugin</artifactId>
  32                 <version>2.3.2</version>
  33             </plugin>
  34         </plugins>
  35     </build>
  36     <repositories>
  37         <repository>
  38             <id>spring-releases</id>
  39             <url>http://repo.spring.io/libs-release</url>
  40         </repository>
  41     </repositories>
  42     <pluginRepositories>
  43         <pluginRepository>
  44             <id>spring-releases</id>
  45             <url>http://repo.spring.io/libs-release</url>
  46         </pluginRepository>
  47     </pluginRepositories>
  48 </project>

src/main/java/hello/Application.java

   1 package hello;
   2 
   3 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
   4 import org.springframework.boot.SpringApplication;
   5 import org.springframework.context.annotation.ComponentScan;
   6 import org.springframework.boot.context.web.SpringBootServletInitializer;
   7 import org.springframework.boot.builder.SpringApplicationBuilder;
   8 import org.springframework.context.annotation.Configuration;
   9 
  10 @ComponentScan
  11 @EnableAutoConfiguration
  12 @Configuration
  13 public class Application  extends SpringBootServletInitializer  {
  14 
  15     public static void main(String[] args) {
  16         SpringApplication.run(appClass, args);
  17     }
  18 
  19     @Override
  20     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  21         return application.sources(appClass);
  22     }
  23 
  24     private static Class<Application> appClass = Application.class;
  25 }

src/main/java/hello/Greeting.java

   1 package hello;
   2 
   3 public class Greeting {
   4 
   5     private final long id;
   6     private final String content;
   7 
   8     public Greeting(long id, String content) {
   9         this.id = id;
  10         this.content = content;
  11     }
  12 
  13     public long getId() {
  14         return id;
  15     }
  16 
  17     public String getContent() {
  18         return content;
  19     }
  20 }

src/main/java/hello/GreetingController.java

   1 package hello;
   2 
   3 import java.util.concurrent.atomic.AtomicLong;
   4 import org.springframework.web.bind.annotation.RequestMapping;
   5 import org.springframework.web.bind.annotation.RequestParam;
   6 import org.springframework.web.bind.annotation.RestController;
   7 
   8 @RestController
   9 public class GreetingController {
  10 
  11     private static final String template = "Hello Tomcat, %s!";
  12     private final AtomicLong counter = new AtomicLong();
  13 
  14     @RequestMapping("/greetingTomcat")
  15     public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
  16         return new Greeting(counter.incrementAndGet(), String.format(template, name));
  17     }
  18 }

Build and deploy

  • mvn clean compile package install
  • cp target/gs-rest-service-tomcat-0.1.0.war /usr/local/tomcat/webapps/
  • cp target/gs-rest-service-tomcat-0.1.0.war /opt/apache-tomcat-7.0.53/webapps/ # in alternative
  • catalina.sh start
  • tail -f catalina.out
  • Open http://localhost:8080/gs-rest-service-tomcat-0.1.0/greetingTomcat

Spring MVC (SpringBoot)

Structure:

.
|-- pom.xml
|-- src
    `-- main
        |-- java
        |   `-- hello
        |       |-- Application.java
        |       `-- GreetingController.java
        `-- resources
            `-- templates
                `-- greeting.html
  • mkdir -p src/main/java/hello
  • mkdir -p src/main/resources/templates/
  • nano pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   4     <modelVersion>4.0.0</modelVersion>
   5     <groupId>org.springframework</groupId>
   6     <artifactId>gs-serving-web-content</artifactId>
   7     <version>0.1.0</version>
   8     <parent>
   9         <groupId>org.springframework.boot</groupId>
  10         <artifactId>spring-boot-starter-parent</artifactId>
  11         <version>1.1.8.RELEASE</version>
  12     </parent>
  13     <dependencies>
  14         <dependency>
  15             <groupId>org.springframework.boot</groupId>
  16             <artifactId>spring-boot-starter-thymeleaf</artifactId>
  17         </dependency>
  18     </dependencies>
  19     <properties>
  20         <start-class>hello.Application</start-class>
  21     </properties>
  22     <build>
  23         <plugins>
  24             <plugin>
  25                 <groupId>org.springframework.boot</groupId>
  26                 <artifactId>spring-boot-maven-plugin</artifactId>
  27             </plugin>
  28         </plugins>
  29     </build>
  30     <repositories>
  31         <repository>
  32             <id>spring-milestone</id>
  33             <url>http://repo.spring.io/libs-release</url>
  34         </repository>
  35     </repositories>
  36     <pluginRepositories>
  37         <pluginRepository>
  38             <id>spring-milestone</id>
  39             <url>http://repo.spring.io/libs-release</url>
  40         </pluginRepository>
  41     </pluginRepositories>
  42 </project>
  • nano src/main/java/hello/GreetingController.java

   1 package hello;
   2 
   3 import org.springframework.stereotype.Controller;
   4 import org.springframework.ui.Model;
   5 import org.springframework.web.bind.annotation.RequestMapping;
   6 import org.springframework.web.bind.annotation.RequestParam;
   7 
   8 @Controller
   9 public class GreetingController {
  10 
  11     @RequestMapping("/greeting")
  12     public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
  13         model.addAttribute("name", name);
  14         return "greeting";
  15     }
  16 
  17 }
  • nano src/main/resources/templates/greeting.html

   1 <!DOCTYPE HTML>
   2 <html xmlns:th="http://www.thymeleaf.org">
   3 <head>
   4     <title>Getting Started: Serving Web Content</title>
   5     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   6 </head>
   7 <body>
   8     <p th:text="'Hello, ' + ${name} + '!'" />
   9 </body>
  10 </html>
  • nano src/main/java/hello/Application.java

   1 package hello;
   2 
   3 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
   4 import org.springframework.boot.SpringApplication;
   5 import org.springframework.context.annotation.ComponentScan;
   6 
   7 @ComponentScan
   8 @EnableAutoConfiguration
   9 public class Application {
  10 
  11     public static void main(String[] args) {
  12         SpringApplication.run(Application.class, args);
  13     }
  14 
  15 }
  • mvn clean compile package install
  • java -jar target/gs-serving-web-content-0.1.0.jar
  • Open http://localhost:8080/greeting?name=Yooo

testSpringMVCJSP

Structure Maven:

.
|-- pom.xml
|-- src
|   `-- main
|       |-- java
|       |   `-- org
|       |       `-- allowed
|       |           `-- bitarus
|       |               `-- hello
|       |                   `-- HelloController.java
|       `-- webapp
|           `-- WEB-INF
|               |-- mvc-dispatcher-servlet.xml
|               |-- pages
|               |   `-- greeting.jsp
|               `-- web.xml

pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" 
   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   5 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   6     <modelVersion>4.0.0</modelVersion>
   7     <groupId>org.allowed.bitarus</groupId>
   8     <artifactId>testSpringMVCJSP</artifactId>
   9     <version>0.1.0</version>
  10     <packaging>war</packaging>
  11 
  12     <dependencies>
  13                 <dependency>
  14                         <groupId>org.springframework</groupId>
  15                         <artifactId>spring-core</artifactId>
  16                         <version>4.1.4.RELEASE</version>
  17                 </dependency>
  18  
  19                 <dependency>
  20                         <groupId>org.springframework</groupId>
  21                         <artifactId>spring-web</artifactId>
  22                         <version>4.1.4.RELEASE</version>
  23                 </dependency>
  24  
  25                 <dependency>
  26                         <groupId>org.springframework</groupId>
  27                         <artifactId>spring-webmvc</artifactId>
  28                         <version>4.1.4.RELEASE</version>
  29                 </dependency>
  30     </dependencies>
  31 </project>

HelloController.java

   1 package org.allowed.bitarus.hello;
   2 
   3 import org.springframework.stereotype.Controller;
   4 import org.springframework.ui.Model;
   5 import org.springframework.web.bind.annotation.RequestMapping;
   6 import org.springframework.web.bind.annotation.RequestParam;
   7 
   8 @Controller
   9 public class HelloController {
  10 
  11     @RequestMapping("/hello")
  12     public String hellox(@RequestParam(value="name", required=false,  defaultValue="World") String name, Model model) {
  13         model.addAttribute("name", name);
  14         return "greeting";
  15     }
  16 
  17 }

mvc-dispatcher-servlet.xml

   1 <beans xmlns="http://www.springframework.org/schema/beans"
   2         xmlns:context="http://www.springframework.org/schema/context"
   3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4         xsi:schemaLocation="
   5         http://www.springframework.org/schema/beans     
   6         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   7         http://www.springframework.org/schema/context 
   8         http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   9         <context:component-scan base-package="org.allowed.bitarus.hello" />
  10         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  11                 <property name="prefix">
  12                         <value>/WEB-INF/pages/</value>
  13                 </property>
  14                 <property name="suffix">
  15                         <value>.jsp</value>
  16                 </property>
  17         </bean>
  18 </beans>

greeting.jsp

   1 <!DOCTYPE HTML>
   2 <html xmlns:th="http://www.thymeleaf.org">
   3 <head>
   4     <title>Getting Started: Serving Web Content</title>
   5     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   6 </head>
   7 <body>
   8     <p>Hello ${name}</p>
   9 </body>
  10 </html>

web.xml

   1 <web-app id="WebApp_ID" version="2.4"
   2         xmlns="http://java.sun.com/xml/ns/j2ee" 
   3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   5         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   6  
   7         <display-name>Spring MVC Application + JSP</display-name> 
   8         <servlet>
   9                 <servlet-name>mvc-dispatcher</servlet-name>
  10                 <servlet-class>
  11                        org.springframework.web.servlet.DispatcherServlet
  12                 </servlet-class>
  13                 <load-on-startup>1</load-on-startup>
  14         </servlet>
  15         <servlet-mapping>
  16                 <servlet-name>mvc-dispatcher</servlet-name>
  17                 <url-pattern>/</url-pattern>
  18         </servlet-mapping>
  19         <context-param>
  20                 <param-name>contextConfigLocation</param-name>
  21                 <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
  22         </context-param>
  23         <listener>
  24                 <listener-class>
  25                       org.springframework.web.context.ContextLoaderListener
  26                 </listener-class>
  27         </listener>
  28 </web-app>
  • mvn clean compile package
  • Access in Tomcat http://localhost:8081/testSpringMVCJSP-0.1.0/hello?name=asd

testSpringThymeleaf ( Spring MVC + Thymeleaf + Bootstrap + JQuery + Tomcat )

Maven Structure

.
|-- pom.xml
|-- src
|   `-- main
|       |-- java
|       |   `-- org
|       |       `-- allowed
|       |           `-- bitarus
|       |               `-- hello
|       |                   `-- HelloController.java
|       `-- webapp
|           |-- WEB-INF
|           |   |-- mvc-dispatcher-servlet.xml
|           |   |-- pages
|           |   |   |-- greeting.html
|           |   |-- web.xml
|           |-- css
|           |   `-- bootstrap-3.3.2.min.css
|           `-- js
|               |-- bootstrap-3.3.2.min.js
|               |-- greeting.js
|               `-- jquery-1.11.2.min.js

pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" 
   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   5 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   6     <modelVersion>4.0.0</modelVersion>
   7     <groupId>org.allowed.bitarus</groupId>
   8     <artifactId>testSpringMVCThymeleaf</artifactId>
   9     <version>0.1.0</version>
  10     <packaging>war</packaging>
  11     <dependencies>
  12         <dependency>
  13                 <groupId>org.springframework</groupId>
  14                 <artifactId>spring-core</artifactId>
  15                 <version>4.1.4.RELEASE</version>
  16         </dependency>
  17         <dependency>
  18                 <groupId>org.springframework</groupId>
  19                 <artifactId>spring-web</artifactId>
  20                 <version>4.1.4.RELEASE</version>
  21         </dependency>
  22         <dependency>
  23                 <groupId>org.springframework</groupId>
  24                 <artifactId>spring-webmvc</artifactId>
  25                 <version>4.1.4.RELEASE</version>
  26         </dependency>
  27         <dependency>
  28             <groupId>org.thymeleaf</groupId>
  29             <artifactId>thymeleaf-spring4</artifactId>
  30             <version>2.1.4.RELEASE</version>
  31         </dependency>
  32         <dependency>
  33             <groupId>org.slf4j</groupId>
  34             <artifactId>slf4j-api</artifactId>
  35             <version>1.7.10</version>
  36         </dependency>
  37         <dependency>
  38             <groupId>org.slf4j</groupId>
  39             <artifactId>slf4j-log4j12</artifactId>
  40             <version>1.7.10</version>
  41         </dependency>
  42     </dependencies>
  43 </project>

HelloController.java

   1 package org.allowed.bitarus.hello;
   2 
   3 import org.springframework.stereotype.Controller;
   4 import org.springframework.ui.Model;
   5 import org.springframework.web.bind.annotation.RequestMapping;
   6 import org.springframework.web.bind.annotation.RequestParam;
   7 
   8 @Controller
   9 public class HelloController {
  10 
  11     @RequestMapping("/hello")
  12     public String hellox(@RequestParam(value="name", required=false,  defaultValue="World") String name, Model model) {
  13         model.addAttribute("name", name);
  14         return "greeting";
  15     }
  16 
  17 }

mvc-dispatcher-servlet.xml

   1 <beans xmlns="http://www.springframework.org/schema/beans"
   2         xmlns:context="http://www.springframework.org/schema/context"
   3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4     xmlns:mvc="http://www.springframework.org/schema/mvc"
   5         xsi:schemaLocation="
   6         http://www.springframework.org/schema/beans     
   7         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   8         http://www.springframework.org/schema/context 
   9         http://www.springframework.org/schema/context/spring-context-3.0.xsd
  10         http://www.springframework.org/schema/mvc
  11         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12         <context:component-scan base-package="org.allowed.bitarus.hello" />
  13    <!-- Enabling Spring MVC configuration through annotations -->
  14     <mvc:annotation-driven />
  15     <!--  Mapping Static Resources -->
  16     <mvc:resources mapping="/js/**" location="/js/" />
  17     <mvc:resources mapping="/css/**" location="/css/" />
  18     
  19     <bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
  20         <property name="prefix" value="/WEB-INF/pages/" />
  21         <property name="suffix" value=".html" />
  22         <property name="templateMode" value="HTML5" />
  23         <property name="cacheable" value="false" />
  24         <property name="characterEncoding" value="UTF-8" />
  25     </bean>
  26     <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
  27         <property name="templateResolver" ref="templateResolver" />
  28     </bean>
  29     <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
  30         <property name="templateEngine" ref="templateEngine" />
  31         <property name="order" value="1" />
  32         <property name="characterEncoding" value="UTF-8" />
  33     </bean>    
  34 </beans>

greeting.html

   1 <!DOCTYPE HTML>
   2 <html xmlns:th="http://www.thymeleaf.org">
   3     <head>
   4         <title>Getting Started: Serving Web Content</title>
   5         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
   6         <meta name="viewport" content="width=device-width, initial-scale=1"/>
   7         <script th:src="@{/js/jquery-1.11.2.min.js}"></script>
   8         <script th:src="@{/js/bootstrap-3.3.2.min.js}"></script>        
   9         <script th:src="@{/js/greeting.js}"></script>
  10         <link rel="stylesheet" th:href="@{/css/bootstrap-3.3.2.min.css}"/>        
  11     </head>
  12     <body>      
  13         <nav class="navbar navbar-default navbar-fixed-top">
  14               
  15         <div class="container">
  16         <ul class="nav navbar-nav" style="width: 100%;">
  17         <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
  18         <li><a href="#">Link</a></li>
  19         <li class="dropdown">
  20           <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Dropdown <span class="caret"></span></a>
  21           <ul class="dropdown-menu" role="menu">
  22             <li><a href="#">Action</a></li>
  23             <li><a href="#">Another action</a></li>
  24           </ul>
  25         </li>
  26         </ul>                
  27             <h1>My First Bootstrap Page</h1>
  28             <p>This part is inside a .container class.</p> 
  29             <p>The .container class provides a responsive fixed width container.</p>           
  30             <p th:text="'Hello, ' + ${name} + '!'" />
  31             <div class="row">
  32                 <div class="col-sm-4">.col-sm-4</div>
  33                 <div class="col-sm-4">.col-sm-4</div>
  34                 <div class="col-sm-4">.col-sm-4</div>
  35             </div>            
  36             <div class="row">
  37                 <div class="col-md-4">.col-md-4</div>
  38                 <div class="col-md-4">.col-md-4</div>
  39                 <div class="col-md-4">.col-md-4</div>
  40             </div>
  41             
  42             <ul class="nav nav-tabs">
  43                 <li role="presentation" class="tabHome"><a href="#">Home</a></li>
  44                 <li role="presentation" class="tabProfile"><a href="#">Profile</a></li>
  45                 <li role="presentation" class="tabMessages"><a href="#">Messages</a></li>
  46             </ul>            
  47             
  48             <div class="panel panel-primary panelHome">
  49                 <div class="panel-heading">
  50                     <h3 class="panel-title">Panel home</h3>
  51                 </div>
  52                 <div class="panel-body">
  53                     This is a Basic panel home
  54                     <form role="form">
  55                         <div class="form-group">
  56                             <label for="email">Email address:</label>
  57                             <input type="email" class="form-control" id="email"/>
  58                         </div>
  59                         <div class="form-group">
  60                             <label for="pwd">Password:</label>
  61                             <input type="password" class="form-control" id="pwd"/>
  62                         </div>
  63                         <div class="checkbox">
  64                             <label><input type="checkbox"/> Remember me</label>
  65                         </div>
  66                         <button id="submitButton" type="submit" class="btn btn-default">Click to show modal</button>
  67                     </form>                    
  68                 </div>
  69             </div>
  70             <div class="panel panel-primary panelProfile">
  71                 <div class="panel-heading">
  72                     <h3 class="panel-title">Panel profile</h3>
  73                 </div>
  74                 <div class="panel-body">
  75                 </div>
  76             </div>
  77             <div class="panel panel-primary panelMessages">
  78                 <div class="panel-heading">
  79                     <h3 class="panel-title">Panel messages</h3>
  80                 </div>
  81                 <div class="panel-body">
  82                 </div>
  83             </div>
  84         </div>
  85         
  86 <div id="myModal" class="modal fade">
  87     <div class="modal-dialog">
  88         <div class="modal-content">
  89             <div class="modal-header">
  90                 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  91                 <h4 class="modal-title">Confirmation</h4>
  92             </div>
  93             <div class="modal-body">
  94                 <p>Do you want to save changes you made to document before closing?</p>
  95                 <p class="text-warning"><small>If you don't save, your changes will be lost.</small></p>
  96             </div>
  97             <div class="modal-footer">
  98                 <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  99                 <button type="button" class="btn btn-primary">Save changes</button>
 100             </div>
 101         </div>
 102     </div>
 103 </div>
 104         
 105         </nav>
 106     </body>
 107 </html>

web.xml

   1 <web-app id="WebApp_ID" version="2.4"
   2         xmlns="http://java.sun.com/xml/ns/j2ee" 
   3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   5         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   6     <display-name>Spring MVC Application + Thymeleaf</display-name> 
   7     <servlet>
   8         <servlet-name>mvc-dispatcher</servlet-name>
   9         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10         <load-on-startup>1</load-on-startup>
  11     </servlet>
  12     <servlet-mapping>
  13         <servlet-name>mvc-dispatcher</servlet-name>
  14         <url-pattern>/</url-pattern>
  15     </servlet-mapping>
  16     <context-param>
  17         <param-name>contextConfigLocation</param-name>
  18         <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
  19     </context-param>
  20 </web-app>

greeting.js

   1 $(document).ready(greetingReady);
   2 
   3 function greetingReady(){
   4     console.log("greeting ready !!!!");
   5     $('.tabHome').click(homeClicked);
   6     $('.tabProfile').click(profileClicked);
   7     $('.tabMessages').click(messagesClicked);
   8     
   9     $('.tabHome').addClass('active');
  10     $('.panelHome').show();
  11     $('.panelProfile').hide();
  12     $('.panelMessages').hide();
  13     
  14     $('.panel-heading').click(headingClicked);
  15     $('#submitButton').click(submitClicked);
  16 }
  17 
  18 function submitClicked(event){  
  19     $('#myModal').modal('show');    
  20 }
  21 
  22 function headingClicked(){
  23     $('.panel-body').toggle();
  24 }
  25 
  26 function homeClicked(event){
  27     event.preventDefault();
  28     event.stopPropagation();
  29     $('.panelHome').show();
  30     $('.panelProfile').hide();
  31     $('.panelMessages').hide();
  32     $('.tabHome').addClass('active');
  33     $('.tabProfile').removeClass('active');
  34     $('.tabMessages').removeClass('active');
  35 }
  36     
  37 function profileClicked(event){
  38     event.preventDefault();
  39     event.stopPropagation();
  40     $('.panelHome').hide();
  41     $('.panelProfile').show();
  42     $('.panelMessages').hide();    
  43     $('.tabHome').removeClass('active');
  44     $('.tabProfile').addClass('active');
  45     $('.tabMessages').removeClass('active');
  46 }
  47 
  48 function messagesClicked(event){
  49     event.preventDefault();
  50     event.stopPropagation();
  51     $('.panelHome').hide();
  52     $('.panelProfile').hide();
  53     $('.panelMessages').show();    
  54     $('.tabHome').removeClass('active');
  55     $('.tabProfile').removeClass('active');
  56     $('.tabMessages').addClass('active');
  57 }
  • mvn clean compile package
  • Deploy in Tomcat listening in 8081. Access in Tomcat http://localhost:8081/testSpringMVCThymeleaf-0.1.0/hello?name=agh

spring-mvc-html

Project structure:

.
|-- pom.xml
|-- src
|   `-- main
|       |-- java
|       |   `-- org
|       |       `-- allowed
|       |           `-- bitarus
|       |               `-- spring
|       |                   `-- mvc
|       |                       `-- html
|       |                           |-- ConfigX.java
|       |                           |-- ContextServletListener.java
|       |                           |-- HelloController.java
|       |                           |-- TestDAO.java
|       |                           `-- ThreadTimer.java
|       |-- resources
|       |   |-- log4j.properties
|       |   `-- test.sql
|       `-- webapp
|           `-- WEB-INF
|               |-- applicationContext.xml
|               |-- mvc-dispatcher-servlet.xml
|               |-- pages
|               |   `-- greeting.jsp
|               `-- web.xml

Uses Spring 4, Tomcat 7.0.X, commons-dbcp, MariaDB, Gson and log4j.

pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd">
   4     <modelVersion>4.0.0</modelVersion>
   5     <groupId>org.allowed.bitarus</groupId>
   6     <artifactId>spring-mvc-html</artifactId>
   7     <version>0.1.0</version>
   8     <packaging>war</packaging>
   9     <dependencies>
  10         <dependency>
  11             <groupId>org.springframework</groupId>
  12             <artifactId>spring-core</artifactId>
  13             <version>4.1.4.RELEASE</version>
  14         </dependency>
  15         <dependency>
  16             <groupId>org.springframework</groupId>
  17             <artifactId>spring-web</artifactId>
  18             <version>4.1.4.RELEASE</version>
  19         </dependency>
  20         <dependency>
  21             <groupId>org.springframework</groupId>
  22             <artifactId>spring-webmvc</artifactId>
  23             <version>4.1.4.RELEASE</version>
  24         </dependency>
  25         <dependency>
  26             <groupId>org.springframework</groupId>
  27             <artifactId>spring-jdbc</artifactId>
  28             <version>4.1.4.RELEASE</version>
  29         </dependency>
  30         <dependency>
  31             <groupId>com.google.code.gson</groupId>
  32             <artifactId>gson</artifactId>
  33             <version>2.5</version>
  34         </dependency>
  35         <dependency>
  36             <groupId>org.mariadb.jdbc</groupId>
  37             <artifactId>mariadb-java-client</artifactId>
  38             <version>1.4.4</version>
  39         </dependency>
  40         <dependency>
  41             <groupId>log4j</groupId>
  42             <artifactId>log4j</artifactId>
  43             <version>1.2.17</version>
  44         </dependency>        
  45         <dependency>
  46             <groupId>javax.servlet</groupId>
  47             <artifactId>javax.servlet-api</artifactId>
  48             <version>3.1.0</version>
  49             <scope>provided</scope>
  50         </dependency>   
  51         <dependency>
  52             <groupId>commons-dbcp</groupId>
  53             <artifactId>commons-dbcp</artifactId>
  54             <version>1.4</version>
  55         </dependency>        
  56     </dependencies>
  57 </project>

web.xml

   1 <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   2     <display-name>Spring MVC- HTML</display-name> 
   3     <servlet>
   4         <servlet-name>mvc-dispatcher</servlet-name>
   5         <servlet-class>
   6             org.springframework.web.servlet.DispatcherServlet
   7         </servlet-class>
   8         <load-on-startup>1</load-on-startup>
   9     </servlet>
  10     <servlet-mapping>
  11         <servlet-name>mvc-dispatcher</servlet-name>
  12         <url-pattern>/</url-pattern>
  13     </servlet-mapping>
  14     <listener>
  15         <listener-class>
  16             org.springframework.web.context.ContextLoaderListener
  17         </listener-class>
  18     </listener>
  19 </web-app>

applicationContext.xml

   1 <beans xmlns="http://www.springframework.org/schema/beans"
   2     xmlns:context="http://www.springframework.org/schema/context"
   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4     xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   5 </beans>

mvc-dispatcher-servlet.xml

   1 <beans xmlns="http://www.springframework.org/schema/beans"
   2     xmlns:context="http://www.springframework.org/schema/context"
   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4     xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   5     <context:component-scan base-package="org.allowed.bitarus.spring.mvc.html" />
   6     <bean
   7         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   8         <property name="prefix">
   9             <value>/WEB-INF/pages/</value>
  10         </property>
  11         <property name="suffix">
  12             <value>.jsp</value>
  13         </property>
  14     </bean>
  15     <!--
  16     <bean id="testDatasource"
  17         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  18         <property name="driverClassName" value="org.mariadb.jdbc.Driver" />
  19         <property name="url"
  20             value="jdbc:mariadb://localhost:3306/springmvchtml" />
  21         <property name="username" value="usertest" />
  22         <property name="password" value="????????" />
  23     </bean>
  24     -->    
  25     <bean id="testDatasource" class="org.apache.commons.dbcp.BasicDataSource" 
  26     destroy-method="close" >
  27         <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
  28         <!--<property name="url" value="jdbc:mariadb://localhost:3306/springmvchtml"/>-->
  29         <!--export JAVA_OPTS=-DspringJdbcUrl=jdbc:mariadb://localhost:3306/springmvchtml-->
  30         <property name="url" value="#{systemProperties['springJdbcUrl']}"/>
  31         <property name="username" value="usertest"/>
  32         <property name="password" value="????????"/>
  33         <property name="initialSize" value="3"/>
  34     </bean>   
  35     <bean id="configx" class="org.allowed.bitarus.spring.mvc.html.ConfigX">
  36         <property name="viewList">
  37             <list>
  38                 <value>greeting</value>
  39             </list>
  40         </property>
  41     </bean>
  42     <bean id="threadTimer" class="org.allowed.bitarus.spring.mvc.html.ThreadTimer" 
  43     init-method="start" destroy-method="destroy">
  44         <constructor-arg index="0" value="30000" />
  45     </bean>
  46     <bean id="testJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  47         <constructor-arg index="0" ref="testDatasource" />
  48     </bean>
  49     <bean id="testDAO" class="org.allowed.bitarus.spring.mvc.html.TestDAO"/>
  50 </beans>

log4j.properties

log4j.rootLogger = ALL, rootLogger
log4j.appender.rootLogger=org.apache.log4j.FileAppender
log4j.appender.rootLogger.File=/tmp/testlog.out
log4j.appender.rootLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.rootLogger.layout.ConversionPattern=%d{ISO8601}|%p|%c|%t|%m%n
#log4j.appender.rootLogger.Threshold=ALL
log4j.appender.rootLogger.Threshold=INFO

log4j.logger.org.allowed.bitarus.spring.mvc.html.HelloController=ALL,helloConsConsole
log4j.appender.helloConsConsole=org.apache.log4j.ConsoleAppender
log4j.appender.helloConsConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.helloConsConsole.layout.ConversionPattern=%d{ISO8601}|%p|%c|%t|%m%n
#log4j.appender.helloConsConsole.Threshold=DEBUG
log4j.appender.helloConsConsole.Threshold=INFO

log4j.logger.org.allowed.bitarus.spring.mvc.html.ThreadTimer=ALL,threadTimerConsole
log4j.appender.threadTimerConsole=org.apache.log4j.ConsoleAppender
log4j.appender.threadTimerConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.threadTimerConsole.layout.ConversionPattern=%d{ISO8601}|%p|%c|%t|%m%n
#log4j.appender.threadTimerConsole.Threshold=DEBUG
log4j.appender.threadTimerConsole.Threshold=INFO

log4j.logger.org.allowed.bitarus.spring.mvc.html.TestDAO=ALL,testDAOConsole
log4j.appender.testDAOConsole=org.apache.log4j.ConsoleAppender
log4j.appender.testDAOConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.testDAOConsole.layout.ConversionPattern=%d{ISO8601}|%p|%c|%t|%m%n
#log4j.appender.testDAOConsole.Threshold=DEBUG
log4j.appender.testDAOConsole.Threshold=INFO

log4j.logger.org.allowed.bitarus.spring.mvc.html.ConfigX=ALL,configXConsole
log4j.appender.configXConsole=org.apache.log4j.ConsoleAppender
log4j.appender.configXConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.configXConsole.layout.ConversionPattern=%d{ISO8601}|%p|%c|%t|%m%n
#log4j.appender.configXConsole.Threshold=DEBUG
log4j.appender.configXConsole.Threshold=INFO

test.sql

   1 --JDBC URL: jdbc:mariadb://localhost:3306/springmvchtml
   2 create database springmvchtml;
   3 create user 'usertest'@'%' identified by '????????';
   4 create user 'usertest'@'localhost' identified by '????????';
   5 grant all on springmvchtml.* to 'usertest'@'%';
   6 grant all on springmvchtml.* to 'usertest'@'localhost';
   7 show grants for 'usertest'@'%';
   8 show grants for 'usertest'@'localhost'; 
   9 create table springmvchtml.dummy (name varchar(255) ) ;
  10 insert into springmvchtml.dummy (name) values('aaaa');
  11 insert into springmvchtml.dummy (name) values('bbbb');
  12 commit;

TestDAO.java

   1 package org.allowed.bitarus.spring.mvc.html;
   2 
   3 import org.apache.log4j.Logger;
   4 import org.springframework.beans.factory.annotation.Autowired;
   5 import org.springframework.beans.factory.annotation.Qualifier;
   6 import org.springframework.jdbc.core.JdbcTemplate;
   7 
   8 public class TestDAO {
   9   @Autowired
  10   @Qualifier("testJdbcTemplate")
  11   private JdbcTemplate jdbcTemplate;
  12   private Logger logger;
  13 
  14   public TestDAO() {
  15     this.logger = Logger.getLogger(TestDAO.class);
  16     logger.info("Created " + this.getClass().getSimpleName());
  17   }
  18 
  19   public String getNameFromDummy() {
  20     return this.jdbcTemplate.queryForObject("select name from dummy limit 1", String.class);
  21   }
  22 
  23 }

ThreadTimer.java

   1 package org.allowed.bitarus.spring.mvc.html;
   2 
   3 import java.text.MessageFormat;
   4 import org.apache.log4j.Logger;
   5 import org.springframework.beans.factory.annotation.Autowired;
   6 
   7 public class ThreadTimer extends Thread {
   8   private int delaySeconds;
   9   private Logger logger;
  10   private boolean running;
  11 
  12   @Autowired
  13   TestDAO testDAO;
  14 
  15   public ThreadTimer(int delaySeconds) {
  16     this.logger = Logger.getLogger(ThreadTimer.class);
  17     logger.info("Created instance of " + this.getClass().getSimpleName());
  18     this.running = true;
  19     this.delaySeconds = delaySeconds;
  20     this.setName(this.getClass().getSimpleName() + "_" + this.getName());
  21   }
  22 
  23   public void run() {
  24     while (running) {
  25       try {
  26         Thread.sleep(this.delaySeconds);
  27         logger.info("Delay " + this.getClass().getSimpleName());
  28         if (testDAO != null) {
  29           logger.info(MessageFormat.format("{0}", testDAO.getNameFromDummy()));
  30         }
  31       }
  32       catch (InterruptedException e) {
  33           logger.info("ThreadTimer interrupted exception:" + e.getMessage() );
  34       }
  35       catch (Exception e) {
  36           logger.info("ThreadTimer exception:" + e.getMessage() );
  37           stopRunning();
  38       }      
  39     }
  40     logger.info("Exited " + this.getClass().getSimpleName());
  41   }
  42 
  43   public void startRunning() {
  44     this.running = true;
  45   }
  46 
  47   public void stopRunning() {
  48     this.running = false;
  49   }
  50   
  51   public void destroy(){
  52     logger.info("Called destroy");
  53     this.stopRunning();
  54     this.interrupt();    
  55   }
  56 }

ConfigX.java

   1 package org.allowed.bitarus.spring.mvc.html;
   2 
   3 import java.util.List;
   4 import org.apache.log4j.Logger;
   5 
   6 public class ConfigX {
   7   private Logger logger;
   8   private List<String> viewList;
   9 
  10   public ConfigX() {
  11     this.logger = Logger.getLogger(ConfigX.class);
  12     this.logger.info("Created instance of ConfigX");
  13   }
  14 
  15   public List<String> getViewList() {
  16     return viewList;
  17   }
  18 
  19   public void setViewList(List<String> viewList) {
  20     this.viewList = viewList;
  21   }
  22 }

ContextServletListener.java

   1 package org.allowed.bitarus.spring.mvc.html;
   2 
   3 import javax.servlet.ServletContextListener;
   4 import javax.servlet.ServletContextEvent;
   5 import javax.servlet.annotation.WebListener;
   6 import java.sql.Driver;
   7 import java.sql.DriverManager;
   8 
   9 @WebListener
  10 public class ContextServletListener implements ServletContextListener {
  11     public void contextInitialized(ServletContextEvent sce){
  12         System.out.println("ContextServletListener init");
  13     }
  14     
  15     public void contextDestroyed(ServletContextEvent sce) {            
  16         //export JAVA_OPTS=-DspringJdbcUrl=jdbc:mariadb://localhost:3306/springmvchtml
  17         System.out.println("ContextServletListener destroyed");
  18         try {
  19             //Driver mySqlDriver = DriverManager.getDriver("jdbc:mariadb://localhost:3306/springmvchtml");
  20             Driver mySqlDriver = DriverManager.getDriver( System.getProperty("springJdbcUrl") );
  21             DriverManager.deregisterDriver(mySqlDriver);
  22         }
  23         catch(Exception ex){
  24             System.out.println(ex.getMessage());
  25         }
  26     }    
  27 }

HelloController.java

   1 package org.allowed.bitarus.spring.mvc.html;
   2 
   3 import org.apache.log4j.Logger;
   4 import org.springframework.beans.factory.annotation.Autowired;
   5 import org.springframework.beans.factory.annotation.Qualifier;
   6 import org.springframework.stereotype.Controller;
   7 import org.springframework.ui.Model;
   8 import org.springframework.web.bind.annotation.PathVariable;
   9 import org.springframework.web.bind.annotation.RequestMapping;
  10 import org.springframework.web.bind.annotation.RequestParam;
  11 import org.springframework.web.bind.annotation.ResponseBody;
  12 import com.google.gson.Gson;
  13 
  14 @Controller
  15 public class HelloController {
  16   protected class JsonObj {
  17     private String fieldX;
  18 
  19     public String getFieldX() {
  20       return fieldX;
  21     }
  22 
  23     public void setFieldX(String fieldX) {
  24       this.fieldX = fieldX;
  25     }
  26   }
  27 
  28   @Autowired
  29   @Qualifier("configx")
  30   private ConfigX configx;
  31   private Logger logger;
  32 
  33   public HelloController() {
  34     this.logger = Logger.getLogger(HelloController.class);
  35     logger.info("Created " + this.getClass().getSimpleName());
  36   }
  37 
  38   @RequestMapping("/helloVal/{name}") 
  39   public String helloVal(@PathVariable(value = "name") String name, Model model) {
  40     // http://localhost:8081/spring-mvc-html-0.1.0/helloVal/asd
  41     logger.info("helloVal with " + name);
  42     model.addAttribute("name", name); // set data in model
  43     return configx.getViewList().get(0); // view JSP
  44   }
  45 
  46   @RequestMapping(value = "/hello", produces = "application/json")
  47   @ResponseBody
  48   public String hellox(@RequestParam(value = "name", required = false, defaultValue = "World") String name) {
  49     // http://localhost:8081/spring-mvc-html-0.1.0/hello?name=asdkkk
  50     logger.info("hellox with " + name);
  51     JsonObj jo = new JsonObj();
  52     jo.setFieldX(name);
  53     return new Gson().toJson(jo);
  54   }
  55 }

greeting.jsp

   1 <html>
   2     <head>
   3         <title>Getting Started: Serving Web Content</title>
   4         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   5     </head>
   6     <body>
   7         <p>Hello ${name}</p>
   8     </body>
   9 </html>
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01