Spring MVC Example

Spring MVC Example Commit Details

Date:2011-09-22 15:07:17 (14 years 6 months ago)
Author:Michael Ahlberg
Branch:master
Commit:ec94f934f0a3084b89b4c7eb5cf9bb705fec367d
Parents:
Message:Initial commit

Changes:
A.gitignore (full)
Acontext.xml (full)
Apom.xml (full)
Asrc/main/java/info/ahlberg/spring/Contact.java (full)
Asrc/main/java/info/ahlberg/spring/ContactController.java (full)
Asrc/main/java/info/ahlberg/spring/ContactDAO.java (full)
Asrc/main/java/info/ahlberg/spring/ContactDAOWithJPA.java (full)
Asrc/main/java/info/ahlberg/spring/ContactService.java (full)
Asrc/main/java/info/ahlberg/spring/ContactServiceImpl.java (full)
Asrc/main/java/info/ahlberg/spring/GenericDAO.java (full)
Asrc/main/java/info/ahlberg/spring/GenericDAOWithJPA.java (full)
Asrc/main/resources/META-INF/persistence.xml (full)
Asrc/main/resources/hibernate.properties
Asrc/main/resources/log4j.xml (full)
Asrc/main/webapp/META-INF/MANIFEST.MF (full)
Asrc/main/webapp/WEB-INF/config/data-access-config.xml (full)
Asrc/main/webapp/WEB-INF/config/web-application-config.xml (full)
Asrc/main/webapp/WEB-INF/config/webmvc-config.xml (full)
Asrc/main/webapp/WEB-INF/view/index.jsp (full)
Asrc/main/webapp/WEB-INF/web.xml (full)

File differences

.gitignore
1.classpath
2.project
3.settings
4target
context.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<Context>
3        <Environment name="databaseDialect" type="java.lang.String" value="org.hibernate.dialect.HSQLDialect" />
4        <Environment name="databaseUrl" type="java.lang.String" value="jdbc:hsqldb:mem:spring-mvc" />
5        <Environment name="databaseDriver" type="java.lang.String" value="org.hsqldb.jdbcDriver" />
6        <Environment name="databaseUsername" type="java.lang.String" value="sa" />
7        <Environment name="databasePassword" type="java.lang.String" value="" />
8        <Environment name="databaseShowSql" type="java.lang.String" value="false" />
9        <Environment name="databaseGenerateDdl" type="java.lang.String" value="true" />
10        <Environment name="databaseDatabase" type="java.lang.String" value="HSQL" />
11</Context>
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/maven-v4_0_0.xsd">
4    <modelVersion>4.0.0</modelVersion>
5    <groupId>info.ahlberg</groupId>
6    <artifactId>spring-mvc-template</artifactId>
7    <packaging>war</packaging>
8    <version>1.0-SNAPSHOT</version>
9    <name>spring-mvc-template</name>
10    <url>http://ahlberg.info</url>
11    <properties>
12        <spring.version>3.0.6.RELEASE</spring.version>
13    </properties>
14
15    <repositories>
16        <repository>
17            <id>central</id>
18            <url>http://repo1.maven.org/maven2</url>
19        </repository>
20        <repository>
21            <id>maven2.java.net</id>
22            <url>http://download.java.net/maven/2</url>
23        </repository>
24        <repository>
25            <id>java.net2</id>
26            <url>http://download.java.net/maven/2</url>
27        </repository>
28        <repository>
29            <id>maven2.jboss.org</id>
30            <url>http://repository.jboss.org/maven2</url>
31        </repository>
32    </repositories>
33
34    <build>
35        <plugins>
36            <plugin>
37                <groupId>org.codehaus.mojo</groupId>
38                <artifactId>tomcat-maven-plugin
39                </artifactId>
40                <configuration>
41                    <warFile>target/spring-mvc-template.war</warFile>
42                    <contextFile>context.xml</contextFile>
43                </configuration>
44            </plugin>
45            <plugin>
46                <groupId>org.apache.maven.plugins
47                </groupId>
48                <artifactId>maven-eclipse-plugin
49                </artifactId>
50                <version>2.8</version>
51                <configuration>
52                    <projectNameTemplate>[artifactId]-[version]</projectNameTemplate>
53                    <wtpmanifest>true</wtpmanifest>
54                    <wtpapplicationxml>true</wtpapplicationxml>
55                    <wtpversion>2.0</wtpversion>
56                    <manifest>${basedir}/src/main/resources/META-INF/MANIFEST.MF</manifest>
57                    <downloadSources>true</downloadSources>
58                    <downloadJavadocs>true</downloadJavadocs>
59                </configuration>
60            </plugin>
61            <plugin>
62                <artifactId>maven-compiler-plugin</artifactId>
63                <configuration>
64                    <source>1.6</source>
65                    <target>1.6</target>
66                    <encoding>UTF-8</encoding>
67                </configuration>
68            </plugin>
69            <plugin>
70                <artifactId>maven-resources-plugin</artifactId>
71                <configuration>
72                    <encoding>UTF-8</encoding>
73                </configuration>
74            </plugin>
75        </plugins>
76        <finalName>gallery</finalName>
77    </build>
78
79    <dependencies>
80        <dependency>
81            <groupId>org.springframework</groupId>
82            <artifactId>spring-core</artifactId>
83            <version>${spring.version}</version>
84        </dependency>
85        <dependency>
86            <groupId>org.springframework</groupId>
87            <artifactId>spring-web</artifactId>
88            <version>${spring.version}</version>
89        </dependency>
90        <dependency>
91            <groupId>org.springframework</groupId>
92            <artifactId>spring-webmvc</artifactId>
93            <version>${spring.version}</version>
94        </dependency>
95        <dependency>
96            <groupId>org.springframework</groupId>
97            <artifactId>spring-orm</artifactId>
98            <version>${spring.version}</version>
99        </dependency>
100        <dependency>
101            <groupId>org.springframework</groupId>
102            <artifactId>spring-jdbc</artifactId>
103            <version>${spring.version}</version>
104        </dependency>
105        <dependency>
106            <groupId>org.springframework</groupId>
107            <artifactId>spring-context</artifactId>
108            <version>${spring.version}</version>
109        </dependency>
110        <dependency>
111            <groupId>org.springframework</groupId>
112            <artifactId>spring-aop</artifactId>
113            <version>${spring.version}</version>
114        </dependency>
115
116
117        <dependency>
118            <groupId>org.codehaus.jackson</groupId>
119            <artifactId>jackson-mapper-lgpl</artifactId>
120            <version>1.8.1</version>
121        </dependency>
122
123
124        <dependency>
125            <groupId>jstl</groupId>
126            <artifactId>jstl</artifactId>
127            <version>1.2</version>
128        </dependency>
129        <dependency>
130            <groupId>javax.persistence</groupId>
131            <artifactId>persistence-api</artifactId>
132            <version>1.0</version>
133        </dependency>
134        <dependency>
135            <groupId>javax.servlet</groupId>
136            <artifactId>servlet-api</artifactId>
137            <version>2.5</version>
138            <scope>provided</scope>
139        </dependency>
140        <dependency>
141            <groupId>org.hibernate</groupId>
142            <artifactId>hibernate</artifactId>
143            <version>3.2.6.ga</version>
144        </dependency>
145        <dependency>
146            <groupId>org.hibernate</groupId>
147            <artifactId>hibernate-annotations
148            </artifactId>
149            <version>3.3.1.GA</version>
150        </dependency>
151        <dependency>
152            <groupId>org.hibernate</groupId>
153            <artifactId>hibernate-entitymanager
154            </artifactId>
155            <version>3.3.2.GA</version>
156        </dependency>
157
158        <dependency>
159            <groupId>log4j</groupId>
160            <artifactId>log4j</artifactId>
161            <version>1.2.15</version>
162            <exclusions>
163                <exclusion>
164                    <groupId>com.sun.jmx</groupId>
165                    <artifactId>jmxri</artifactId>
166                </exclusion>
167                <exclusion>
168                    <groupId>com.sun.jdmk</groupId>
169                    <artifactId>jmxtools</artifactId>
170                </exclusion>
171            </exclusions>
172        </dependency>
173        <dependency>
174            <groupId>org.slf4j</groupId>
175            <artifactId>slf4j-api</artifactId>
176            <version>1.5.8</version>
177        </dependency>
178        <dependency>
179            <groupId>org.slf4j</groupId>
180            <artifactId>slf4j-log4j12</artifactId>
181            <version>1.5.8</version>
182        </dependency>
183
184        <dependency>
185            <groupId>hsqldb</groupId>
186            <artifactId>hsqldb</artifactId>
187            <version>1.8.0.7</version>
188        </dependency>
189        <dependency>
190            <groupId>javax.el</groupId>
191            <artifactId>el-api</artifactId>
192            <version>1.0</version>
193            <scope>provided</scope>
194        </dependency>
195        <dependency>
196            <groupId>javax.servlet.jsp</groupId>
197            <artifactId>jsp-api</artifactId>
198            <version>2.1</version>
199            <scope>provided</scope>
200        </dependency>
201
202        <dependency>
203            <groupId>javax.annotation</groupId>
204            <artifactId>jsr250-api</artifactId>
205            <version>1.0</version>
206        </dependency>
207
208        <dependency>
209            <groupId>javax.persistence</groupId>
210            <artifactId>persistence-api</artifactId>
211            <version>1.0</version>
212        </dependency>
213
214        <dependency>
215            <groupId>junit</groupId>
216            <artifactId>junit</artifactId>
217            <version>4.7</version>
218            <scope>test</scope>
219        </dependency>
220        <dependency>
221            <groupId>org.easymock</groupId>
222            <artifactId>easymock</artifactId>
223            <version>2.5.2</version>
224            <scope>test</scope>
225        </dependency>
226        <dependency>
227            <groupId>org.springframework</groupId>
228            <artifactId>spring-test</artifactId>
229            <version>${spring.version}</version>
230            <scope>test</scope>
231        </dependency>
232        <dependency>
233            <groupId>org.unitils</groupId>
234            <artifactId>unitils-easymock</artifactId>
235            <version>3.1</version>
236            <scope>test</scope>
237        </dependency>
238        <dependency>
239            <groupId>org.unitils</groupId>
240            <artifactId>unitils-inject</artifactId>
241            <version>3.1</version>
242            <scope>test</scope>
243        </dependency>
244
245    </dependencies>
246
247
248    <dependencyManagement>
249        <dependencies>
250            <dependency>
251                <groupId>javax.mail</groupId>
252                <artifactId>mail</artifactId>
253                <version>1.4.2</version>
254            </dependency>
255        </dependencies>
256    </dependencyManagement>
257</project>
src/main/java/info/ahlberg/spring/Contact.java
1package info.ahlberg.spring;
2
3import java.io.Serializable;
4
5import javax.persistence.Column;
6import javax.persistence.Entity;
7import javax.persistence.GeneratedValue;
8import javax.persistence.GenerationType;
9import javax.persistence.Id;
10import javax.persistence.Version;
11
12@Entity
13public class Contact implements Serializable {
14    private static final long serialVersionUID = 1L;
15
16    @Id
17    @GeneratedValue(strategy = GenerationType.AUTO)
18    private Long id;
19
20    @Version
21    private Long version;
22
23    @Column(nullable = false)
24    private String name;
25
26    public Long getId() {
27        return id;
28    }
29
30    public void setId(Long id) {
31        this.id = id;
32    }
33
34    public Long getVersion() {
35        return version;
36    }
37
38    public void setVersion(Long version) {
39        this.version = version;
40    }
41
42    public String getName() {
43        return name;
44    }
45
46    public void setName(String name) {
47        this.name = name;
48    }
49
50}
src/main/java/info/ahlberg/spring/ContactController.java
1package info.ahlberg.spring;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Controller;
5import org.springframework.ui.Model;
6import org.springframework.web.bind.annotation.RequestMapping;
7import org.springframework.web.bind.annotation.RequestParam;
8
9@Controller
10@RequestMapping("/")
11public class ContactController {
12    @Autowired
13    private ContactService contactService;
14
15    @RequestMapping("/")
16    String index(Model model) {
17        model.addAttribute("msg", "A nice message");
18
19        model.addAttribute("contacts", contactService.findAll());
20
21        return "index";
22    }
23
24
25    @RequestMapping("/add")
26    String add(@RequestParam String name, Model model) {
27        model.addAttribute("msg", "A nice message");
28
29        Contact contact = new Contact();
30        contact.setName(name);
31        contactService.save(contact);
32
33        model.addAttribute("contacts", contactService.findAll());
34
35        return "index";
36    }
37}
src/main/java/info/ahlberg/spring/ContactDAO.java
1package info.ahlberg.spring;
2
3public interface ContactDAO extends GenericDAO<Contact, Long> {
4
5}
src/main/java/info/ahlberg/spring/ContactDAOWithJPA.java
1package info.ahlberg.spring;
2
3import org.springframework.stereotype.Repository;
4
5
6@Repository
7public class ContactDAOWithJPA extends GenericDAOWithJPA<Contact, Long> implements ContactDAO {
8
9}
src/main/java/info/ahlberg/spring/ContactService.java
1package info.ahlberg.spring;
2
3public interface ContactService {
4
5    Object findAll();
6
7    void save(Contact contact);
8
9}
src/main/java/info/ahlberg/spring/ContactServiceImpl.java
1package info.ahlberg.spring;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Service;
5import org.springframework.transaction.annotation.Transactional;
6
7@Service
8public class ContactServiceImpl implements ContactService {
9    @Autowired
10    private ContactDAO contactDAO;
11
12    @Override
13    public Object findAll() {
14        return contactDAO.loadAll();
15    }
16
17    @Override
18    @Transactional
19    public void save(Contact contact) {
20        contactDAO.persist(contact);
21    }
22
23}
src/main/java/info/ahlberg/spring/GenericDAO.java
1package info.ahlberg.spring;
2
3import java.io.Serializable;
4import java.util.List;
5
6public interface GenericDAO<T, ID extends Serializable> {
7
8    T loadById(ID id);
9
10    void persist(T entity);
11
12    void update(T entity);
13
14    void delete(T entity);
15
16    List<T> loadAll();
17
18    void flush();
19}
src/main/java/info/ahlberg/spring/GenericDAOWithJPA.java
1package info.ahlberg.spring;
2
3import java.io.Serializable;
4import java.lang.reflect.ParameterizedType;
5import java.util.List;
6
7import javax.persistence.EntityManager;
8import javax.persistence.PersistenceContext;
9
10public abstract class GenericDAOWithJPA<T, ID extends Serializable> implements GenericDAO<T, ID> {
11
12    private Class<T> persistentClass;
13
14    protected EntityManager entityManager;
15
16    @SuppressWarnings("unchecked")
17    public GenericDAOWithJPA() {
18        this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
19                .getActualTypeArguments()[0];
20    }
21
22    @PersistenceContext
23    public void setEntityManager(EntityManager entityManager) {
24        this.entityManager = entityManager;
25    }
26
27    public void flush() {
28        entityManager.flush();
29    }
30
31    public Class<T> getPersistentClass() {
32        return persistentClass;
33    }
34
35    public T loadById(ID id) {
36        if(id == null) {
37            return null;
38        } else {
39            return entityManager.find(persistentClass, id);
40        }
41    }
42
43    public void persist(T entity) {
44        entityManager.persist(entity);
45    }
46
47    public void update(T entity) {
48        entityManager.merge(entity);
49        entityManager.flush();
50    }
51
52    public void delete(T entity) {
53        entityManager.remove(entity);
54    }
55
56    @SuppressWarnings("unchecked")
57    public List<T> loadAll() {
58        return entityManager.createQuery("Select t from " + persistentClass.getSimpleName() + " t")
59                .setHint("org.hibernate.cacheable", true).getResultList();
60    }
61}
src/main/resources/META-INF/persistence.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<persistence xmlns="http://java.sun.com/xml/ns/persistence"
3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
5    version="1.0">
6    <persistence-unit name="spring-mvc-example" transaction-type="RESOURCE_LOCAL">
7        <properties>
8            <property name="hibernate.connection.autoReconnect" value="true" />
9            <property name="hibernate.connection.autoReconnectForPools" value="true" />
10            <property name="hibernate.connection.is-connection-validation-required" value="true" />
11        </properties>
12    </persistence-unit>
13</persistence>
src/main/resources/log4j.xml
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
4    <appender name="console" class="org.apache.log4j.ConsoleAppender">
5        <layout class="org.apache.log4j.PatternLayout">
6            <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
7        </layout>
8    </appender>
9    <logger name="org.springframework">
10        <level value="WARN" />
11    </logger>
12    <logger name="org.hibernate">
13        <level value="WARN" />
14    </logger>
15    <root>
16        <priority value="INFO" />
17        <appender-ref ref="console" />
18    </root>
19</log4j:configuration>
src/main/webapp/META-INF/MANIFEST.MF
1Manifest-Version: 1.0
2Class-Path: activation-1.1.jar antlr-2.7.6.jar aopalliance-1.0.jar asm
3 -1.5.3.jar asm-attrs-1.5.3.jar cglib-2.1_3.jar commons-collections-2.
4 1.1.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar ehcache-1.2.3.jar e
5 jb3-persistence-1.0.1.GA.jar hibernate-3.2.6.ga.jar hibernate-annotat
6 ions-3.3.1.GA.jar hibernate-commons-annotations-3.0.0.ga.jar hibernat
7 e-entitymanager-3.3.2.GA.jar hsqldb-1.8.0.7.jar jackson-core-lgpl-1.8
8 .1.jar jackson-mapper-lgpl-1.8.1.jar javassist-3.4.GA.jar jms-1.1.jar
9  jsr250-api-1.0.jar jstl-1.2.jar jta-1.0.1B.jar log4j-1.2.15.jar mail
10 -1.4.2.jar persistence-api-1.0.jar slf4j-api-1.5.8.jar slf4j-log4j12-
11 1.5.8.jar spring-aop-3.0.6.RELEASE.jar spring-asm-3.0.6.RELEASE.jar s
12 pring-beans-3.0.6.RELEASE.jar spring-context-3.0.6.RELEASE.jar spring
13 -context-support-3.0.6.RELEASE.jar spring-core-3.0.6.RELEASE.jar spri
14 ng-expression-3.0.6.RELEASE.jar spring-jdbc-3.0.6.RELEASE.jar spring-
15 orm-3.0.6.RELEASE.jar spring-tx-3.0.6.RELEASE.jar spring-web-3.0.6.RE
16 LEASE.jar spring-webmvc-3.0.6.RELEASE.jar
17
src/main/webapp/WEB-INF/config/data-access-config.xml
1<beans xmlns="http://www.springframework.org/schema/beans"
2    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
3    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
8            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
9            http://www.springframework.org/schema/jee
10            http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
11            http://www.springframework.org/schema/tx
12           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
13
14    <tx:annotation-driven />
15
16    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
17        <property name="entityManagerFactory" ref="entityManagerFactory" />
18    </bean>
19
20    <bean id="entityManagerFactory"
21        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
22        <property name="persistenceUnitName" value="spring-mvc-example" />
23        <property name="dataSource" ref="dataSource" />
24        <property name="jpaVendorAdapter">
25            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
26                <property name="databasePlatform">
27                    <jee:jndi-lookup jndi-name="java:comp/env/databaseDialect" />
28                </property>
29                <property name="database">
30                    <jee:jndi-lookup jndi-name="java:comp/env/databaseDatabase" />
31                </property>
32                <property name="showSql">
33                    <jee:jndi-lookup jndi-name="java:comp/env/databaseShowSql" />
34                </property>
35                <property name="generateDdl">
36                    <jee:jndi-lookup jndi-name="java:comp/env/databaseGenerateDdl" />
37                </property>
38            </bean>
39        </property>
40    </bean>
41
42    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
43        <property name="driverClassName">
44            <jee:jndi-lookup jndi-name="java:comp/env/databaseDriver" />
45        </property>
46        <property name="url">
47            <jee:jndi-lookup jndi-name="java:comp/env/databaseUrl" />
48        </property>
49        <property name="username">
50            <jee:jndi-lookup jndi-name="java:comp/env/databaseUsername" />
51        </property>
52        <property name="password">
53            <jee:jndi-lookup jndi-name="java:comp/env/databasePassword" />
54        </property>
55    </bean>
56
57</beans>
src/main/webapp/WEB-INF/config/web-application-config.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
4    xsi:schemaLocation="http://www.springframework.org/schema/beans
5           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
6           http://www.springframework.org/schema/context
7           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
8
9    <context:component-scan base-package="info.ahlberg.spring" />
10
11    <import resource="data-access-config.xml" />
12    <import resource="webmvc-config.xml" />
13
14    <bean
15        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
16
17
18</beans>
src/main/webapp/WEB-INF/config/webmvc-config.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3    xmlns:mvc="http://www.springframework.org/schema/mvc"
4    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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/mvc
9        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
10
11    <mvc:annotation-driven />
12
13    <bean id="viewResolver"
14        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
15        <property name="viewClass"
16            value="org.springframework.web.servlet.view.JstlView" />
17        <property name="prefix" value="/WEB-INF/view/" />
18        <property name="suffix" value=".jsp" />
19    </bean>
20
21</beans>
src/main/webapp/WEB-INF/view/index.jsp
1<?xml version='1.0' encoding='utf-8'?>
2<jsp:root version="2.0" xmlns="http://www.w3c.org/1999/xhtml"
3    xmlns:jsp="http://java.sun.com/JSP/Page"
4    xmlns:c="http://java.sun.com/jsp/jstl/core"
5    xmlns:form="http://www.springframework.org/tags/form"
6    xmlns:spring="http://www.springframework.org/tags">
7
8<jsp:directive.page contentType="text/html" pageEncoding="UTF-8" />
9<jsp:output omit-xml-declaration="true" />
10<jsp:output doctype-root-element="html" doctype-system="about:legacy-compat" />
11
12<html>
13<head>
14    <meta charset="utf-8" />
15
16    <title>Spring MVC example</title>
17</head>
18
19<body>
20
21<div>
22
23<c:out value="${ msg }" />
24
25</div>
26
27<div>
28
29<ul>
30
31<c:forEach items="${ contacts }" var="contact">
32
33    <li><c:out value="${ contact.name }"/></li>
34
35</c:forEach>
36
37</ul>
38
39</div>
40
41</body>
42</html>
43</jsp:root>
src/main/webapp/WEB-INF/web.xml
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
4    version="2.4">
5
6    <context-param>
7        <param-name>contextConfigLocation</param-name>
8        <param-value>
9            /WEB-INF/config/web-application-config.xml
10        </param-value>
11    </context-param>
12
13    <filter>
14        <filter-name>characterEncodingFilter</filter-name>
15        <filter-class>
16            org.springframework.web.filter.CharacterEncodingFilter</filter-class>
17        <init-param>
18            <param-name>encoding</param-name>
19            <param-value>UTF-8</param-value>
20        </init-param>
21        <init-param>
22            <param-name>forceEncoding</param-name>
23            <param-value>true</param-value>
24        </init-param>
25    </filter>
26    <filter-mapping>
27        <filter-name>characterEncodingFilter</filter-name>
28        <url-pattern>/*</url-pattern>
29    </filter-mapping>
30
31
32    <filter>
33        <filter-name>JPA Filter</filter-name>
34        <filter-class>
35            org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
36    </filter>
37    <filter-mapping>
38        <filter-name>JPA Filter</filter-name>
39        <url-pattern>/*</url-pattern>
40    </filter-mapping>
41
42
43    <listener>
44        <listener-class>
45            org.springframework.web.context.ContextLoaderListener</listener-class>
46    </listener>
47
48
49    <servlet-mapping>
50        <servlet-name>default</servlet-name>
51        <url-pattern>*.css</url-pattern>
52    </servlet-mapping>
53    <servlet-mapping>
54        <servlet-name>default</servlet-name>
55        <url-pattern>*.gif</url-pattern>
56    </servlet-mapping>
57    <servlet-mapping>
58        <servlet-name>default</servlet-name>
59        <url-pattern>*.js</url-pattern>
60    </servlet-mapping>
61
62
63    <servlet>
64        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
65        <servlet-class>
66            org.springframework.web.servlet.DispatcherServlet</servlet-class>
67        <init-param>
68            <param-name>contextConfigLocation</param-name>
69            <param-value></param-value>
70        </init-param>
71        <load-on-startup>1</load-on-startup>
72    </servlet>
73    <servlet-mapping>
74        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
75        <url-pattern>/</url-pattern>
76    </servlet-mapping>
77
78
79    <welcome-file-list>
80        <welcome-file>index.html</welcome-file>
81    </welcome-file-list>
82
83</web-app>

Archive Download the corresponding diff file

Branches