A minimal Spring MVC + JSP CRUD application for managing users records using JdbcTemplate and a container-managed JNDI datasource.
- Java 17
- Maven (WAR packaging)
- Spring MVC 6.1
- JSP/Servlet (Jakarta EE 6)
- JDBC via
JdbcTemplate
web.xml registers DispatcherServlet -> dispatcher-servlet.xml wires Spring MVC beans -> CrudController handles routes -> CrudService runs SQL -> index.jsp renders form and table.
pom.xml: Maven build, dependencies (spring-webmvc,spring-jdbc,jakarta.servlet-api), and WAR packaging.src/main/webapp/WEB-INF/web.xml: RegistersDispatcherServletand maps all requests (/) to Spring MVC.src/main/webapp/WEB-INF/dispatcher-servlet.xml: Spring MVC config (component scan, view resolver, datasource,JdbcTemplate).src/main/resources/application.properties: Externalized app settings (currently datasource JNDI name).src/main/java/org/springbasedcrud/CrudController.java: Web controller for list/create/update/delete endpoints.src/main/java/org/springbasedcrud/CrudService.java: Service layer executing SQL statements withJdbcTemplate.src/main/java/org/springbasedcrud/Users.java: Model/POJO representing a user row.src/main/webapp/WEB-INF/views/index.jsp: UI page with create/update form, users table, and delete action.
<context:component-scan ...>: Detects@Controllerand@Serviceclasses inorg.springbasedcrud.<context:property-placeholder ...>: Loads values fromapplication.properties.<mvc:annotation-driven/>: Enables@GetMapping,@PostMapping, binding, and MVC defaults.InternalResourceViewResolver: Resolves view names likeindexto/WEB-INF/views/index.jsp.JndiObjectFactoryBean (dataSource): Looks up datasource from app server JNDI.JdbcTemplate: Provides simplified JDBC operations using the configured datasource.
- Install prerequisites:
- JDK 17
- Maven 3.9+
- Servlet container/app server (Tomcat/JBoss/WildFly) that supports Jakarta Servlet 6
- Create database/table expected by SQL in
CrudService:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT NOT NULL,
email VARCHAR(150) NOT NULL,
location VARCHAR(120) NOT NULL
);- Configure a datasource in your app server and expose it via JNDI.
- Update
src/main/resources/application.propertiesif your JNDI name differs:app.datasource.jndi-name=java:jboss/datasources/MysqlDS
- Build and deploy:
mvn clean packageDeploy target/springbasedcrud.war to your server.
GET /test: Health check text response.GET /users: List users and optionally open edit mode (?editId=<id>).POST /users/save: Create or update user.POST /users/{id}/delete: Delete user.