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 create a string of repeated characters? - September 1, 2023
- How do I convert datetime string with optional part to a date object? - August 28, 2023
- How do I split large excel file into multiple smaller files? - April 15, 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.