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 add an object to the beginning of Stream? - February 7, 2025
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
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.