I have created a servlet based web application, and I want to used Spring beans in it. So how do I do this in my servlet. Well, it is simple enough to do this. First, I have to obtain the Spring’s WebApplicationContext
, from where I can grab the required bean by my servlet.
Let’s see some lines of code on how to do it, here we go:
package org.kodejava.servlet;
import org.kodejava.servlet.dao.UserDao;
import org.kodejava.servlet.model.User;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/springbean")
public class SpringBeanServletExample extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
ServletContext context = getServletContext();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
if (ctx != null) {
UserDao dao = ctx.getBean("userDao", UserDao.class);
Long userId = Long.valueOf(req.getParameter("user_id"));
User user = dao.getUser(userId);
res.setContentType("text/html");
PrintWriter pw = res.getWriter();
pw.print("User Details: " + user.toString());
pw.flush();
}
}
}
Inside the Java Servlet doGet()
method above I get the ServletContext
, next the WebApplicationContextUtils
help me to get Spring’s WebApplicationContext
. With this object in my hand I can get my UserDao
implementation and do a query from database.
Here are the supporting classes and the configurations.
UserDao.java
package org.kodejava.servlet.dao;
import org.kodejava.servlet.model.User;
public interface UserDao {
User getUser(Long userId);
}
UserDaoImpl.java
package org.kodejava.servlet.dao.impl;
import org.kodejava.servlet.dao.UserDao;
import org.kodejava.servlet.model.User;
public class UserDaoImpl implements UserDao {
@Override
public User getUser(Long userId) {
if (userId == 1L) {
return new User(1L, "jdoe", "John Doe");
}
return new User();
}
}
User.java
package org.kodejava.servlet.model;
import java.util.Objects;
public class User {
private Long id;
private String username;
private String realName;
public User() {
}
public User(Long id, String username, String realName) {
this.id = id;
this.username = username;
this.realName = realName;
}
// Getters and Setters
}
application.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">
<bean id="userDao" class="org.kodejava.servlet.dao.impl.UserDaoImpl"/>
</beans>
web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
Maven dependencies
<!-- https://search.maven.org/remotecontent?filepath=javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.jar -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- https://search.maven.org/remotecontent?filepath=org/springframework/spring-webmvc/5.3.22/spring-webmvc-5.3.22.jar -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
- How do I build simple search page using ZK and Spring Boot? - March 8, 2023
- How do I calculate days between two dates excluding weekends and holidays? - January 12, 2023
- How do I discover the quarter of a given date? - January 11, 2023
Hi Wayan, did you define your servlet within xml bean configuration or this is just enough?
Hi Edgardo,
You don’t need to configure the servlet in the xml bean configuration. This configuration only for the spring beans that will be use by the application.