案例总览
![](https://img-blog.csdnimg.cn/a57b9826f8334c999e6e03f1974ea76c.png)
![](https://img-blog.csdnimg.cn/9d0ec753edcc4ad5a7738c055dd4a040.jpeg)
一、查询所有用户信息实现。
![](https://img-blog.csdnimg.cn/83db7b81972e44d09692874eff28ccdd.png)
public class JDBCUtils {
private static DataSource ds;
static {
try {
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
//1.加载配置文件
Properties pro = new Properties();
pro.load(is);
//2.初始化数据连接池
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据连接池对象
*/
public static DataSource getDataSource(){
return ds;
}
/**
* 获取数据库连接对象
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<div align="center">${sessionScope.user.username}欢迎你?</div>
<div align="center">
<%-- <a href="${pageContext.request.contextPath}/userListServlet" style="color: green">查询所有用户信息</a>--%>
<%-- 分页查询--%>
<%-- <a href="${pageContext.request.contextPath}/findUserByPageServlet" style="color: green">查询所有用户信息</a>--%>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=1&rows=5" style="color: green">查询所有用户信息</a>
</div>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>用户信息管理系统</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
<script>
function deleteUser(id){
if (confirm("您确定要删除吗?")){
//注意Location在这里是不行的,必须小写,网络上暂时找不到相关信息
location.href = "${pageContext.request.contextPath}/delUserServlet?id="+id;
}
}
window.onload = function (){
//给删除选中按钮添加单击事件
document.getElementById("delSelected").onclick = function (){
if (confirm("你确定要删除吗?")){
//判断是否有选中,如果没有选中就会报空指针异常
var cbs = document.getElementsByName("uid");
for (let i = 0; i < cbs.length; i++) {
if (cbs[i].checked){
//提交表单,选中的复选框才会被提交(说的只是复选框name,不是其他数据,也不是行数据)
document.getElementById("form").submit();
break;
}
}
}
}
document.getElementById("FisthCb").onclick = function (){
//这里通过name属性对应的属性值获取对象数组。
for (var x of document.getElementsByName("uid")) {
x.checked = this.checked;
};
}
}
</script>
</head>
<body>
<div style="float: left">
<form action="${pageContext.request.contextPath}/findUserByPageServlet" method="post">
<div>
<label for="name">姓名</label>
<input type="text" name="name" value="${requestScope.condition.name[0]}" id="name">
</div>
<div>
<label for="address">籍贯</label>
<input type="text" name="address" value="${requestScope.condition.address[0]}" id="address">
</div>
<div>
<label for="email">邮箱</label>
<input type="text" name="email" value="${requestScope.condition.email[0]}" id="email">
</div>
<button type="submit">查询</button>
</form>
</div>
<div>
<h3 align="center">用户信息列表</h3>
<div style="float: right">
<a href="${pageContext.request.contextPath}/add.jsp">添加联系人</a><br/>
<a href="javascript:void(0);" id="delSelected">删除选中</a>
</div>
<form id="form" action="${pageContext.request.contextPath}/delSelectedServlet" method="post">
<table border="1" width="800" align="center">
<tr>
<th><input type="checkbox" id="FisthCb"></th>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<%-- <c:forEach items="${requestScope.list}" var="user" varStatus="s">--%>
<%-- <tr align="center">--%>
<%-- <td><input type="checkbox" name="uid" value="${user.id}"></td>--%>
<%-- <td>${s.count}</td>--%>
<%-- <td>${user.name}</td>--%>
<%-- <td>${user.gendar}</td>--%>
<%-- <td>${user.age}</td>--%>
<%-- <td>${user.address}</td>--%>
<%-- <td>${user.qq}</td>--%>
<%-- <td>${user.email}</td>--%>
<%-- <td><a href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a> <a href="javascript:deleteUser(${user.id});">删除</a></td>--%>
<%-- <%– <td><a>修改</a> <a href="${pageContext.request.contextPath}/delUserServlet?id=${user.id}">删除</a></td>这样不可取,没有提示就删除,很危险–%>--%>
<%-- </tr>--%>
<%-- </c:forEach>--%>
<%-- 分页查询--%>
<c:forEach items="${requestScope.pageBean.list}" var="user" varStatus="s">
<tr align="center">
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gendar}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a> <a href="javascript:deleteUser(${user.id});">删除</a></td>
</tr>
</c:forEach>
</table>
</form>
<div align="center">
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${requestScope.pageBean.currentPage != 1 ?requestScope.pageBean.currentPage-1:1}&rows=5&name=${requestScope.condition.name[0]}&address=${requestScope.condition.address[0]}&email=${requestScope.condition.email[0]}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<c:forEach begin="1" end="${requestScope.pageBean.totalpage}" var="number">
<c:if test="${requestScope.pageBean.currentPage == number}">
<li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${number}&rows=5&name=${requestScope.condition.name[0]}&address=${requestScope.condition.address[0]}&email=${requestScope.condition.email[0]}">${number}</a></li>
</c:if>
<c:if test="${requestScope.pageBean.currentPage != number}">
<li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${number}&rows=5&name=${requestScope.condition.name[0]}&address=${requestScope.condition.address[0]}&email=${requestScope.condition.email[0]}">${number}</a></li>
</c:if>
</c:forEach>
<li>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${requestScope.pageBean.currentPage == requestScope.pageBean.totalpage ? requestScope.pageBean.totalpage : requestScope.pageBean.currentPage+1}&rows=5&name=${requestScope.condition.name[0]}&address=${requestScope.condition.address[0]}&email=${requestScope.condition.email[0]}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
<span>
共${requestScope.pageBean.totalcount}条记录,共${requestScope.pageBean.totalpage}页
</span>
</ul>
</nav>
</div>
</div>
</body>
</html>
@WebServlet("/userListServlet")
public class UserListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.调用UserServlet完成查询
UserService service = new UserServiceImpl();
List<User> users = service.findAll();
//2.将list存入request域中
req.setAttribute("list",users);
//3.转发到list.jsp页面,服务器访问不需要虚拟目录
req.getRequestDispatcher("/list.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
package service.impl;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import domain.PageBean;
import domain.User;
import service.UserService;
import java.util.List;
import java.util.Map;
public class UserServiceImpl implements UserService {
private UserDao dao = new UserDaoImpl();
@Override
public List<User> findAll() {
//调用Dao完成查询
return dao.findAll();
}
@Override
public User login(User user) {
return dao.findUserByUsernameandPassword(user.getUsername(),user.getPassword());
}
@Override
public void addUser(User user) {
dao.addUser(user);
}
@Override
public void delUser(String id) {
dao.delUser(Integer.parseInt(id));
}
@Override
public User findUserById(String id) {
return dao.findUserById(Integer.parseInt(id));
}
@Override
public void update(User user) {
dao.update(user);
}
@Override
public void delSelectUser(String[] ids) {
//遍历数组删除
for (String i:ids){
dao.delUser(Integer.parseInt(i));
}
}
//分页查询
@Override
public PageBean<User> findUserByPage(String currentPage, String rows, Map<String, String[]> condition) {
//1.创建空的PageBean对象
PageBean<User> pageBean = new PageBean<User>();
//2.设置参数
pageBean.setCurrentPage(Integer.parseInt(currentPage));
pageBean.setRows(Integer.parseInt(rows));//Integer.parseInt(rows)此处如果rows为null,转换则会出现异常,如:java.lang.NumberFormatException: null
//3.调用dao查询总记录数,并设置参数
int totalcount = dao.findTotalCount(condition);
pageBean.setTotalcount(totalcount);
//4.调用dao查询,返回list集合,并设置参数
//计算开始的记录索引
int start = (pageBean.getCurrentPage()-1)*pageBean.getRows();
List<User> list = dao.findUserByPage(start,pageBean.getRows(),condition);
pageBean.setList(list);
//5.计算总页码
int totalpage =(totalcount % pageBean.getRows()) == 0?totalcount/pageBean.getRows():totalcount/pageBean.getRows()+1 ;
pageBean.setTotalpage(totalpage);
//6.返回pagebean对象
return pageBean;
}
}
package dao.impl;
import dao.UserDao;
import domain.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<User> findAll() {
//使用JDBC操作数据库
//1.定义sql语句
String sql = "select * from user;";
List<User> users = jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
System.out.println(users);
return users;
}
@Override
public User findUserByUsernameandPassword(String username, String password) {
//查询到返回User,查询不到(会报错)则返回null;
try {
String sql = "select * from user where username = ? and password = ?;";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),username, password);
System.out.println(user);
return user;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
@Override
public void addUser(User user) {
//1.定义sql
String sql = "insert into user values(null,?,?,?,?,?,?,null,null ,null );";
//2.执行sql
jdbcTemplate.update(sql,user.getName(),user.getGendar(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
}
@Override
public void delUser(int id) {
//1.定义sql
String sql = "delete from user where id = ?;";
//2.执行sql
jdbcTemplate.update(sql,id);
}
@Override
public User findUserById(int id) {
String sql = "select * from user where id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
}
@Override
public void update(User user) {
String sql = "update user set name = ?,gendar = ?,age = ?,address = ?,qq = ?,email = ? where id = ?;";
jdbcTemplate.update(sql,user.getName(),user.getGendar(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());
}
@Override
public int findTotalCount(Map<String, String[]> condition) {
try {
//1.定义模板初始化
String sql = "select count(*) from user where 1 = 1 ";
//2.遍历map集合
StringBuilder sb = new StringBuilder(sql);
Set<String> keySet = condition.keySet();
//定义参数的集合,这是用于给?赋值
List<Object> list = new ArrayList<Object>();
for (String key:keySet){
if ("currentPage".equals(key) || "rows".equals(key)){
continue;
}
//获取value值
String value = condition.get(key)[0];
//判断value是否有值
if (value != null && !"".equals(value)){
sb.append(" and "+key+" like ? ");
list.add("%"+value+"%");//给?条件的值
}
}
// Object[] objects = list.toArray();
//传入一个数组和多个参数的区别是:多个参数其实就是给可变参数赋值,可变参数又是一个数组
Integer count = jdbcTemplate.queryForObject(sb.toString(), Integer.class, list.toArray());//传进去的是数组,可变参数赋值
//这里如果查不到就会出异常
return count;
}catch (Exception e){
e.printStackTrace();
return 0;
}
}
@Override
public List<User> findUserByPage(int start, int rows, Map<String, String[]> condition) {
String sql = "select * from user where 1 = 1 ";
StringBuilder sb = new StringBuilder(sql);
Set<String> keySet = condition.keySet();
List<Object> list = new ArrayList<Object>();
for (String key : keySet) {
String value = condition.get(key)[0];
if (value != null && !"".equals(value)){
if ("currentPage".equals(key) || "rows".equals(key)){
continue;
}
sb.append(" and "+key+" like ? ");
list.add("%"+value+"%");
}
}
//添加分页查询
// sb.append(" limit "+start+","+rows+";");
//也可以这样
sb.append(" limit ?,?;");
//添加分页查询参数值,这里添加的是Object类型,int类型应该是变成包装类Integer
list.add(start);
list.add(rows);
sql = sb.toString();
System.out.println(sql);
System.out.println(list);
List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class), list.toArray());
System.out.println(users);
return users;
}
}
二、登录页面实现。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>管理员登录</title>
<script>
function refreshCode(){
//1.获取验证码图片对象
var vcode = document.getElementById("vcode");
//2.设置其src属性,加上时间戳
vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime();
}
</script>
</head>
<body>
<div>
<h3 align="center">管理员登录</h3>
<form action="${pageContext.request.contextPath}/loginServlet" method="post" style="text-align: center">
<div>
<label for="username">用户名:</label>
<input type="text" name="username" id="username" placeholder="请输入用户名"><br/>
</div>
<div>
<label for="password" >密码:</label>
<input type="password" name="password" id="password" placeholder="请输入密码"><br/>
</div>
<div>
<label for="checkcode">验证码:</label>
<input type="text" name="checkcode" id="checkcode" style="width: 60px">
<a href="javascript:refreshCode()"><img src="${pageContext.request.contextPath}/checkCodeServlet" id="vcode"></a>
</div>
<div>
<input type="submit" value="登录">
</div>
</form>
</div>
<div align="center">
<strong>${requestScope.login_msg}</strong>
</div>
</body>
</html>
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
//2.获取数据
//2.1获取用户填写验证码
String checkcode = req.getParameter("checkcode");
//3.验证码校验
//获取服务器对应的验证码
HttpSession session = req.getSession();
String checkcode_server = (String) session.getAttribute("checkcode");
//删除验证码,确保验证码一次性(只能用一次,用过后就不能再用了)
session.removeAttribute("checkcode");
//忽略大小写
if (!checkcode.equalsIgnoreCase(checkcode_server)){
//验证码不正确
//提示信息
req.setAttribute("login_msg","验证码错误");
//跳转到登录页面
req.getRequestDispatcher("/login.jsp").forward(req,resp);
return;
}
//4.获取数据
Map<String, String[]> map = req.getParameterMap();
//5.封装User对象
User user = new User();
try {
//注意:user对象里面必须包含login.jsp登录页面有name属性的所有参数名,否则会报错(如验证码的name在User类中没有,就报错了),
// User里面可以有登录页面没有的参数
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.调用service查询
UserService service = new UserServiceImpl();
User loginUser = service.login(user);
//5.判断是否登录成功
if (loginUser != null) {
//登录成功
//将用户存入session
session.setAttribute("user",loginUser);
//跳转页面,重定向不能共享数据,这里没有共享数据,所以用重定向。需要虚拟目录,因为是用户使用
resp.sendRedirect(req.getContextPath()+"/index.jsp");
}else {
//登录失败
//提示信息
req.setAttribute("login_msg","用户名或密码错误");
//跳转到登录页面
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
三、添加用户。
![](https://img-blog.csdnimg.cn/6e900b04d8914c2593237502956ba3d9.png)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加联系人页面</title>
</head>
<body>
<div align="center">
<center>添加联系人页面</center>
<form action="${pageContext.request.contextPath}/addUserServlet" METHOD="post">
<div>
<label for="name">姓名:</label>
<input type="text" name="name" id="name">
</div>
<div>
<label>性别:</label>
<input type="radio" name="gendar" value="男" checked="checked">男
<input type="radio" name="gendar" value="女">女
</div>
<div>
<label for="age">年龄:</label>
<input type="text" name="age" value="19" id="age">
</div>
<div>
<label for="address">籍贯:</label>
<select name="address" id="address">
<option value="陕">陕西</option>
<option value="陕">陕西</option>
<option value="陕">陕西</option>
</select>
</div>
<div>
<label for="qq">QQ</label>
<input type="text" name="qq" id="qq" placeholder="请输入QQ号码:">
</div>
<div>
<label for="email">Email:</label>
<input type="text" name="email" id="email" placeholder="请输入邮箱地址:">
</div>
<div>
<input type="submit" value="提交">
<input type="reset" value="重置">
<input type="button" value="返回">
</div>
</form>
</div>
</body>
</html>
@WebServlet("/addUserServlet")
public class addUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
//2.获取参数
Map<String, String[]> map = req.getParameterMap();
System.out.println(1);
//3.封装到User对象
User user = new User();
try {
BeanUtils.populate(user,map);
System.out.println(2);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.调用service保存
UserService service = new UserServiceImpl();
service.addUser(user);
//5.跳转到userListServlet
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
四、删除用户。
![](https://img-blog.csdnimg.cn/a33ea89cc7504dba91aa6c0e88280277.png)
@WebServlet("/delUserServlet")
public class delUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取id, 因为此次的id(是数据库对应的id,int类型的)不是中文也不是字符串,也是get请求,所以就不用设置编码了
String id = req.getParameter("id");
System.out.println(id);
//2.调用service删除
UserService service = new UserServiceImpl();
service.delUser(id);
//3.跳转到查询所有的user信息
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
五、修改用户。
![](https://img-blog.csdnimg.cn/679fd9f3bbe042b0bfe87317c526ca43.png)
@WebServlet("/findUserServlet")
public class findUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取id
String id = req.getParameter("id");
//2.调用service查询
UserService service = new UserServiceImpl();
User user = service.findUserById(id);
//3.共享数据
req.setAttribute("user",user);
//4.跳转修改页面
req.getRequestDispatcher("/update.jsp").forward(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>修改页面</title>
</head>
<body>
<div align="center">
<h3 align="center">修改联系人</h3>
<form action="${pageContext.request.contextPath}/updateUserServlet">
<%-- 添加隐藏域,提交id--%>
<input type="hidden" name="id" value="${requestScope.user.id}">
<div>
<label for="name">姓名:</label>
<input type="text" name="name" value="${requestScope.user.name}" id="name">
</div>
<div>
<label>性别:</label>
<c:if test="${requestScope.user.gendar == '男'}">
<input type="radio" name="gendar" value="男" checked>男
<input type="radio" name="gendar" value="女">女
</c:if>
<c:if test="${requestScope.user.gendar == '女'}">
<input type="radio" name="gendar" value="男" >男
<input type="radio" name="gendar" value="女" checked>女
</c:if>
</div>
<div>
<label for="age">年龄:</label>
<input type="text" name="age" value="${requestScope.user.age}" id="age">
</div>
<div>
<label for="address">籍贯:</label>
<select name="address" id="address">
<c:if test="${requestScope.user.address == '陕'}">
<option value="陕" selected>陕西</option>
<option value="上海">上海</option>
<option value="北京">北京</option>
</c:if>
<c:if test="${requestScope.user.address == '上海'}">
<option value="陕">陕西</option>
<option value="上海" selected>上海</option>
<option value="北京">北京</option>
</c:if>
<c:if test="${requestScope.user.address == '北京'}">
<option value="陕">陕西</option>
<option value="上海">上海</option>
<option value="北京" selected>北京</option>
</c:if>
</select>
</div>
<div>
<label for="qq">QQ</label>
<input type="text" name="qq" id="qq" value="${requestScope.user.qq}" placeholder="请输入QQ号码:">
</div>
<div>
<label for="email">Email:</label>
<input type="text" name="email" id="email" value="${requestScope.user.email}" placeholder="请输入邮箱地址:">
</div>
<div>
<input type="submit" value="提交">
</div>
</form>
</div>
</body>
</html>
@WebServlet("/updateUserServlet")
public class updateUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
//2.获取数据
Map<String, String[]> map = req.getParameterMap();
//3.封装user对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.调用service修改
UserService service = new UserServiceImpl();
service.update(user);
//5.重定向页面
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
六、删除选中实现(核心在前端javascript代码)。
![](https://img-blog.csdnimg.cn/30d9629542d0402394d9965c575d7c47.png)
@WebServlet("/delSelectedServlet")
public class delSelectedServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取所有选中的id
String[] ids = req.getParameterValues("uid");
//2.调用service删除
UserService service = new UserServiceImpl();
service.delSelectUser(ids);
//3.跳转到userListServlet页面
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
七、分页查询和复杂条件查询。
![](https://img-blog.csdnimg.cn/4872bd054c7e4b23af687d91bf1193c9.png)
![](https://img-blog.csdnimg.cn/0e1c2f4698d0411e9ae788ceb2f1094e.png)
@WebServlet("/findUserByPageServlet")
public class fIndUserByPageServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码,不然进来的中文会乱码
req.setCharacterEncoding("utf-8");
//1.获取参数
String currentPage = req.getParameter("currentPage");//当前页码
String rows = req.getParameter("rows");//每页显示的条数
//判断是否为null或者空字符串,防止出现异常
if (currentPage == null || "".equals(currentPage)){
currentPage = "1";
}
if (rows == null || "".equals(rows)){
rows = "5";
}
//获取条件查询方式
Map<String, String[]> condition = req.getParameterMap();
//2.调用service查询
UserService service = new UserServiceImpl();
PageBean<User> pageBean = service.findUserByPage(currentPage,rows,condition);
//3.将PageBean存入request域中
req.setAttribute("pageBean",pageBean);
//将查询条件也存入request
req.setAttribute("condition",condition);
//4.跳转list.jsp页面
req.getRequestDispatcher("/list.jsp").forward(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}