添加用户
我们分四步走
1. 创建添加用户的持久层
在dao包内,创建一个接口,里面有一个添加用户的抽象方法
package com.bjsxt.dao;
import com.bjsxt.pojo.Users;
import java.util.List;
/**
* 用户管理持久层抽象类
*/
public interface UserManagerDao {
//用户添加的抽象方法
void insertUser(Users users);
}
做接口实现类
package com.bjsxt.dao.impl;
import com.bjsxt.commons.JdbcUtils;
import com.bjsxt.dao.UserManagerDao;
import com.bjsxt.pojo.Users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;
/**
* 用户管理持久层
*/
public class UserManagerDaoImpl implements UserManagerDao {
//实现添加用户的方法
@Override
public void insertUser(Users users) {
//使用jdbc将数据添加到数据库内
Connection conn = null;
try{
//现将Connection事务的自动提交关闭
conn = JdbcUtils.getConnection();
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("insert into user3 values(default,?,?,?,?,?)");
ps.setString(1,users.getUsername());
ps.setString(2,users.getUserpwd());
ps.setString(3,users.getUsersex());
ps.setString(4,users.getPhonenumber());
ps.setString(5,users.getQqnumber());
//执行sql语句
ps.execute();
//关闭事务
conn.commit();
}catch (Exception e){
e.printStackTrace();
//调用事务回滚
JdbcUtils.rollbackConnection(conn);
}finally{
JdbcUtils.closeConnection(conn);
}
}
}
2. 创建添加用户的业务层
在servlet包内,创建一个接口UserManagerService,这个接口内包含了对于用户管理的所有业务
package com.bjsxt.service;
import com.bjsxt.pojo.Users;
/**
* 包含了对于用户管理的所有业务
*/
public interface UserManagerService {
void addUser(Users users);
}
实现接口:
package com.bjsxt.service.impl;
import com.bjsxt.dao.UserManagerDao;
import com.bjsxt.dao.impl.UserManagerDaoImpl;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserManagerService;
/**
* 用户管理业务层
*/
public class UserManagerServiceImpl implements UserManagerService {
/**
* 添加用户
*/
@Override
public void addUser(Users users) {
UserManagerDao userManagerDao = new UserManagerDaoImpl();
userManagerDao.insertUser(users);
}
}
3. 创建添加用户的servlet(userManager.do)
创建UserManagerServlet类,用于处理所有的用户请求
package com.bjsxt.web.servlet;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserManagerService;
import com.bjsxt.service.impl.UserManagerServiceImpl;
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("/userManager.do")
public class UserManagerServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
//可以处理多个请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String flag = req.getParameter("flag");
if ("addUser".equals(flag)){
this.addUser(req,resp);
}
}
//先获取用户提交数据
private Users createUsers(HttpServletRequest req){
String username = req.getParameter("username");
String userpwd = req.getParameter("userpwd");
String usersex = req.getParameter("usersex");
String phonenumber = req.getParameter("phonenumber");
String qqnumber = req.getParameter("qqnumber");
Users users = new Users();
//将获取到的数据都存到user内
users.setQqnumber(qqnumber);
users.setPhonenumber(phonenumber);
users.setUsername(username);
users.setUserpwd(userpwd);
users.setUsersex(usersex);
return users;
}
//处理添加用户的请求
private void addUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从req内取得用户输入的数据,使用createUsers方法存入users对象内
Users users = this.createUsers(req);
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
//使用业务层的添加方法,将数据添加到数据库内
userManagerService.addUser(users);
//跳转到添加成功页面
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
}
4. 创建添加用户的页面
addUser.jsp(上一个文章创建过)
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/2/28 0028
Time: 18:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="../css/style.css" rel="stylesheet" type="text/css" />
<link href="../css/style.css" rel="stylesheet" type="text/css" />
<link href="../css/select.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="#">用户管理</a></li>
<li><a href="#">添加用户</a></li>
</ul>
</div>
<div class="formbody">
<div class="formtitle"><span>基本信息</span></div>
<form action="../userManager.do" method="post">
<input type="hidden" name="flag" value="addUser"/>
<ul class="forminfo">
<li>
<label>用户名</label>
<input name="username" type="text" class="dfinput" /></li>
<li>
<li>
<label>用户密码</label>
<input name="userpwd" type="text" class="dfinput" /><i></i></li>
<li>
<label>性别</label><cite>
<input name="usersex" type="radio" value="1" checked="checked" />男
<input name="usersex" type="radio" value="0" />女
</li>
<li>
<label>联系方式</label>
<input name="phonenumber" type="text" class="dfinput" />
</li>
<li>
<label>QQ号</label>
<input name="qqnumber" type="text" class="dfinput" />
</li>
<li>
<label> </label>
<input type="submit" class="btn" value="确认保存" />
</li>
</ul>
</form>
</div>
</body>
</html>
创建操作成功页面(ok.jsp):
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/3/1 0001
Time: 15:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
function submitForm(){
window.close();
}
</script>
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="#">操作提示</a></li>
</ul>
</div>
操作成功!
</body>
</html>
添加用户的操作完成
查询用户
分四步
1. 创建查询用户持久层
在UsermanagerDao抽象类下添加一个查询用户的抽象方法
/**
* 用户管理持久层抽象类
*/
public interface UserManagerDao {
void insertUser(Users users);
//查询用户的抽象方法
List<Users> selectUsersByProperty(Users users);
}
在用户管理持久层的UserManagerDaoImpl类内实现抽象类的抽象方法
//查询用户
@Override
public List<Users> selectUsersByProperty(Users users) {
Connection conn = null;
//创建一个list,存放每次查询出来的数据
List<Users> list = new ArrayList<>();
try{
conn = JdbcUtils.getConnection();
String sql = this.createSQL(users);
PreparedStatement preparedStatement = conn.prepareStatement(sql);
//执行查询
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Users user = new Users();
user.setUserid(resultSet.getInt("userid"));
user.setPhonenumber(resultSet.getString("phonenumber"));
user.setQqnumber(resultSet.getString("qqnumber"));
user.setUserpwd(resultSet.getString("userpwd"));
user.setUsername(resultSet.getString("username"));
user.setUsersex(resultSet.getString("usersex"));
list.add(user);
}
}catch (Exception e){
e.printStackTrace();
}finally {
JdbcUtils.closeConnection(conn);
}
return list;
}
//拼接查询的SQL语句
private String createSQL(Users users){
StringBuffer stringBuffer = new StringBuffer("select * from user3 where 1=1 ");
//当查询的元素有值时,就将其拼接到sql查询语句内
if(users.getUsername() != null && users.getUsername().length() > 0){
stringBuffer.append(" and username = "+"\""+users.getUsername()+"\"");
}
if(users.getUsersex() != null && users.getUsersex().length() > 0){
stringBuffer.append(" and usersex = "+"\""+users.getUsersex()+"\"");
}
if(users.getPhonenumber() != null &&users.getPhonenumber().length() > 0){
stringBuffer.append(" and phonenumber = "+"\""+users.getPhonenumber()+"\"");
}
if(users.getQqnumber() != null && users.getQqnumber().length() > 0){
stringBuffer.append(" and qqnumber = "+"\""+users.getQqnumber()+"\"");
}
return stringBuffer.toString();
}
2. 创建查询用户业务层
在UserLoginService业务层的抽象类内,添加一个查询的抽象方法
public interface UserManagerService {
void addUser(Users users);
//查询的抽象方法
List<Users> findUser(Users users);
}
在实现类UserManagerServiceImpl.java内实现抽象方法
/**
* 查询用户
*/
@Override
public List<Users> findUser(Users users) {
//调用持久层
UserManagerDao userManagerDao = new UserManagerDaoImpl();
//userManagerDao类的查询方法
return userManagerDao.selectUsersByProperty(users);
}
3. 创建查询用户servlet
在处理用户管理请求的UserManagerServlet类内,添加查询用户的代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String flag = req.getParameter("flag");
if ("addUser".equals(flag)){
this.addUser(req,resp);
}else if ("findUser".equals(flag)){
this.findUser(req,resp);
}
}
/**
* 处理查询用户请求
*/
private void findUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Users user = this.createUsers(req);
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
List<Users> list = userManagerService.findUser(user);
req.setAttribute("list",list);
req.getRequestDispatcher("usermanager/viewUser.jsp").forward(req,resp);
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
4. 创建查询用户与现实结果的页面
创建findUser.jsp页面
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/2/28 0028
Time: 18:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="../css/style.css" rel="stylesheet" type="text/css" />
<link href="../css/select.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="#">用户管理</a></li>
<li><a href="#">查询用户</a></li>
</ul>
</div>
<div class="rightinfo">
<form action="../userManager.do" method="post">
<input type="hidden" name="flag" value="findUser"/>
<ul class="prosearch">
<li>
<label>查询:</label>
<i>用户名</i>
<a>
<input name="username" type="text" class="scinput" />
</a>
</li>
<li>
<label>性别:</label>
<input name="usersex" type="radio" value="1" checked="checked" /> 男
<input name="usersex" type="radio" value="0" /> 女
</li>
<li>
<label>手机号:</label>
<a>
<input name="phonenumber" type="text" class="scinput" />
</a>
</li>
<li>
<label>QQ号:</label>
<a>
<input name="qqnumber" type="text" class="scinput" />
</a>
</li>
<a>
<input type="submit" class="sure" value="查询"/>
</a>
</ul>
</form>
</body>
</html>
创建 viewUser.jsp 页面:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/2/28 0028
Time: 18:03
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="#">用户管理</a></li>
<li><a href="#">查询用户</a></li>
<li><a href="#">查询结果</a></li>
</ul>
</div>
<div class="rightinfo">
<div class="formtitle1"><span>用户列表</span></div>
<table class="tablelist" >
<thead>
<tr>
<th>序号</th>
<th>用户名</th>
<th>用户性别</th>
<th>手机号</th>
<th>QQ号</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="user" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${user.username}</td>
<td>
<c:choose>
<c:when test="${user.usersex == 1}">
男
</c:when>
<c:otherwise>
女
</c:otherwise>
</c:choose>
</td>
<td>${user.phonenumber}</td>
<td>${user.qqnumber}</td>
<td><a href="userManager.do?flag=preUpdate&userid=${user.userid}" class="tablelink">修改</a> <a href="userManager.do?userid=${user.userid}" class="tablelink click"> 删除</a></td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="tip">
<div class="tiptop"><span>提示信息</span><a></a></div>
<div class="tipinfo">
<span><img src="images/ticon.png" /></span>
<div class="tipright">
<p>是否确认对信息的修改 ?</p>
<cite>如果是请点击确定按钮 ,否则请点取消。</cite>
</div>
</div>
<div class="tipbtn">
<input name="" type="button" class="sure" value="确定" />
<input name="" type="button" class="cancel" value="取消" />
</div>
</div>
</div>
</body>
</html>
查询结果:
预更新查询用户
分四步
1. 创建预更新用户查询持久层
在UserManagerDao类下创建一个抽象方法:
public interface UserManagerDao {
void insertUser(Users users);
List<Users> selectUsersByProperty(Users users);
//查询的抽象方法
Users selectUserByUserId(int userid);
}
在UserManagerDaoImpl这个接口实现类下实现抽象方法:
/**
* 根据用户的id查询用户
*/
@Override
public Users selectUserByUserId(int userid) {
Connection conn = null;
Users user = null;
try{
conn = JdbcUtils.getConnection();
PreparedStatement preparedStatement = conn.prepareStatement("select * from user3 where userid = ?");
preparedStatement.setInt(1,userid);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
user = new Users();
user.setUserid(resultSet.getInt("userid"));
user.setPhonenumber(resultSet.getString("phonenumber"));
user.setQqnumber(resultSet.getString("qqnumber"));
user.setUserpwd(resultSet.getString("userpwd"));
user.setUsername(resultSet.getString("username"));
user.setUsersex(resultSet.getString("usersex"));
}
}catch (Exception e){
e.printStackTrace();
}finally{
JdbcUtils.closeConnection(conn);
}
return user;
}
2. 创建预更新用户业务层
public interface UserManagerService {
void addUser(Users users);
List<Users> findUser(Users users);
//创建查询的抽象方法
Users findUserByUserId(int userid);
}
在抽象类UserManagerServiceImpl内实现这个抽象方法:
/**
* 预更新用户的查询
*/
@Override
public Users findUserByUserId(int userid) {
//创建持久层对象
UserManagerDao userManagerDao = new UserManagerDaoImpl();
return userManagerDao.selectUserByUserId(userid);
}
3. 创建预更新的用户Servlet
在处理用户请求的UserManagerServlet.java页面内
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String flag = req.getParameter("flag");
if ("addUser".equals(flag)){
this.addUser(req,resp);
}else if ("findUser".equals(flag)){
this.findUser(req,resp);
}else if("preUpdate".equals(flag)){
this.preUpdate(req,resp);
}
}
/**
* 预更新查询
*/
private void preUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//获取到输入的id
String userid = req.getParameter("userid");
try{
//创建业务层的对象
UserManagerService userManagerService = new UserManagerServiceImpl();
//使用业务层的查询方法根据获取的id查询到user对象
Users user = userManagerService.findUserByUserId(Integer.parseInt(userid));
//将user对象放到req内
req.setAttribute("user",user);
//携带放着user对象的req,跳转到指定页面
req.getRequestDispatcher("usermanager/updateUser.jsp").forward(req,resp);
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
创建更新用户页面
对viewUser.jsp进行修改
<td>
<a href="userManager.do?flag=preUpdate&userid=${user.userid}" class="tablelink">修改</a>
</td>
创建updateUser.jsp页面
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/2/28 0028
Time: 18:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="#">用户管理</a></li>
<li><a href="#">修改用户</a></li>
</ul>
</div>
<div class="formbody">
<div class="formtitle"><span>基本信息</span></div>
<form action="userManager.do" method="post">
<input type="hidden" name="flag" value="modifyUser"/>
<input type="hidden" name="userid" value="${user.userid}"/>
<ul class="forminfo">
<li><label>用户名</label><input name="username" type="text" class="dfinput" value="${user.username}"/> </li>
<li>
<label>性别</label><cite>
<c:choose>
<c:when test="${user.usersex == 1}">
<input name="usersex" type="radio" value="1" checked="checked" />男
<input name="usersex" type="radio" value="0" />女
</c:when>
<c:otherwise>
<input name="usersex" type="radio" value="1" />男
<input name="usersex" type="radio" value="0" checked="checked" />女
</c:otherwise>
</c:choose>
</li>
<li><label>手机号</label><input name="phonenumber" type="text" class="dfinput" value="${user.phonenumber}"/></li>
<li><label>QQ号</label><input name="qqnumber" type="text" class="dfinput" value="${user.qqnumber}"/></li>
<li><label> </label><input type="submit" class="btn" value="确认保存"/></li>
</ul>
</form>
</div>
</body>
</html>
效果:
当我们选择修改的数据时,就会获得他在数据库内的id,然后根据id,将获取的数据显示在修改页面上
更新用户的信息
分四步
创建更新持久层
/**
* 用户管理持久层抽象类
*/
public interface UserManagerDao {
void insertUser(Users users);
List<Users> selectUsersByProperty(Users users);
//根据id查询到要在更新页面上显示的用户信息
Users selectUserByUserId(int userid);
//对修改页上用户信息进行修改操作
void updateUserByUserId(Users users);
}
在持久层实现类UserManagerDaoImpl内实现这个抽象方法:
/**
* 更新用户信息
*/
@Override
public void updateUserByUserId(Users users) {
Connection conn = null;
try{
conn = JdbcUtils.getConnection();
conn.setAutoCommit(false);
PreparedStatement preparedStatement = conn.prepareStatement("update user3 set username=? ,usersex = ?,phonenumber=?,qqnumber = ? where userid = ? ");
preparedStatement.setString(1,users.getUsername());
preparedStatement.setString(2,users.getUsersex());
preparedStatement.setString(3,users.getPhonenumber());
preparedStatement.setString(4,users.getQqnumber());
preparedStatement.setInt(5,users.getUserid());
preparedStatement.execute();
conn.commit();
}catch (Exception e){
e.printStackTrace();
JdbcUtils.rollbackConnection(conn);
}finally{
JdbcUtils.closeConnection(conn);
}
}
创建更新用户的业务层
在业务层的抽象接口内添加一个抽象方法:
/**
* 包含了对于用户管理的所有业务
*/
public interface UserManagerService {
void addUser(Users users);
List<Users> findUser(Users users);
Users findUserByUserId(int userid);
//执行修改操作的抽象方法
void modifyUser(Users users);
}
在抽象实现类UserManagerServiceImpl内实现这个抽象方法:
/**
* 修改用户信息
*/
@Override
public void modifyUser(Users users) {
UserManagerDao userManagerDao = new UserManagerDaoImpl();
userManagerDao.updateUserByUserId(users);
}
创建更新用户的Servlet
在处理用户管理请求的类UserManagerServlet内,添加关于更新用户的代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String flag = req.getParameter("flag");
if ("addUser".equals(flag)){
this.addUser(req,resp);
}else if ("findUser".equals(flag)){
this.findUser(req,resp);
}else if("preUpdate".equals(flag)){
this.preUpdate(req,resp);
}else if ("modifyUser".equals(flag)){
this.modifyUser(req,resp);
}
}
/**
* 处理更新用户请求
*/
private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Users users = this.createUsers(req);
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
userManagerService.modifyUser(users);
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
修改更新用户页面完成用户更新
修改 updateUser.jsp,根据updateUser.jsp的两行代码:
<input type="hidden" name="flag" value="modifyUser"/>
<input type="hidden" name="userid" value="${user.userid}"/>
将获取到的id传到servlet内:
/**
* 处理更新用户请求
*/
private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//获取需要修改的用户id
String userid = req.getParameter("userid");
Users users = this.createUsers(req);
//将userid放到users对象内
users.setUserid(Integer.parseInt(userid));
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
userManagerService.modifyUser(users);
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
修改前:
修改后,查询性别为女的用户:
删除用户
分为四步
1. 创建删除用户的持久层
/**
* 用户管理持久层抽象类
*/
public interface UserManagerDao {
void insertUser(Users users);
List<Users> selectUsersByProperty(Users users);
//根据id查询到要在更新页面上显示的用户信息
Users selectUserByUserId(int userid);
//对用户信息进行修改
void updateUserByUserId(Users users);
//根据用户的id去删除用户
void deleteUserByUserId(int userid);
}
在实现类中实现这个抽象方法:
/**
* 根据用户的id去删除用户的信息
* @param userid
*/
@Override
public void deleteUserByUserId(int userid) {
Connection conn = null;
try{
conn = JdbcUtils.getConnection();
//这里为了演示,手动关闭conn
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("delete from user3 where userid = ?");
ps.setInt(1,userid);
ps.execute();
conn.commit();
}catch(Exception e){
e.printStackTrace();
JdbcUtils.rollbackConnection(conn);
}finally{
JdbcUtils.closeConnection(conn);
}
}
2. 创建删除用户的业务层
/**
* 包含了对于用户管理的所有业务
*/
public interface UserManagerService {
void addUser(Users users);
List<Users> findUser(Users users);
Users findUserByUserId(int userid);
void modifyUser(Users users);
//删除的抽象方法
void dropUser(int userid);
}
在实现类UserManagerServiceImpl内实现这个抽象方法:
/**
* 删除用户信息
*/
@Override
public void dropUser(int userid) {
UserManagerDao userManagerDao = new UserManagerDaoImpl();
userManagerDao.deleteUserByUserId(userid);
}
3. 创建删除用户的Servlet
在UserManagerServletn内添加删除用户的代码:
//可以处理多个请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String flag = req.getParameter("flag");
if ("addUser".equals(flag)){
this.addUser(req,resp);
}else if ("findUser".equals(flag)){
this.findUser(req,resp);
}else if("preUpdate".equals(flag)){
this.preUpdate(req,resp);
}else if ("modifyUser".equals(flag)){
this.modifyUser(req,resp);
}else{
this.dropUser(req,resp);
}
}
/**
* 处理删除用户的请求
*/
private void dropUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String userid = req.getParameter("userid");
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
userManagerService.dropUser(Integer.parseInt(userid));
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
4. 修改viewUser.jsp完成用户的删除
在viewUser.jsp内添加删除语句:
<td><a href="userManager.do?flag=preUpdate&userid=${user.userid}" class="tablelink">修改</a> <a href="userManager.do?userid=${user.userid}" class="tablelink click"> 删除</a></td>
我们先添加一个数据
添加成功
删除成功
查询所有的男性,没有找到被删除的用户信息
添加中文乱码
我们可以看出,问题应该出现在将添加的数据存放到sql数据库内这一步,
排查后发现,利用之前文章提过的
Tomcat的使用及Servlet的实践
可以解决这个问题
对处理用户管理请求的UserManagerServlet类内 用户提交数据的createUsers以及相关的代码进行了修改:
package com.bjsxt.web.servlet;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserManagerService;
import com.bjsxt.service.impl.UserManagerServiceImpl;
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("/userManager.do")
public class UserManagerServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
//可以处理多个请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String flag = req.getParameter("flag");
if ("addUser".equals(flag)){
try {
this.addUser(req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}else if ("findUser".equals(flag)){
try {
this.findUser(req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}else if("preUpdate".equals(flag)){
this.preUpdate(req,resp);
}else if ("modifyUser".equals(flag)){
try {
this.modifyUser(req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}else{
this.dropUser(req,resp);
}
}
//先获取用户提交数据
private Users createUsers(HttpServletRequest req) throws Exception {
String username = req.getParameter("username");
//设定将发送的请求数据的编码方式从"iso-8859-1" 转为"utf-8"
String name = new String(username.getBytes("iso-8859-1"),"utf-8");
String userpwd = req.getParameter("userpwd");
String usersex = req.getParameter("usersex");
String phonenumber = req.getParameter("phonenumber");
String qqnumber = req.getParameter("qqnumber");
Users users = new Users();
//将获取到的数据都存到user内
users.setQqnumber(qqnumber);
users.setPhonenumber(phonenumber);
users.setUsername(name);
users.setUserpwd(userpwd);
users.setUsersex(usersex);
return users;
}
//处理添加用户的请求
private void addUser(HttpServletRequest req, HttpServletResponse resp) throws Exception {
req.setCharacterEncoding("utf-8");
//从req内取得用户输入的数据,使用createUsers方法存入users对象内
Users users = this.createUsers(req);
System.out.println("在addUser方法内获取输入的user信息:"+users.getUsername());
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
//使用业务层的添加方法,将数据添加到数据库内
userManagerService.addUser(users);
//跳转到添加成功页面
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
/**
* 处理查询用户请求
*/
private void findUser(HttpServletRequest req, HttpServletResponse resp) throws Exception {
System.out.println("进入查询阶段");
Users user = this.createUsers(req);
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
List<Users> list = userManagerService.findUser(user);
req.setAttribute("list",list);
req.getRequestDispatcher("usermanager/viewUser.jsp").forward(req,resp);
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
/**
* 预更新查询
*/
private void preUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//获取到输入的id
String userid = req.getParameter("userid");
System.out.println("userid:"+userid);
try{
//创建业务层的对象
UserManagerService userManagerService = new UserManagerServiceImpl();
//使用业务层的查询方法根据获取的id查询到user对象
Users user = userManagerService.findUserByUserId(Integer.parseInt(userid));
//将user对象放到req内
req.setAttribute("user",user);
//携带放着user对象的req,跳转到指定页面
req.getRequestDispatcher("usermanager/updateUser.jsp").forward(req,resp);
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
/**
* 处理更新用户请求
*/
private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws Exception {
//获取需要修改的用户id
String userid = req.getParameter("userid");
Users users = this.createUsers(req);
//将userid放到users对象内
users.setUserid(Integer.parseInt(userid));
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
userManagerService.modifyUser(users);
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
/**
* 处理删除用户的请求
*/
private void dropUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String userid = req.getParameter("userid");
try{
UserManagerService userManagerService = new UserManagerServiceImpl();
userManagerService.dropUser(Integer.parseInt(userid));
resp.sendRedirect("ok.jsp");
}catch(Exception e){
e.printStackTrace();
resp.sendRedirect("error.jsp");
}
}
}
这样,我们添加数据获取到的汉字格式就对了
修改之后的汉字格式也正确