Here is another example web application built with Spring MVC 3.2 and Spring Data 1.2, integrating with the MongoDB document database.
STEP 1: Create new webapp project, I will use maven for this. (Note: I am on my macbook with Maven 3 and Java 6 installed.)
mvn archetype:generate
-DgroupId=com.manishchhabra.blog
-DartifactId=HelloSpringWithMongoDB
-DarchetypeArtifactId=maven-archetype-webapp
-DinteractiveMode=false
You could create the maven project directly in your IDE as well. But I usually create it on the terminal and import it in eclipse by using the following command (Note: The following command is run within your newly created project directory, i.e. run -> cd HelloSpringWithMongoDB)
mvn eclipse:eclipse -Dwtpversion=2.0
STEP 2: Add Spring Framework 3.2 and Spring Data 1.2 dependencies to your pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< dependency > < groupId >org.springframework</ groupId > < artifactId >spring-orm</ artifactId > < version >3.2.0.RELEASE</ version > </ dependency > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-webmvc</ artifactId > < version >3.2.0.RELEASE</ version > </ dependency > < dependency > < groupId >org.springframework.data</ groupId > < artifactId >spring-data-mongodb</ artifactId > < version >1.2.0.RELEASE</ version > </ dependency > |
STEP 3: Update your web.xml (src/main/webapp/WEB-INF/web.xml) to use Spring’s DispatcherServlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< 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_2_5.xsd" version = "2.5" > < display-name >Spring With MongoDB Web Application</ display-name > < servlet > < servlet-name >dispatcher</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > < load-on-startup >1</ load-on-startup > </ servlet > < servlet-mapping > < servlet-name >dispatcher</ servlet-name > < url-pattern >/</ url-pattern > </ servlet-mapping > < context-param > < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/dispatcher-servlet.xml</ param-value > </ context-param > < listener > < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class > </ listener > </ web-app > |
STEP 4: Add your spring configuration to the dispatcher-servlet.xml
- Use MongoFactoryBean to connect to the MongoDB instance.
- Use MongoTemplate to connect and make queries to the database.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<? 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:context = "http://www.springframework.org/schema/context" xmlns:p = "http://www.springframework.org/schema/p" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd" > < context:component-scan base-package = "com.manishchhabra.blog" /> <!-- Factory bean that creates the Mongo instance --> < bean id = "mongo" class = "org.springframework.data.mongodb.core.MongoFactoryBean" > < property name = "host" value = "localhost" /> </ bean > <!-- MongoTemplate for connecting and quering the documents in the database --> < bean id = "mongoTemplate" class = "org.springframework.data.mongodb.core.MongoTemplate" > < constructor-arg name = "mongo" ref = "mongo" /> < constructor-arg name = "databaseName" value = "test" /> </ bean > <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes --> < bean class = "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> < bean id = "jspViewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix = "/WEB-INF/jsp/" p:suffix = ".jsp" /> </ beans > |
STEP 5: Create a model (using Person as an example), service and controller in the new source directory src/main/java
Model
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.manishchhabra.blog.model; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document public class Person { @Id private String id; private String name; public String getId() { return id; } public void setId(String id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } } |
Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package com.manishchhabra.blog.service; import java.util.List; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Repository; import com.manishchhabra.blog.model.Person; @Repository public class PersonService { @Autowired private MongoTemplate mongoTemplate; public static final String COLLECTION_NAME = "person" ; public void addPerson(Person person) { if (!mongoTemplate.collectionExists(Person. class )) { mongoTemplate.createCollection(Person. class ); } person.setId(UUID.randomUUID().toString()); mongoTemplate.insert(person, COLLECTION_NAME); } public List<Person> listPerson() { return mongoTemplate.findAll(Person. class , COLLECTION_NAME); } public void deletePerson(Person person) { mongoTemplate.remove(person, COLLECTION_NAME); } public void updatePerson(Person person) { mongoTemplate.insert(person, COLLECTION_NAME); } } |
Controller for the CRUD operations
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.manishchhabra.blog.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.RedirectView; import com.manishchhabra.blog.model.Person; import com.manishchhabra.blog.service.PersonService; @Controller public class PersonController { @Autowired private PersonService personService; @RequestMapping (value = "/person" , method = RequestMethod.GET) public String getPersonList(ModelMap model) { model.addAttribute( "personList" , personService.listPerson()); return "output" ; } @RequestMapping (value = "/person/save" , method = RequestMethod.POST) public View createPerson( @ModelAttribute Person person, ModelMap model) { if (StringUtils.hasText(person.getId())) { personService.updatePerson(person); } else { personService.addPerson(person); } return new RedirectView( "/HelloSpringWithMongoDB/person" ); } @RequestMapping (value = "/person/delete" , method = RequestMethod.GET) public View deletePerson( @ModelAttribute Person person, ModelMap model) { personService.deletePerson(person); return new RedirectView( "/HelloSpringWithMongoDB/person" ); } } |
STEP 5: Create a JSP Page in the folder WEB-INF/jsp called output.jsp (This will currently invoke create and delete).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < html > < body > < h2 >Here is a simple CRUD using Spring MVC and MongoDB.</ h2 > < form action = "person/save" method = "post" > < input type = "hidden" name = "id" > < label for = "name" >Person Name</ label > < input type = "text" id = "name" name = "name" /> < input type = "submit" value = "Submit" /> </ form > < table border = "1" > < c:forEach var = "person" items = "${personList}" > < tr > < td >${person.name}</ td >< td >< input type = "button" value = "delete" onclick = "window.location=‘person/delete?id=${person.id}‘" /></ td > </ tr > </ c:forEach > </ table > </ body > </ html > |
STEP 6: That’s it! Its time to run your project. You could either run directly from eclipse or you could run “mvn package” to build a war file and deploy it to your application server. I tested this on tomcat running on port 8080 (http://localhost:8080/HelloSpringWithMongoDB/person) and I could store and delete person with provided names. Working! yeah.. Here is a picture of me playing with the app
You can view or download the full project code athttps://github.com/manishchhabra/HelloSpringWithMongoDB