在本 Java 教程中,我们将帮助您了解编写基本 Java Web 应用程序的过程,该应用程序管理具有基本功能的用户集合:列表、插入、更新、删除(或 CURD 操作 - 创建、更新、读取和删除)。该应用程序看起来像这样:
您将学习如何使用以下技术构建此应用程序:
- Java 服务器页面 (JSP)
- JSP 标准标签库 (JSTL)
- Java 数据库连接 (JDBC)
- MySQL数据库
- Apache Tomcat 服务器
我们使用 Eclipse IDE 和 Maven 来开发项目。
1. 创建 MySQL 数据库
为简单起见,我们只有一张桌子。执行以下 MySQL 脚本以创建名为test的数据库和名为register的表:
CREATE DATABASE `test`;
CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`sex` varchar(100) NOT NULL,
`country` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB ;
INSERT INTO `user` (`id`, `name`, `password`, `email`, `sex`, `country`) VALUES
(17, 'arun', 'kumar', '[email protected]', 'Male', 'India'),
(19, 'sonoo', 'jaiswal', '[email protected]', 'male', 'India'),
(20, 'Ashok', 'ashok', '[email protected]', 'male', 'India');
您可以使用 MySQL 命令行客户端或 MySQL Workbench 工具来创建数据库。
2. 使用 Maven 创建 Eclipse 项目
在 Eclipse IDE 中,单击File > New > Dynamic Web Project以创建一个新的 Java 动态 Web 项目。将项目命名为UserReg:
请记住将Target runtime选择为Apache Tomcat v8.0,将Dynamic web module version选择为3.1(这是 Java servlet 版本)。
单击完成。然后将此项目转换为 Maven 项目,右键项目,选择Configure > Convert to Maven Project,如下图:
创建 Maven POM 文件需要输入信息,例如组 ID、工件 ID 等。然后在pom.xml 文件中添加以下依赖项:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>UserReg</groupId>
<artifactId>UserReg</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
如您所见,这里的依赖项是针对 Servlet、JSP、JSTL 和 MySQL 连接器 Java(MySQL 的 JDBC 驱动程序)。
3. 编写模型类
接下来,使用以下代码创建一个名为User.java的 Java 类来对数据库中的User实体进行建模:
package com.javatpoint.bean;
public class User {
private int id;
private String name, password, email, sex, country;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
如您所见,该类根据数据库中表book中的 6列有 6个字段:id、name、password, email, sex和 country。
4.编码DAO类
接下来,我们需要实现一个数据访问层 (DAO) 类,该类为数据库中的表user提供 CRUD(创建、读取、更新、删除)操作。这是UserDAO类的完整源代码:
package com.javatpoint.dao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.javatpoint.bean.User;
public class UserDao {
public static Connection getConnection() {
Connection con = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai",
"root", "root");
} catch (Exception e) {
System.out.println(e);
}
return con;
}
public static int save(User u) {
int status = 0;
try {
Connection con = getConnection();
PreparedStatement ps = con
.prepareStatement("insert into user(name,password,email,sex,country) values(?,?,?,?,?)");
ps.setString(1, u.getName());
ps.setString(2, u.getPassword());
ps.setString(3, u.getEmail());
ps.setString(4, u.getSex());
ps.setString(5, u.getCountry());
status = ps.executeUpdate();
} catch (Exception e) {
System.out.println(e);
}
return status;
}
public static int update(User u) {
int status = 0;
try {
Connection con = getConnection();
PreparedStatement ps = con
.prepareStatement("update user set name=?,password=?,email=?,sex=?,country=? where id=?");
ps.setString(1, u.getName());
ps.setString(2, u.getPassword());
ps.setString(3, u.getEmail());
ps.setString(4, u.getSex());
ps.setString(5, u.getCountry());
ps.setInt(6, u.getId());
status = ps.executeUpdate();
} catch (Exception e) {
System.out.println(e);
}
return status;
}
public static int delete(User u) {
int status = 0;
try {
Connection con = getConnection();
PreparedStatement ps = con.prepareStatement("delete from user where id=?");
ps.setInt(1, u.getId());
status = ps.executeUpdate();
} catch (Exception e) {
System.out.println(e);
}
return status;
}
public static List<User> getAllRecords() {
List<User> list = new ArrayList<User>();
try {
Connection con = getConnection();
PreparedStatement ps = con.prepareStatement("select * from user");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setSex(rs.getString("sex"));
u.setCountry(rs.getString("country"));
list.add(u);
}
} catch (Exception e) {
System.out.println(e);
}
return list;
}
public static User getRecordById(int id) {
User u = null;
try {
Connection con = getConnection();
PreparedStatement ps = con.prepareStatement("select * from user where id=?");
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
u = new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setSex(rs.getString("sex"));
u.setCountry(rs.getString("country"));
}
} catch (Exception e) {
System.out.println(e);
}
return u;
}
}
如您所见,JDBC 连接信息是通过其构造函数注入到此类的。以下方法适用于 CRUD 操作:
5.编写JSP页面
接下来,创建 JSP 页面来显示数据库中的所有书籍。以下是项目中WebContent目录下jsp页面的代码:
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="adduserform.jsp">Add User</a>
<a href="viewusers.jsp">View Users</a>
</body>
</html>
adduserform.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add User Form</title>
</head>
<body>
<jsp:include page="userform.html"></jsp:include>
</body>
</html>
userform.html
<a href="viewusers.jsp">View All Records</a>
<br />
<h1>Add New User</h1>
<form action="adduser.jsp" method="post">
<table>
<tr>
<td>Name:</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="email" name="email" /></td>
</tr>
<tr>
<td>Sex:</td>
<td><input type="radio" name="sex" value="male" />Male <input
type="radio" name="sex" value="female" />Female</td>
</tr>
<tr>
<td>Country:</td>
<td><select name="country" style="width: 155px">
<option>India</option>
<option>Pakistan</option>
<option>Afghanistan</option>
<option>Berma</option>
<option>Other</option>
</select></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Add User" /></td>
</tr>
</table>
</form>
<%@page import="com.javatpoint.dao.UserDao"%>
<jsp:useBean id="u" class="com.javatpoint.bean.User"></jsp:useBean>
<jsp:setProperty property="*" name="u" />
<%
int i = UserDao.save(u);
if (i > 0) {
response.sendRedirect("adduser-success.jsp");
} else {
response.sendRedirect("adduser-error.jsp");
}
%>
adduser-success.jsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add User Success</title>
</head>
<body>
<p>Record successfully saved!</p>
<jsp:include page="userform.html"></jsp:include>
</body>
</html>
adduser-error.jsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add User Success</title>
</head>
<body>
<p>Sorry, an error occured!</p>
<jsp:include page="userform.html"></jsp:include>
</body>
</html>
viewusers.jsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>View Users</title>
</head>
<body>
<%@page
import="com.javatpoint.dao.UserDao,com.javatpoint.bean.*,java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<h1>Users List</h1>
<%
List<User> list = UserDao.getAllRecords();
request.setAttribute("list", list);
%>
<table border="1" width="90%">
<tr>
<th>Id</th>
<th>Name</th>
<th>Password</th>
<th>Email</th>
<th>Sex</th>
<th>Country</th>
<th>Edit</th>
<th>Delete</th>
</tr>
<c:forEach items="${list}" var="u">
<tr>
<td>${u.getId()}</td>
<td>${u.getName()}</td>
<td>${u.getPassword()}</td>
<td>${u.getEmail()}</td>
<td>${u.getSex()}</td>
<td>${u.getCountry()}</td>
<td><a href="editform.jsp?id=${u.getId()}">Edit</a></td>
<td><a href="deleteuser.jsp?id=${u.getId()}">Delete</a></td>
</tr>
</c:forEach>
</table>
<br />
<a href="adduserform.jsp">Add New User</a>
</body>
</html>
editform.jsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Edit Form</title>
</head>
<body>
<%@page import="com.javatpoint.dao.UserDao,com.javatpoint.bean.User"%>
<%
String id = request.getParameter("id");
User u = UserDao.getRecordById(Integer.parseInt(id));
%>
<h1>Edit Form</h1>
<form action="edituser.jsp" method="post">
<input type="hidden" name="id" value="<%=u.getId()%>" />
<table>
<tr>
<td>Name:</td>
<td><input type="text" name="name" value="<%=u.getName()%>" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password"
value="<%=u.getPassword()%>" /></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="email" name="email" value="<%=u.getEmail()%>" /></td>
</tr>
<tr>
<td>Sex:</td>
<td><input type="radio" name="sex" value="male" />Male <input
type="radio" name="sex" value="female" />Female</td>
</tr>
<tr>
<td>Country:</td>
<td><select name="country">
<option>India</option>
<option>Pakistan</option>
<option>Afghanistan</option>
<option>Berma</option>
<option>Other</option>
</select></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Edit User" /></td>
</tr>
</table>
</form>
</body>
</html>
edituser.jsp
<%@page import="com.javatpoint.dao.UserDao"%>
<jsp:useBean id="u" class="com.javatpoint.bean.User"></jsp:useBean>
<jsp:setProperty property="*" name="u" />
<%
int i = UserDao.update(u);
response.sendRedirect("viewusers.jsp");
%>
deleteuser.jsp
<%@page import="com.javatpoint.dao.UserDao"%>
<jsp:useBean id="u" class="com.javatpoint.bean.User"></jsp:useBean>
<jsp:setProperty property="*" name="u" />
<%
UserDao.delete(u);
response.sendRedirect("viewusers.jsp");
%>
6. 部署和测试应用程序
至此我们已经完成了项目的代码。是时候部署和测试应用程序以了解它是如何工作的了。如果您不知道如何在 Eclipse 中添加 Apache Tomcat 服务器,请遵循本教程。
在 Web 浏览器中键入以下 URL 以访问 UserReg应用程序:
http://localhost:8080/UserReg
输出