JAVAEE和项目开发——web实战案例

主要内容
案例需求介绍
业务实现

一、 案例需求

1 需求:

实现用户登录与退出登录功能,要求一个用户只能在一处登录。

完成对用户表的 CRUD 操作。

使用技术:
JSP、Servlet、Filter、Listener、JDBC、MySQL

2 创建数据库表

CREATE TABLE `users` ( 
	`userid` int(11) NOT NULL AUTO_INCREMENT, 
	`username` varchar(30) DEFAULT NULL, 
	`userpwd` varchar(30) DEFAULT NULL, 
	`usersex` varchar(2) DEFAULT NULL, 
	`phonenumber` varchar(30) DEFAULT NULL, 
	`qqnumber` varchar(20) DEFAULT NULL, 
	PRIMARY KEY (`userid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3 搭建环境

3.1创建项目

在这里插入图片描述

3.2添加 jar 包

在这里插入图片描述

3.3添加 jstl 标签库的约束文件

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

在这里插入图片描述

3.4创建包

在这里插入图片描述

3.5创建 POJO

package com.bjsxt.pojo;

public class Users {
    
    
    private int userid;
    private String username;
    private String userpwd;
    private String usersex;
    private String phonenumber;
    private String qqnumber;

    public int getUserid() {
    
    
        return userid;
    }

    public void setUserid(int userid) {
    
    
        this.userid = userid;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getUserpwd() {
    
    
        return userpwd;
    }

    public void setUserpwd(String userpwd) {
    
    
        this.userpwd = userpwd;
    }

    public String getUsersex() {
    
    
        return usersex;
    }

    public void setUsersex(String usersex) {
    
    
        this.usersex = usersex;
    }

    public String getPhonenumber() {
    
    
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber) {
    
    
        this.phonenumber = phonenumber;
    }

    public String getQqnumber() {
    
    
        return qqnumber;
    }

    public void setQqnumber(String qqnumber) {
    
    
        this.qqnumber = qqnumber;
    }
}

3.6创建 JDBC 工具类

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/bjsxt?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

JdbcUtils

package com.bjsxt.commons;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

public class JdbcUtils {
    
    
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    static{
    
    
        try {
    
    
        ResourceBundle bundle = ResourceBundle.getBundle("db");
        driver = bundle.getString("jdbc.driver");
        url = bundle.getString("jdbc.url");
        username = bundle.getString("jdbc.username");
        password = bundle.getString("jdbc.password");
        Class.forName(driver);
        } catch (ClassNotFoundException e) {
    
    
            e.printStackTrace();
        }
    }

    //获取连接方法
    public static Connection getConnection(){
    
    
        Connection conn  = null;
        try{
    
    
            conn = DriverManager.getConnection(url,username,password);
        }catch(Exception e){
    
    
            e.printStackTrace();
        }
        return conn;
    }

    //关闭连接
    public static void closeConnection(Connection conn){
    
    
        try {
    
    
            conn.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
}

二、 业务实现

1 用户登录

1.1创建登录页面

<%@ 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 language="JavaScript" src="js/jquery.js"></script>
    <script src="js/cloud.js" type="text/javascript"></script>

    <script language="javascript">
        if(window.parent.length > 0){
    
    
            window.parent.location="login.jsp";
        }
        $(function(){
    
    
            $('.loginbox').css({
    
    'position':'absolute','left':($(window).width()-692)/2});
            $(window).resize(function(){
    
    
                $('.loginbox').css({
    
    'position':'absolute','left':($(window).width()-692)/2});
            })
        });
        function change(){
    
    
            $("#code").attr("src","validateCode.do?"+Math.random());
        }
    </script>

</head>

<body style="background-color:#1c77ac; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;">



<div id="mainBody">
    <div id="cloud1" class="cloud"></div>
    <div id="cloud2" class="cloud"></div>
</div>


<div class="logintop">
    <ul>
        <li><a href="#">回首页</a></li>
        <li><a href="#">帮助</a></li>
        <li><a href="#">关于</a></li>
    </ul>
</div>

<div class="loginbody">

    ${
    
    msg}
    <div class="loginbox loginbox2">

       <form action="login.do" method="post">
           <ul>
               <li><input name="username" type="text" class="loginuser" value="admin" onclick="JavaScript:this.value=''"/></li>
               <li><input name="userpwd" type="passwor" class="loginpwd" value="密码" onclick="JavaScript:this.value=''"/></li>
               <li class="yzm">
                   <span><input name="code" type="text" value="验证码" onclick="JavaScript:this.value=''"/></span><cite><img id="code" src="validateCode.do" onclick="change()"></cite>
               </li>
               <li><input name="" type="submit" class="loginbtn" value="登录"  onclick="javascript:window.location='main.html'"  /></li>
           </ul>
       </form>
    </div>
</div>
</body>
</html>

1.2创建登录业的务持久层

package com.bjsxt.dao;

import com.bjsxt.pojo.Users;

public interface UserLoginDao {
    
    
    public Users selectUsersByUserNameAndUserPwd(String username,String userpwd);
}
package com.bjsxt.dao.impl;

import com.bjsxt.commons.JdbcUtils;
import com.bjsxt.dao.UserLoginDao;
import com.bjsxt.pojo.Users;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserLoginDaoImpl implements UserLoginDao {
    
    
    /**
     * 用户登录的数据库查询
     * @param username
     * @param userpwd
     * @return
     */
    @Override
    public Users selectUsersByUserNameAndUserPwd(String username, String userpwd) {
    
    
        Users  user = null;
        Connection conn = null;
        try{
    
    
            conn = JdbcUtils.getConnection();
            PreparedStatement ps = conn.prepareStatement("select * from users where username = ? and userpwd =  ?");
            ps.setString(1,username);
            ps.setString(2,userpwd);
            ResultSet resultSet = ps.executeQuery();
            while(resultSet.next()){
    
    
                user = new Users();
                user.setUsersex(resultSet.getString("usersex"));
                user.setUserpwd(resultSet.getString("userpwd"));
                user.setUsername(resultSet.getString("username"));
                user.setUserid(resultSet.getInt("userid"));
                user.setPhonenumber(resultSet.getString("phonenumber"));
                user.setQqnumber(resultSet.getString("qqnumber"));
            }
        }catch(Exception e){
    
    
            e.printStackTrace();
        }finally{
    
    

        }
        return user;
    }
}

1.3创建登录业务的业务层

创建自定义异常

扫描二维码关注公众号,回复: 13449295 查看本文章
package com.bjsxt.exception;

/**
 * 用户登录状态的自定义异常
 */
public class UserNotFoundException extends RuntimeException{
    
    
    public UserNotFoundException() {
    
    
    }

    public UserNotFoundException(String message) {
    
    
        super(message);
    }

    public UserNotFoundException(String message, Throwable cause) {
    
    
        super(message, cause);
    }
}

创建业务层

package com.bjsxt.service;

import com.bjsxt.pojo.Users;

public interface UserLoginService {
    
    
    Users userLogin(String username,String userpwd);
}
package com.bjsxt.service.impl;

import com.bjsxt.dao.UserLoginDao;
import com.bjsxt.dao.impl.UserLoginDaoImpl;
import com.bjsxt.exception.UserNotFoundException;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserLoginService;

/**
 * 用户登录业务
 */
public class UserLoginServiceImpl implements UserLoginService {
    
    
    /**
     * 用户登录
     * @param username
     * @param userpwd
     * @return
     */
    @Override
    public Users userLogin(String username, String userpwd) {
    
    
        UserLoginDao userLoginDao = new UserLoginDaoImpl();
        Users users = userLoginDao.selectUsersByUserNameAndUserPwd(username, userpwd);
        if(users == null){
    
    
            throw new UserNotFoundException("用户名或密码有误!");
        }
        return users;
    }
}

1.4创建登录业务的 web 层

1.4.1 创建 Servlet

package com.bjsxt.web.servlet;

import com.bjsxt.commons.Constants;
import com.bjsxt.exception.UserNotFoundException;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserLoginService;
import com.bjsxt.service.impl.UserLoginServiceImpl;

import javax.servlet.ServletContext;
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 javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 处理用户登录请求
 */
@WebServlet("/login.do")
public class UserLoginServlet 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 username = req.getParameter("username");
        String userpwd = req.getParameter("userpwd");
        try{
    
    
         
                UserLoginService userLoginService = new UserLoginServiceImpl();
                Users users = userLoginService.userLogin(username, userpwd);
                //建立客户端与服务端的会话状态         
   				 HttpSession session = req.getSession(); 
    			session.setAttribute(Constants.USER_SESSION_KEY,users);
                //使用重定向方式跳转首页
                resp.sendRedirect("main.jsp");
            
        }catch(UserNotFoundException e){
    
    
           req.setAttribute("msg",e.getMessage());
           req.getRequestDispatcher("login.jsp").forward(req,resp);
        }catch (Exception e){
    
    
           
            resp.sendRedirect("error.jsp");
        }
    }
}

1.4.2 添加登录后的首页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>信息管理系统界面</title>
</head>
<frameset rows="*,31" cols="*" frameborder="no" border="0" framespacing="0">
    <frameset cols="187,*" frameborder="no" border="0" framespacing="0">
        <frame src="left.jsp" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame" title="leftFrame" />
        <frame src="index.jsp" name="rightFrame" id="rightFrame" title="rightFrame" />
    </frameset>
    <frame src="footer.jsp" name="bottomFrame" scrolling="No" noresize="noresize" id="bottomFrame" title="bottomFrame" />
</frameset>
<noframes><body>
</body></noframes>
</html>
</html>

1.4.3 创建登录业务的 Filter

package com.bjsxt.web.filter;

import com.bjsxt.commons.Constants;
import com.bjsxt.pojo.Users;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 判断当前客户端浏览器是否登录的Filter
 */
@WebFilter(urlPatterns = {
    
    "*.do","*.jsp"})
public class UserLoginFilter implements Filter {
    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        String uri = request.getRequestURI();
        //判断当前请求的是否为login.jsp或者login.do,如果请求的是用户登录的资源那么需要放行。
        if(uri.indexOf("login.jsp") != -1 || uri.indexOf("login.do") != -1|| uri.indexOf("validateCode.do") != -1){
    
    
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
    
    
            HttpSession session = request.getSession();
            Users users = (Users) session.getAttribute(Constants.USER_SESSION_KEY);
            if(users !=  null){
    
    
                filterChain.doFilter(servletRequest, servletResponse);
            }else{
    
    
                request.setAttribute(Constants.REQUEST_MSG,"不登录不好使!");
                request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
            }
        }
    }

    @Override
    public void destroy() {
    
    

    }
}

1.5用户只能在一处登录

1.5.1 修改处理登录请求的 Servlet

package com.bjsxt.web.servlet;

import com.bjsxt.commons.Constants;
import com.bjsxt.exception.UserNotFoundException;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserLoginService;
import com.bjsxt.service.impl.UserLoginServiceImpl;

import javax.servlet.ServletContext;
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 javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 处理用户登录请求
 */
@WebServlet("/login.do")
public class UserLoginServlet 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 username = req.getParameter("username");
        String userpwd = req.getParameter("userpwd");
        
        try{
    
    
           
                UserLoginService userLoginService = new UserLoginServiceImpl();
                Users users = userLoginService.userLogin(username, userpwd);
                //建立客户端与服务端的会话状态

                HttpSession session = req.getSession();
                session.setAttribute(Constants.USER_SESSION_KEY,users);
                ServletContext servletContext = this.getServletContext();
                HttpSession temp = (HttpSession) servletContext.getAttribute(users.getUserid()+"");
                if(temp != null){
    
    
                    servletContext.removeAttribute(users.getUserid()+"");
                    temp.invalidate();
                }
                servletContext.setAttribute(users.getUserid()+"",session);
                //使用重定向方式跳转首页
                resp.sendRedirect("main.jsp");
            
        }catch(UserNotFoundException e){
    
    
           req.setAttribute("msg",e.getMessage());
           req.getRequestDispatcher("login.jsp").forward(req,resp);
        }catch (Exception e){
    
    
           
            resp.sendRedirect("error.jsp");
        }
    }
}

1.5.2 修改登录页面

<%@ 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 language="JavaScript" src="js/jquery.js"></script>
    <script src="js/cloud.js" type="text/javascript"></script>

    <script language="javascript">
        if(window.parent.length > 0){
    
    
            window.parent.location="login.jsp";
        }
        $(function(){
    
    
            $('.loginbox').css({
    
    'position':'absolute','left':($(window).width()-692)/2});
            $(window).resize(function(){
    
    
                $('.loginbox').css({
    
    'position':'absolute','left':($(window).width()-692)/2});
            })
        });
        function change(){
    
    
            $("#code").attr("src","validateCode.do?"+Math.random());
        }
    </script>

</head>

<body style="background-color:#1c77ac; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;">



<div id="mainBody">
    <div id="cloud1" class="cloud"></div>
    <div id="cloud2" class="cloud"></div>
</div>


<div class="logintop">
    <ul>
        <li><a href="#">回首页</a></li>
        <li><a href="#">帮助</a></li>
        <li><a href="#">关于</a></li>
    </ul>
</div>

<div class="loginbody">

    ${
    
    msg}
    <div class="loginbox loginbox2">

       <form action="login.do" method="post">
           <ul>
               <li><input name="username" type="text" class="loginuser" value="admin" onclick="JavaScript:this.value=''"/></li>
               <li><input name="userpwd" type="passwor" class="loginpwd" value="密码" onclick="JavaScript:this.value=''"/></li>
               <li class="yzm">
                   <span><input name="" type="text" value="验证码" onclick="JavaScript:this.value=''"/></span><cite>X3D5S</cite>
               </li>
               <li><input name="" type="submit" class="loginbtn" value="登录"  onclick="javascript:window.location='main.html'"  /></li>
           </ul>
       </form>
    </div>
</div>
</body>
</html>

1.5.3 解决 HttpSession 超时销毁时的异常问题

package com.bjsxt.web.listener;

import com.bjsxt.commons.Constants;
import com.bjsxt.pojo.Users;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 解决HttpSession被反复销毁的问题
 */
@WebListener
public class HttpSessionLifecycleListener implements HttpSessionListener {
    
    
    @Override
    public void sessionCreated(HttpSessionEvent se) {
    
    

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
    
    
            //获取ServletContext对象,然后将所对应的HttpSession删除掉
        HttpSession session = se.getSession();
        ServletContext servletContext = session.getServletContext();
        Users users = (Users) session.getAttribute(Constants.USER_SESSION_KEY);
        servletContext.removeAttribute(users.getUserid()+"");
    }
}

1.6在登录中添加验证码功能

添加产生验证的 Servlet

package com.bjsxt.commons;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/validateCode.do")
public class ValidateCodeServlet extends HttpServlet {
    
    

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    
    

		// 在内存中创建图象
		int width = 70, height = 45;
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 获取图形上下文
		Graphics g = image.getGraphics();
		// 生成随机类
		Random random = new Random();
		// 设定背景色
		g.setColor(getRandColor(200, 250));
		g.fillRect(0, 0, width, height);
		// 设定字体
		g.setFont(new Font("Times New Roman", Font.PLAIN, 20));
		// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
		g.setColor(getRandColor(160, 200));
		for (int i = 0; i < 155; i++) {
    
    
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int xl = random.nextInt(12);
			int yl = random.nextInt(12);
			g.drawLine(x, y, x + xl, y + yl);
		}
		// 取随机产生的认证码(4位数字)
		String sRand = "";
		for (int i = 0; i < 4; i++) {
    
    
			String rand = String.valueOf(random.nextInt(10));
			sRand += rand;
			// 将认证码显示到图象中
			g.setColor(new Color(20 + random.nextInt(110), 20 + random
					.nextInt(110), 20 + random.nextInt(110)));
			// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
			g.drawString(rand, 13 * i + 6, 16);
		}
		// 图象生效
		g.dispose();
		
		try {
    
    
			ImageIO.write(image, "JPEG", response.getOutputStream());
		} catch (Exception e) {
    
    
			System.out.println("验证码图片产生出现错误:" + e.toString());
		}
		//保存验证码到Session
		request.getSession().setAttribute(Constants.VALIDATE_CODE_KEY, sRand);
		
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    
    

		this.doGet(request, response);
	}
	/*
	 * 给定范围获得随机颜色
	 */
	private Color getRandColor(int fc, int bc) {
    
    
		Random random = new Random();
		if (fc > 255)
			fc = 255;
		if (bc > 255)
			bc = 255;
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}
}

修改登录页面

<%@ 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 language="JavaScript" src="js/jquery.js"></script>
    <script src="js/cloud.js" type="text/javascript"></script>

    <script language="javascript">
        if(window.parent.length > 0){
    
    
            window.parent.location="login.jsp";
        }
        $(function(){
    
    
            $('.loginbox').css({
    
    'position':'absolute','left':($(window).width()-692)/2});
            $(window).resize(function(){
    
    
                $('.loginbox').css({
    
    'position':'absolute','left':($(window).width()-692)/2});
            })
        });
        function change(){
    
    
            $("#code").attr("src","validateCode.do?"+Math.random());
        }
    </script>

</head>

<body style="background-color:#1c77ac; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;">



<div id="mainBody">
    <div id="cloud1" class="cloud"></div>
    <div id="cloud2" class="cloud"></div>
</div>


<div class="logintop">
    <ul>
        <li><a href="#">回首页</a></li>
        <li><a href="#">帮助</a></li>
        <li><a href="#">关于</a></li>
    </ul>
</div>

<div class="loginbody">

    ${
    
    msg}
    <div class="loginbox loginbox2">

       <form action="login.do" method="post">
           <ul>
               <li><input name="username" type="text" class="loginuser" value="admin" onclick="JavaScript:this.value=''"/></li>
               <li><input name="userpwd" type="passwor" class="loginpwd" value="密码" onclick="JavaScript:this.value=''"/></li>
               <li class="yzm">
                   <span><input name="code" type="text" value="验证码" onclick="JavaScript:this.value=''"/></span><cite><img id="code" src="validateCode.do" onclick="change()"></cite>
               </li>
               <li><input name="" type="submit" class="loginbtn" value="登录"  onclick="javascript:window.location='main.html'"  /></li>
           </ul>
       </form>
    </div>
</div>
</body>
</html>

修改用户登录过滤器

package com.bjsxt.web.filter;

import com.bjsxt.commons.Constants;
import com.bjsxt.pojo.Users;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 判断当前客户端浏览器是否登录的Filter
 */
@WebFilter(urlPatterns = {
    
    "*.do","*.jsp"})
public class UserLoginFilter implements Filter {
    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        String uri = request.getRequestURI();
        //判断当前请求的是否为login.jsp或者login.do,如果请求的是用户登录的资源那么需要放行。
        if(uri.indexOf("login.jsp") != -1 || uri.indexOf("login.do") != -1|| uri.indexOf("validateCode.do") != -1){
    
    
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
    
    
            HttpSession session = request.getSession();
            Users users = (Users) session.getAttribute(Constants.USER_SESSION_KEY);
            if(users !=  null){
    
    
                filterChain.doFilter(servletRequest, servletResponse);
            }else{
    
    
                request.setAttribute(Constants.REQUEST_MSG,"不登录不好使!");
                request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
            }
        }
    }

    @Override
    public void destroy() {
    
    

    }
}

修改处理登录请求的 Servlet

package com.bjsxt.web.servlet;

import com.bjsxt.commons.Constants;
import com.bjsxt.exception.UserNotFoundException;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserLoginService;
import com.bjsxt.service.impl.UserLoginServiceImpl;

import javax.servlet.ServletContext;
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 javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 处理用户登录请求
 */
@WebServlet("/login.do")
public class UserLoginServlet 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 username = req.getParameter("username");
        String userpwd = req.getParameter("userpwd");
        String code = req.getParameter("code");
        try{
    
    
            HttpSession session = req.getSession();
            String codeTemp = (String)session.getAttribute(Constants.VALIDATE_CODE_KEY);
            if(codeTemp.equals(code)){
    
    
                UserLoginService userLoginService = new UserLoginServiceImpl();
                Users users = userLoginService.userLogin(username, userpwd);
                //建立客户端与服务端的会话状态

                session.setAttribute(Constants.USER_SESSION_KEY,users);
                ServletContext servletContext = this.getServletContext();
                HttpSession temp = (HttpSession) servletContext.getAttribute(users.getUserid()+"");
                if(temp != null){
    
    
                    servletContext.removeAttribute(users.getUserid()+"");
                    temp.invalidate();
                }
                servletContext.setAttribute(users.getUserid()+"",session);
                //使用重定向方式跳转首页
                resp.sendRedirect("main.jsp");
            }else{
    
    
                req.setAttribute(Constants.REQUEST_MSG,"验证码有误,请重新输入");
                req.getRequestDispatcher("login.jsp").forward(req,resp);
            }
        }catch(UserNotFoundException e){
    
    
           req.setAttribute("msg",e.getMessage());
           req.getRequestDispatcher("login.jsp").forward(req,resp);
        }catch (Exception e){
    
    
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }
}

2 用户退出登录

修改 left.jsp 页面

<%@ 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 language="JavaScript" src="js/jquery.js"></script>

    <script type="text/javascript">
        $(function(){
    
    
            //导航切换
            $(".menuson .header").click(function(){
    
    
                var $parent = $(this).parent();
                $(".menuson>li.active").not($parent).removeClass("active open").find('.sub-menus').hide();

                $parent.addClass("active");
                if(!!$(this).next('.sub-menus').size()){
    
    
                    if($parent.hasClass("open")){
    
    
                        $parent.removeClass("open").find('.sub-menus').hide();
                    }else{
    
    
                        $parent.addClass("open").find('.sub-menus').show();
                    }


                }
            });

            // 三级菜单点击
            $('.sub-menus li').click(function(e) {
    
    
                $(".sub-menus li.active").removeClass("active")
                $(this).addClass("active");
            });

            $('.title').click(function(){
    
    
                var $ul = $(this).next('ul');
                $('dd').find('.menuson').slideUp();
                if($ul.is(':visible')){
    
    
                    $(this).next('.menuson').slideUp();
                }else{
    
    
                    $(this).next('.menuson').slideDown();
                }
            });
        })
    </script>

</head>

<body style="background:#f0f9fd;">
<div class="lefttop"><span></span>导航菜单</div>

<dl class="leftmenu">
    <dd>
        <div class="title"><span><img src="images/leftico03.png" /></span>用户管理</div>
        <ul class="menuson">
            <li><cite></cite><a href="usermanager/addUser.jsp" target="rightFrame">添加用户</a><i></i></li>
            <li><cite></cite><a href="usermanager/findUser.jsp" target="rightFrame">查询用户</a><i></i></li>
            <li><cite></cite><a href="logout.do" target="rightFrame">退出登录</a><i></i></li>
        </ul>
    </dd>
</dl>

</body>
</html>

创建 Servlet

package com.bjsxt.web.servlet;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 用户退出登录
 */
@WebServlet("/logout.do")
public class LogoutServlet 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 {
    
    
        HttpSession session = req.getSession();
        session.invalidate();
        resp.sendRedirect("login.jsp");
    }
}

3 添加用户业务

3.1创建添加用户持久层

package com.bjsxt.dao;

import com.bjsxt.pojo.Users;

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.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * 用户管理持久层
 */
public class UserManagerDaoImpl implements UserManagerDao {
    
    

    @Override
    public void insertUser(Users users) {
    
    
        Connection conn = null;
        try{
    
    
            conn = JdbcUtils.getConnection();
            conn.setAutoCommit(false);
            PreparedStatement ps = conn.prepareStatement("insert into users 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());
            ps.execute();
            conn.commit();
        }catch(Exception e){
    
    
            e.printStackTrace();
            JdbcUtils.rollbackConnection(conn);
        }finally{
    
    
            JdbcUtils.closeConnection(conn);
        }
    }
}

3.2创建添加用户业务层

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;

import java.util.List;


/**
 * 用户管理业务层
 */
public class UserManagerServiceImpl implements UserManagerService {
    
    
    /**
     * 添加用户
     * @param users
     */
    @Override
    public void addUser(Users users) {
    
    
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        userManagerDao.insertUser(users);
    }
}

3.3创建添加用户的 Servlet

/**
 * 处理用管理请求
 */
@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 void addUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        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");
        }
    }
    //获取用户提交数据
    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();
        users.setQqnumber(qqnumber);
        users.setPhonenumber(phonenumber);
        users.setUsername(username);
        users.setUserpwd(userpwd);
        users.setUsersex(usersex);
        return users;
    }
 }

3.4创建添加用户页面

创建添加用户页面

<%@ 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" />&nbsp;&nbsp;&nbsp;&nbsp;
            <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>&nbsp;</label> 
        	<input type="submit" class="btn" value="确认保存" />
        </li> 
       </ul> 
      </form> 
     </div> 
    </body> 
  </html>

创建成功页面

<%@ 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>

4 查询用户业务

4.1创建查询用户持久层

List<Users> selectUserByProperty(Users users);
 /**
     * 查询用户
     * @param users
     * @return
     */
    @Override
    public List<Users> selectUsersByProperty(Users users) {
    
    
        Connection conn = null;
        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 users where 1=1 ");
        if(users.getUsersex() != null && users.getUsersex().length() > 0){
    
    
            stringBuffer.append(" and usersex = "+users.getUsersex());
        }
        if(users.getQqnumber() != null && users.getQqnumber().length() > 0){
    
    
            stringBuffer.append(" and qqnumber = "+users.getQqnumber());
        }
        if(users.getUsername() != null && users.getUsername().length() > 0){
    
    
            stringBuffer.append(" and username = "+users.getUsername());
        }
        if(users.getPhonenumber() != null &&users.getPhonenumber().length() > 0){
    
    
            stringBuffer.append(" and phonenumber = "+users.getPhonenumber());
        }
        return stringBuffer.toString();
    }

4.2创建查询用户业务层

List<Users> findUser(Users users);
 /**
     * 查询用户
     * @param users
     * @return
     */
    @Override
    public List<Users> findUser(Users users) {
    
    
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        return userManagerDao.selectUsersByProperty(users);
    }

4.3创建查询用户的 Servlet

/**
     * 处理查询用户请求
     */
    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.4创建查询用户与显示结果的页面

创建 findUser.jsp 页面

<%@ 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" />&nbsp;&nbsp;&nbsp;
            <input name="usersex" type="radio" value="0" />&nbsp;</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 页面

<%@ 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> &nbsp;&nbsp;&nbsp;&nbsp;  <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="确定" />&nbsp;
            <input name="" type="button"  class="cancel" value="取消" />
        </div>

    </div>
</div>
</body>
</html>

5 更新用户业务

5.1预更新用户的查询

5.1.1 创建预更新用户查询持久层

Users selectUserByUserId(int userid);
 /**
     * 根据用户ID查询用户
     * @param userid
     * @return
     */
    @Override
    public Users selectUserByUserId(int userid) {
    
    
        Connection conn = null;
        Users user = null;
        try{
    
    
            conn = JdbcUtils.getConnection();
            PreparedStatement preparedStatement = conn.prepareStatement("select * from users 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;
    }

5.1.2 创建预更新用户业务层

Users findUserByUserId(int userid);
    /**
     * 预更新用户的查询
     * @param userid
     * @return
     */
    @Override
    public Users findUserByUserId(int userid) {
    
    
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        return userManagerDao.selectUserByUserId(userid);
    }

5.1.3 创建预更新用户的 Servlet

   /**
     * 预更新查询
     */
    private void preUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
    
    
        String userid = req.getParameter("userid");
        try{
    
    
            UserManagerService userManagerService = new UserManagerServiceImpl();
            Users user = userManagerService.findUserByUserId(Integer.parseInt(userid));
            req.setAttribute("user",user);
            req.getRequestDispatcher("usermanager/updateUser.jsp").forward(req,resp);
        }catch(Exception e){
    
    
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

5.1.4 创建更新用户页面

修改 viewUser.jsp

<%@ 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> &nbsp;&nbsp;&nbsp;&nbsp;  <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="确定" />&nbsp;
            <input name="" type="button"  class="cancel" value="取消" />
        </div>

    </div>
</div>
</body>
</html>

创建 updateUser.jsp

<%@ 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>
    </ul>
</div>

<div class="formbody">

    <div class="formtitle"><span>基本信息</span></div>
    <form action="../userManager.do" method="post">
       
        <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" />&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="usersex" type="radio" value="0" /></c:when>
                <c:otherwise>
                <input name="usersex" type="radio" value="1" />&nbsp;&nbsp;&nbsp;&nbsp;
                <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>&nbsp;</label><input type="submit" class="btn" value="确认保存"/></li>
    </ul>
    </form>
</div>
</body>
</html>

5.2更新用户操作

5.2.1 创建更新用户持久层

void updateUserByUserId(Users users);
  /**
     * 更新用户
     * @param users
     */
    @Override
    public void updateUserByUserId(Users users) {
    
    
        Connection conn = null;
        try{
    
    
            conn = JdbcUtils.getConnection();
            conn.setAutoCommit(false);
            PreparedStatement preparedStatement = conn.prepareStatement("update users 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);
        }
    }

5.2.2 创建更新用户业务层

void modifyUser(Users users);
  /**
     * 修改用户
     * @param users
     */
    @Override
    public void modifyUser(Users users) {
    
    
        UserManagerDao userManagerDao  = new UserManagerDaoImpl();
        userManagerDao.updateUserByUserId(users);
    }

5.2.3 创建更新用户 Servlet

    /**
     * 处理更新用户请求
     */
    private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
    
    
        String userid = req.getParameter("userid");
        Users users = this.createUsers(req);
        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");
        }
    }

5.2.4 修改更新用户页面

修改 updateUser.jsp

<%@ 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>
    </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" />&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="usersex" type="radio" value="0" /></c:when>
                <c:otherwise>
                <input name="usersex" type="radio" value="1" />&nbsp;&nbsp;&nbsp;&nbsp;
                <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>&nbsp;</label><input type="submit" class="btn" value="确认保存"/></li>
    </ul>
    </form>
</div>
</body>
</html>

修改更新用户的 servlet 中的方法

 /**
     * 处理更新用户请求
     */
    private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
    
    
        String userid = req.getParameter("userid");
        Users users = this.createUsers(req);
        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");
        }
    }

6 删除用户业务

6.1创建删除用户持久层

void deleteUserByUserId(int userid);
    /**
     * 根据用户ID删除用户
     * @param userid
     */
    @Override
    public void deleteUserByUserId(int userid) {
    
    
        Connection conn = null;
        try{
    
    
            conn = JdbcUtils.getConnection();
            conn.setAutoCommit(false);
            PreparedStatement ps = conn.prepareStatement("delete from users where userid = ?");
            ps.setInt(1,userid);
            ps.execute();
            conn.commit();
        }catch(Exception e){
    
    
            e.printStackTrace();
            JdbcUtils.rollbackConnection(conn);
        }finally{
    
    
            JdbcUtils.closeConnection(conn);
        }
    }

6.2创建删除用户业务层

void dropUser(int userid);
  /**
     * 删除用户
     * @param userid
     */
    @Override
    public void dropUser(int userid) {
    
    
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        userManagerDao.deleteUserByUserId(userid);
    }

6.3创建删除用户 Servlet

  /**
     * 处理删除用户的请求
     */
    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");
        }
    }

6.4修改 viewUser.jsp 页面完成用户删除

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/6/2 0002
  Time: 19:04
  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> &nbsp;&nbsp;&nbsp;&nbsp;  <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="确定" />&nbsp;
            <input name="" type="button"  class="cancel" value="取消" />
        </div>

    </div>
</div>
</body>
</html>

项目练习源码:https://gitee.com/cutelili/web-combat-case-user-login
下一篇:Ajax

猜你喜欢

转载自blog.csdn.net/qq_42588990/article/details/109181382
今日推荐