[MVC] 综合案例:用户管理系统
程序员文章站
2024-03-21 17:07:22
...
目录
综合案例
1. 环境搭建
- 要求根据三层架构,搭建 Web 项目。步骤如下:
- 创建 Web 项目;
- 导入第三方 Jar 包;
- 导入页面资源;
- 搭建三层包目录结构;
- 导入 User 实体类;
- 导入 DataUtils 工具类;
- 把模拟数据库 userdata.txt 放到桌面,并修改 DataUtils 中的地址值;
- 启动测试。
- 项目结构如下:
- 访问 http://localhost:8080/webappPractice2/list.jsp,测试效果:
- CSS 素材已上传至 CSDN,下载地址:https://download.csdn.net/download/Regino/12363407
2. 用户查询功能
a. 功能介绍
- 使用三层架构和 MVC 模式开发代码,实现用户显示列表功能。
b. 需求分析
- Web 层:EncodeFilter(中文编码)、FindAllServlet(调用 Service 查询,并将 List 存到 Request 域中,转发到 list.jsp)、list.jsp(EL + JSTL)、index.jsp(首页显示);
- Service 层:UserService(调用 DAO 查询);
- DAO 层:UserDao(调用 DataUtils 工具类查询数据库)。
c. 代码实现
i. EncodeFilter
package com.company.web;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/*")
public class EncodeFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {
// 向下转型
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 如果是post请求,解决中文乱码
if (request.getMethod().equalsIgnoreCase("post")) {
request.setCharacterEncoding("utf-8");
}
// 放行
chain.doFilter(request, response);
}
public void destroy() {
}
}
ii. FindAllServlet
package com.company.web;
import com.company.domain.User;
import com.company.service.UserService;
import javax.servlet.ServletException;
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.util.List;
@WebServlet("/FindAllServlet")
public class FindAllServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.调用service查询
UserService userService = new UserService();
List<User> list = userService.findAll();
// 2.将list存储到Request域
request.setAttribute("list", list);
// 3.转发到list.jsp
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
}
iii. UserService
package com.company.service;
import com.company.dao.UserDao;
import com.company.domain.User;
import java.util.List;
public class UserService {
public List<User> findAll() {
// 调用dao查询
UserDao userDao = new UserDao();
// List<User> list = userDao.findAll();
return userDao.findAll();
}
}
iv. UserDao
package com.company.dao;
import com.company.domain.User;
import com.company.util.DataUtils;
import java.util.List;
public class UserDao {
public List<User> findAll() {
// 调用数据库查询
List<User> list = DataUtils.readAll();
return list;
}
}
v. User
package com.company.domain;
public class User {
private String id;
private String name;
private String sex;
private Integer age;
private String address;
private String qq;
private String email;
public User() {
}
public User(String id, String name, String sex, Integer age, String address, String qq, String email) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.address = address;
this.qq = qq;
this.email = email;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", address='" + address + '\'' +
", qq='" + qq + '\'' +
", email='" + email + '\'' +
'}';
}
}
vi. DataUtils
package com.company.util;
import com.company.domain.User;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class DataUtils {
private static String realpath = "C:\\Users\\80626\\Desktop\\userdata.txt";
//从文件中读取所有学员信息
public static List<User> readAll() {
//保存所有学生对象信息
List<User> list = new ArrayList<>();
try {
//得到文件真实路径
//创建字符输入流
Reader isr = new InputStreamReader(new FileInputStream(realpath), "UTF-8");
//创建字符缓冲流
BufferedReader br = new BufferedReader(isr); //装饰模式
//一次读一行
String row = null;
while ((row = br.readLine()) != null) {//row = "1,张三,男,20"
String[] arr = row.split(",");
User user = new User();
user.setId(arr[0]);
user.setName(arr[1]);
user.setSex(arr[2]);
user.setAge(Integer.parseInt(arr[3]));
user.setAddress(arr[4]);
user.setQq(arr[5]);
user.setEmail(arr[6]);
//将User对象添加到集合
list.add(user);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
//向文件中写入所有用户信息--覆盖写
public static void writeAll(List<User> list) {
try {
//创建字符输出流
Writer osw = new OutputStreamWriter(new FileOutputStream(realpath), "UTF-8");
//创建字符缓冲流
BufferedWriter out = new BufferedWriter(osw);
//循环向文件中写入文本
for (User user : list) {
out.write(user.getId() + "," + user.getName() + "," + user.getSex() + "," + user.getAge() + "," + user.getAddress() + "," + user.getQq() + "," + user.getEmail());
out.newLine();//创建新的一行
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
List<User> list = readAll();
}
}
vii. index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>首页</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
</script>
</head>
<body>
<div align="center">
<a
href="${pageContext.request.contextPath}/FindAllServlet" class="btn btn-primary">查询用户信息列表
</a>
</div>
</body>
</html>
viii. list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>用户信息管理系统</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<style type="text/css">
td, th {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h3 style="text-align: center">用户信息列表</h3>
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td>
<a class="btn btn-default btn-sm" href="update.jsp">修改</a>
<a class="btn btn-default btn-sm" href="">删除</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
d. 测试
- 访问首页 http://localhost:8080/webappPractice2/,页面显示:
- 查询用户信息列表可得:
3. 添加用户功能
a. 功能介绍
- 点击添加用户跳转添加用户页面,在添加用户页面,添加新的用户。
b. 需求分析
- Web 层:AddServlet(接收请求参数 map,封装到 user 实体,调用 service 添加,重定向到 FindAllServlet);
- Service 层:UserService(调用 dao 添加);
- Dao 层:UserDao(通过 DataUtils 查询 List,向 List 中添加 User 对象,将 List 写入到数据库)。
c. 代码实现
i. add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>添加用户</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<center><h3>添加联系人页面</h3></center>
<form action="${pageContext.request.contextPath}/AddServlet" method="post">
<div class="form-group">
<label for="name">编号:</label>
<input type="text" class="form-control" id="id" name="id" placeholder="请输入编号">
</div>
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
</div>
<div class="form-group">
<label>性别:</label>
<input type="radio" name="sex" value="男" checked="checked"/>男
<input type="radio" name="sex" value="女"/>女
</div>
<div class="form-group">
<label for="age">年龄:</label>
<input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
</div>
<div class="form-group">
<label for="address">籍贯:</label>
<input type="text" class="form-control" id="address" name="address" placeholder="请输入籍贯">
</div>
<div class="form-group">
<label for="qq">QQ:</label>
<input type="text" class="form-control" id="qq" name="qq" placeholder="请输入QQ号码"/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="text" class="form-control" id="email" name="email" placeholder="请输入邮箱地址"/
</div>
<div class="form-group" style="text-align: center">
<input class="btn btn-primary" type="submit" value="提交" />
<input class="btn btn-default" type="reset" value="重置" />
<input class="btn btn-default" type="button" value="返回" />
</div>
</form>
</div>
</body>
</html>
ii. AddServlet
package com.company.web;
import com.company.domain.User;
import com.company.service.UserService;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
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.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 1.接收请求参数map
Map<String, String[]> parameterMap = request.getParameterMap();
// 2.快速封装User实体
User user = new User();
BeanUtils.populate(user, parameterMap);
// 3.调用service,添加User
UserService userService = new UserService();
userService.add(user);
// 4.重定向FindAllServlet
response.sendRedirect(request.getContextPath() + "/FindAllServlet");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
iii. UserService
package com.company.service;
import com.company.dao.UserDao;
import com.company.domain.User;
import java.util.List;
public class UserService {
UserDao userDao = new UserDao();
public List<User> findAll() {
// 调用dao查询
// List<User> list = userDao.findAll();
return userDao.findAll();
}
public void add(User user){
// 调用dao添加
userDao.add(user);
}
}
iv. UserDao
package com.company.dao;
import com.company.domain.User;
import com.company.util.DataUtils;
import java.util.List;
public class UserDao {
public List<User> findAll() {
// 调用数据库查询
List<User> list = DataUtils.readAll();
return list;
}
public void add(User user){
// 1.调用数据库查询
List<User> list=DataUtils.readAll();
// 2. List添加User
list.add(user);
// 3. 新的List集合覆盖数据库
DataUtils.writeAll(list);
}
}
d. 测试
- 访问 http://localhost:8080/webappPractice2/add.jsp,页面显示:
- 填写表单并提交:
4. 删除用户功能
a. 主要需求
- 点击删除按钮删除当前一整行数据,删除之后重新查询全部展示删除效果。
b. 需求分析
- Web 层:DeleteServlet(接收请求参数 ID,调用 service 删除,重定向到 FindAllServlet);
- Service 层:UserService(调用 dao 删除);
- Dao 层:UserDao(先查询所有,遍历判断有无此 ID 的记录,如果有就删除,覆盖数据)。
c. 代码实现
i. list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>用户信息管理系统</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<style type="text/css">
td, th {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h3 style="text-align: center">用户信息列表</h3>
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td>
<a class="btn btn-default btn-sm" href="update.jsp">修改</a>
<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/DeleteServlet?id=${user.id}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
ii. DeleteServlet
package com.company.web;
import com.company.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.接收请求参数ID
String id = request.getParameter("id");
// 2.调用service删除
UserService userService = new UserService();
userService.delete(id);
// 3.重定向到FindAllServlet
response.sendRedirect(request.getContextPath() + "/FindAllServlet");
}
}
iii. UserService
package com.company.service;
import com.company.dao.UserDao;
import com.company.domain.User;
import java.util.List;
public class UserService {
UserDao userDao = new UserDao();
public List<User> findAll() {
// 调用dao查询
// List<User> list = userDao.findAll();
return userDao.findAll();
}
public void add(User user) {
// 调用dao添加
userDao.add(user);
}
public void delete(String id) {
userDao.delete(id);
}
}
iv. UserDao
package com.company.dao;
import com.company.domain.User;
import com.company.util.DataUtils;
import java.util.List;
public class UserDao {
public List<User> findAll() {
// 调用数据库查询
List<User> list = DataUtils.readAll();
return list;
}
public void add(User user) {
// 1.调用数据库查询
List<User> list = DataUtils.readAll();
// 2. List添加User
list.add(user);
// 3. 新的List集合覆盖数据库
DataUtils.writeAll(list);
}
public void delete(String id) {
// 1.查询所有
List<User> list = DataUtils.readAll();
// 2.遍历
for (User user : list) {
// 查找有无此ID记录,可避免修改异常
if (user.getId().equalsIgnoreCase(id)) {
list.remove(user);
break;
}
}
// 3.将删完的list覆盖数据库
DataUtils.writeAll(list);
}
}
d. 测试
- 访问首页 http://localhost:8080/webappPractice2/,调出列表后删除 Regino 一栏:
5. 修改用户功能
a. 主要需求
- 查找指定用户:点击修改按钮,跳转到更新页面(回显数据)。
- 修改用户:重写输入用户信息,点击提交,更新系统。
b. 需求分析
c. 代码实现:查找指定用户
i. list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>用户信息管理系统</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<style type="text/css">
td, th {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h3 style="text-align: center">用户信息列表</h3>
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td>
<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/FindByIdServlet?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/DeleteServlet?id=${user.id}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
ii. FindByIdServlet
package com.company.web;
import com.company.domain.User;
import com.company.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/FindByIdServlet")
public class FindByIdServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.接收请求参数id
String id = request.getParameter("id");
// 2.调用service,根据id查询
UserService userService = new UserService();
User user = userService.findById(id);
// 3.将user存储到request域
request.setAttribute("user", user);
// 4.转发到update.jsp
request.getRequestDispatcher("/update.jsp").forward(request, response);
}
}
iii. UserService
package com.company.service;
import com.company.dao.UserDao;
import com.company.domain.User;
import java.util.List;
public class UserService {
UserDao userDao = new UserDao();
public List<User> findAll() {
// 调用dao查询
// List<User> list = userDao.findAll();
return userDao.findAll();
}
public void add(User user) {
// 调用dao添加
userDao.add(user);
}
public void delete(String id) {
userDao.delete(id);
}
public User findById(String id){
// 调用dao,根据id查询
return userDao.findById(id);
}
}
iv. UserDao
package com.company.dao;
import com.company.domain.User;
import com.company.util.DataUtils;
import java.util.List;
public class UserDao {
public List<User> findAll() {
// 调用数据库查询
List<User> list = DataUtils.readAll();
return list;
}
public void add(User user) {
// 1.调用数据库查询
List<User> list = DataUtils.readAll();
// 2. List添加User
list.add(user);
// 3. 新的List集合覆盖数据库
DataUtils.writeAll(list);
}
public void delete(String id) {
// 1.查询所有
List<User> list = DataUtils.readAll();
// 2.遍历
for (User user : list) {
// 查找有无此ID记录,可避免修改异常
if (user.getId().equalsIgnoreCase(id)) {
list.remove(user);
break;
}
}
// 3.将删完的list覆盖数据库
DataUtils.writeAll(list);
}
public User findById(String id) {
User returnUser = null;
// 1.查询所有
List<User> list = DataUtils.readAll();
// 2.遍历
for (User user : list) {
if (user.getId().equalsIgnoreCase(id)) {
returnUser = user;
}
}
// 3.返回
return returnUser;
}
}
v. update.jsp
<%@ page language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>修改用户</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/jquery-2.1.0.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="container">
<h3 style="text-align: center;">修改用户</h3>
<form action="" method="post">
<div class="form-group">
<label for="name">编号:</label>
<input type="text" class="form-control" id="id" readonly="readonly" name="id" value="${user.id}">
</div>
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名"/>
</div>
<div class="form-group">
<label>性别:</label>
<input type="radio" name="sex" value="男" <c:if test="${user.sex=='男'}">checked="checked"</c:if>>/>男
<input type="radio" name="sex" value="女" <c:if test="${user.sex=='女'}">checked="checked"</c:if>>/>女
</div>
<div class="form-group">
<label for="age">年龄:</label>
<input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄"/>
</div>
<div class="form-group">
<div class="form-group">
<label for="address">籍贯:</label>
<input type="text" class="form-control" id="address" name="address" placeholder="请输入籍贯">
</div>
</div>
<div class="form-group">
<label for="qq">QQ:</label>
<input type="text" class="form-control" id="qq" name="qq" placeholder="请输入QQ号码"/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="text" class="form-control" id="email" name="email" placeholder="请输入邮箱地址"/>
</div>
<div class="form-group" style="text-align: center">
<input class="btn btn-primary" type="submit" value="提交"/>
<input class="btn btn-default" type="reset" value="重置"/>
<input class="btn btn-default" type="button" value="返回"/>
</div>
</form>
</div>
</div>
</body>
</html>
d. 测试:用户回显
- 访问主页 http://localhost:8080/webappPractice2/,查询用户信息列表后,点击修改:
e. 代码实现:修改用户
i. update.jsp
<%@ page language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>修改用户</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/jquery-2.1.0.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="container">
<h3 style="text-align: center;">修改用户</h3>
<form action="${pageContext.request.contextPath}/UpdateServlet" method="post">
<div class="form-group">
<label for="name">编号:</label>
<input type="text" class="form-control" id="id" readonly="readonly" name="id" value="${user.id}">
</div>
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名"/>
</div>
<div class="form-group">
<label>性别:</label>
<input type="radio" name="sex" value="男" <c:if test="${user.sex=='男'}">checked="checked"</c:if>>/>男
<input type="radio" name="sex" value="女" <c:if test="${user.sex=='女'}">checked="checked"</c:if>>/>女
</div>
<div class="form-group">
<label for="age">年龄:</label>
<input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄"/>
</div>
<div class="form-group">
<div class="form-group">
<label for="address">籍贯:</label>
<input type="text" class="form-control" id="address" name="address" placeholder="请输入籍贯">
</div>
</div>
<div class="form-group">
<label for="qq">QQ:</label>
<input type="text" class="form-control" id="qq" name="qq" placeholder="请输入QQ号码"/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="text" class="form-control" id="email" name="email" placeholder="请输入邮箱地址"/>
</div>
<div class="form-group" style="text-align: center">
<input class="btn btn-primary" type="submit" value="提交"/>
<input class="btn btn-default" type="reset" value="重置"/>
<input class="btn btn-default" type="button" value="返回"/>
</div>
</form>
</div>
</div>
</body>
</html>
ii. UpdateServlet
package com.company.web;
import com.company.domain.User;
import com.company.service.UserService;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
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.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 1.接收请求参数
Map<String, String[]> parameterMap = request.getParameterMap();
// 2.快速封装到User实体
User newUser = new User();
BeanUtils.populate(newUser, parameterMap);
// 3.调用service,更新
UserService userService = new UserService();
userService.update(newUser);
// 4.重定向,FindAllServlet
response.sendRedirect(request.getContextPath()+"/FindAllServlet");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
iii. UserService
package com.company.service;
import com.company.dao.UserDao;
import com.company.domain.User;
import java.util.List;
public class UserService {
UserDao userDao = new UserDao();
public List<User> findAll() {
// 调用dao查询
// List<User> list = userDao.findAll();
return userDao.findAll();
}
public void add(User user) {
// 调用dao添加
userDao.add(user);
}
public void delete(String id) {
userDao.delete(id);
}
public User findById(String id){
// 调用dao,根据id查询
return userDao.findById(id);
}
public void update(User newUser){
userDao.update(newUser);
}
}
iv. UserDao
package com.company.dao;
import com.company.domain.User;
import com.company.util.DataUtils;
import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public class UserDao {
public List<User> findAll() {
// 调用数据库查询
List<User> list = DataUtils.readAll();
return list;
}
public void add(User user) {
// 1.调用数据库查询
List<User> list = DataUtils.readAll();
// 2. List添加User
list.add(user);
// 3. 新的List集合覆盖数据库
DataUtils.writeAll(list);
}
public void delete(String id) {
// 1.查询所有
List<User> list = DataUtils.readAll();
// 2.遍历
for (User user : list) {
// 查找有无此ID记录,可避免修改异常
if (user.getId().equalsIgnoreCase(id)) {
list.remove(user);
break;
}
}
// 3.将删完的list覆盖数据库
DataUtils.writeAll(list);
}
public User findById(String id) {
User returnUser = null;
// 1.查询所有
List<User> list = DataUtils.readAll();
// 2.遍历
for (User user : list) {
if (user.getId().equalsIgnoreCase(id)) {
returnUser = user;
}
}
// 3.返回
return returnUser;
}
public void update(User newUser) {
// 1.查询所有
List<User> list = DataUtils.readAll();
// 2遍历
for (User user : list) {
// 判断ID是否一致
if (user.getId().equalsIgnoreCase(newUser.getId())) {
try {
// 3.新的数据,覆盖旧的
/* user.setName(newUser.getName());
user.setAge(newUser.getAge());*/
BeanUtils.copyProperties(user, newUser);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
// 4.覆盖原有的数据库
DataUtils.writeAll(list);
}
}
f. 测试
- 访问主页 http://localhost:8080/webappPractice2/,查询用户信息列表,点击修改,提交表单:
推荐阅读
-
[MVC] 综合案例:用户管理系统
-
Dynamics 365 部署管理员账号被禁用后所有用户无法登录系统的解决方法
-
连锁百货企业数据系统整理解决方案 博客分类: 综合解决方案 连锁百货企业财务管理企业信息化数据系统解决方案
-
如何通过数据分析,精细化客户管理? 博客分类: 数据分析系统,案例,商业智能 商业智能
-
ASP.NET笔记之文章发布管理小系统案例
-
ASP.NET笔记之文章发布管理小系统案例
-
MallBuilder 多用户商城管理系统 v5.8.1.1,mallbuilder
-
PHP经典项目案例-(一)博客管理系统4
-
ASP.NET MVC5+EF6+EasyUI后台管理系统 微信公众平台开发之资源环境准备
-
php开发ebay店铺管理系统-订单综合统计