目录
用户信息的增删改查操作
Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat
- create database day17; -- 创建数据库
- use day17; -- 使用数据库
- create table user( -- 创建表
- id int primary key auto_increment,
- name varchar(20) not null,
- gender varchar(5),
- age int,
- address varchar(32),
- qq varchar(20),
- email varchar(50)
- )
下面一次导入以下包
通过BooStrap官网可以找到相应的文件,或者是自己喜欢的文件格式。
add.html
- html>
- <html lang="zh-CN">
- <head>
-
- <meta charset="utf-8">
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
-
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>添加用户title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- head>
- <body>
- <div class="container">
- <center><h3>添加联系人页面h3>center>
- <form action="" method="post">
- <div class="form-group">
- <label for="name">姓名:label>
- <input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
- div>
-
- <div class="form-group">
- <label>性别:label>
- <input type="radio" name="sex" value="男" checked="checked"/>男
- <input type="radio" name="sex" value="女"/>女
- div>
-
- <div class="form-group">
- <label for="age">年龄:label>
- <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
- div>
-
- <div class="form-group">
- <label for="address">籍贯:label>
- <select name="address" class="form-control" id="jiguan">
- <option value="广东">广东option>
- <option value="广西">广西option>
- <option value="湖南">湖南option>
- select>
- div>
-
- <div class="form-group">
- <label for="qq">QQ:label>
- <input type="text" class="form-control" name="qq" placeholder="请输入QQ号码"/>
- div>
-
- <div class="form-group">
- <label for="email">Email:label>
- <input type="text" class="form-control" name="email" placeholder="请输入邮箱地址"/>
- div>
-
- <div class="form-group" style="text-align: center">
- <input class="btn btn-primary" type="submit" value="提交" />
- <input class="btn btn-default" type="reset" value="重置" />
- <input class="btn btn-default" type="button" value="返回" />
- div>
- form>
- div>
- body>
- html>
index.html
- html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8"/>
- <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <title>首页title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- <script type="text/javascript">
- script>
- head>
- <body>
- <div align="center">
- <a
- href="list.html" style="text-decoration:none;font-size:33px">查询所有用户信息
- a>
- div>
- body>
- html>
list.html
- html>
- <html lang="zh-CN">
- <head>
-
- <meta charset="utf-8">
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
-
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>用户信息管理系统title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- <style type="text/css">
- td, th {
- text-align: center;
- }
- style>
- head>
- <body>
- <div class="container">
- <h3 style="text-align: center">用户信息列表h3>
- <table border="1" class="table table-bordered table-hover">
- <tr class="success">
- <th>编号th>
- <th>姓名th>
- <th>性别th>
- <th>年龄th>
- <th>籍贯th>
- <th>QQth>
- <th>邮箱th>
- <th>操作th>
- tr>
- <tr>
- <td>1td>
- <td>张三td>
- <td>男td>
- <td>20td>
- <td>广东td>
- <td>44444222td>
- <td>zs@qq.comtd>
- <td><a class="btn btn-default btn-sm" href="update.html">修改a> <a class="btn btn-default btn-sm" href="">删除a>td>
- tr>
- <tr>
- <td>2td>
- <td>张三td>
- <td>男td>
- <td>20td>
- <td>广东td>
- <td>44444222td>
- <td>zs@qq.comtd>
- <td><a class="btn btn-default btn-sm" href="update.html">修改a> <a class="btn btn-default btn-sm" href="">删除a>td>
- tr>
- <tr>
- <td>3td>
- <td>张三td>
- <td>男td>
- <td>20td>
- <td>广东td>
- <td>44444222td>
- <td>zs@qq.comtd>
- <td><a class="btn btn-default btn-sm" href="update.html">修改a> <a class="btn btn-default btn-sm" href="">删除a>td>
- tr>
- <tr>
- <td>4td>
- <td>张三td>
- <td>男td>
- <td>20td>
- <td>广东td>
- <td>44444222td>
- <td>zs@qq.comtd>
- <td><a class="btn btn-default btn-sm" href="update.html">修改a> <a class="btn btn-default btn-sm" href="">删除a>td>
- tr>
- <tr>
- <td>5td>
- <td>张三td>
- <td>男td>
- <td>20td>
- <td>广东td>
- <td>44444222td>
- <td>zs@qq.comtd>
- <td><a class="btn btn-default btn-sm" href="update.html">修改a> <a class="btn btn-default btn-sm" href="">删除a>td>
- tr>
- <tr>
- <td colspan="8" align="center"><a class="btn btn-primary" href="add.html">添加联系人a>td>
- tr>
- table>
- div>
- body>
- html>
login.html
- html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8"/>
- <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <title>管理员登录title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- <script type="text/javascript">
- script>
- head>
- <body>
- <div class="container" style="width: 400px;">
- <h3 style="text-align: center;">管理员登录h3>
- <form action="login" method="post">
- <div class="form-group">
- <label for="user">用户名:label>
- <input type="text" name="user" class="form-control" id="user" placeholder="请输入用户名"/>
- div>
-
- <div class="form-group">
- <label for="password">密码:label>
- <input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
- div>
-
- <div class="form-inline">
- <label for="vcode">验证码:label>
- <input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
- <a href="javascript:refreshCode()"><img src="vcode" title="看不清点击刷新" id="vcode"/>a>
- div>
- <hr/>
- <div class="form-group" style="text-align: center;">
- <input class="btn btn btn-primary" type="submit" value="登录">
- div>
- form>
-
-
- <div class="alert alert-warning alert-dismissible" role="alert">
- <button type="button" class="close" data-dismiss="alert" >
- <span>×span>button>
- <strong>登录失败!strong>
- div>
- div>
- body>
- html>
update.html
- html>
- <html lang="zh-CN">
- <head>
- <base href="<%=basePath%>"/>
-
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>修改用户title>
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
- <script src="js/jquery-2.1.0.min.js">script>
- <script src="js/bootstrap.min.js">script>
-
- head>
- <body>
- <div class="container" style="width: 400px;">
- <h3 style="text-align: center;">修改联系人h3>
- <form action="" method="post">
- <div class="form-group">
- <label for="name">姓名:label>
- <input type="text" class="form-control" id="name" name="name" readonly="readonly" placeholder="请输入姓名" />
- div>
-
- <div class="form-group">
- <label>性别:label>
- <input type="radio" name="sex" value="男" />男
- <input type="radio" name="sex" value="女" />女
- div>
-
- <div class="form-group">
- <label for="age">年龄:label>
- <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄" />
- div>
-
- <div class="form-group">
- <label for="address">籍贯:label>
- <select name="address" class="form-control" >
- <option value="广东">广东option>
- <option value="广西">广西option>
- <option value="湖南">湖南option>
- select>
- div>
-
- <div class="form-group">
- <label for="qq">QQ:label>
- <input type="text" class="form-control" name="qq" placeholder="请输入QQ号码"/>
- div>
-
- <div class="form-group">
- <label for="email">Email:label>
- <input type="text" class="form-control" name="email" placeholder="请输入邮箱地址"/>
- div>
-
- <div class="form-group" style="text-align: center">
- <input class="btn btn-primary" type="submit" value="提交" />
- <input class="btn btn-default" type="reset" value="重置" />
- <input class="btn btn-default" type="button" value="返回"/>
- div>
- form>
- div>
- body>
- html>
druid.properties
- driverClassName=com.mysql.jdbc.Driver
- url=jdbc:mysql:///day17
- username=root
- password=root
- # 初始化连接数量
- initialSize=5
- # 最大连接数
- maxActive=10
- # 最大等待时间
- maxWait=3000
JDBCUtils.java
- package cn.itcast.util;
-
- import com.alibaba.druid.pool.DruidDataSourceFactory;
-
- import javax.sql.DataSource;
- import javax.xml.crypto.Data;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.Properties;
-
- /**
- * JDBC工具类 使用Durid连接池
- */
- public class JDBCUtils {
-
- private static DataSource ds ;
-
- static {
-
- try {
- //1.加载配置文件
- Properties pro = new Properties();
- //使用ClassLoader加载配置文件,获取字节输入流
- InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.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;
- }
-
-
- /**
- * 获取连接Connection对象
- */
- public static Connection getConnection() throws SQLException {
- return ds.getConnection();
- }
- }
当用户再index.jsp页面点击“查询所有用户信息”时,页面跳转到list.jsp页面,并且显示查询信息。
User.java
- package cn.itcast.domain;
-
- public class User {
- private int id;
- private String name;
- private String gender;
- private int age;
- private String address;
- private String qq;
- private String email;
-
- private String username;
- private String password;
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getGender() {
- return gender;
- }
-
- public void setGender(String gender) {
- this.gender = gender;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public String getQq() {
- return qq;
- }
-
- public void setQq(String qq) {
- this.qq = qq;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", gender='" + gender + '\'' +
- ", age=" + age +
- ", address='" + address + '\'' +
- ", qq='" + qq + '\'' +
- ", email='" + email + '\'' +
- ", username='" + username + '\'' +
- ", password='" + password + '\'' +
- '}';
- }
- }
index.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
- html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8"/>
- <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <title>首页title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- <script type="text/javascript">
- script>
- head>
- <body>
-
-
- <div >${user.name},欢迎您div>
- <div align="center">
- <a
- href="${pageContext.request.contextPath}/findUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
- a>
- div>
-
-
-
-
-
-
- body>
- html>
userListServlet.java
- package cn.itcast.web.servlet;
-
- import cn.itcast.domain.User;
- import cn.itcast.service.UserService;
- import cn.itcast.service.impl.UserServiceImpl;
-
- 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("/userListServlet")
- public class UserListServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.调用UserService完成查询
- UserService service = new UserServiceImpl();
- List
users = service.findAll(); - //2.将list存入request域
- request.setAttribute("users",users);
- //3.转发到list.jsp
- request.getRequestDispatcher("/list.jsp").forward(request,response);
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
- }
构建会话👉调用下层方法(servicefindAll())👉将返回值List
UserService.java
- package cn.itcast.service;
-
- import cn.itcast.domain.PageBean;
- import cn.itcast.domain.User;
-
- import java.util.List;
- import java.util.Map;
-
- /**
- * 用户管理的业务接口
- */
- public interface UserService {
-
- /**
- * 查询所有用户信息
- * @return
- */
- public List
findAll(); -
- /**
- * 登录方法
- * @param user
- * @return
- */
- User login(User user);
-
- /**
- * 保存User
- * @param user
- */
- void addUser(User user);
-
- /**
- * 根据id删除User
- * @param id
- */
- void deleteUser(String id);
-
- /**
- * 根据id查询
- * @param id
- * @return
- */
- User findUserById(String id);
-
- /**
- * 修改用户信息
- * @param user
- */
- void updateUser(User user);
-
- /**
- * 批量删除用户
- * @param ids
- */
- void delSelectedUser(String[] ids);
-
- /**
- * 分页条件查询
- * @param currentPage
- * @param rows
- * @param condition
- * @return
- */
- PageBean
findUserByPage(String currentPage, String rows, Map condition) ; - }
UserServicelmpl.java
- package cn.itcast.service.impl;
-
- import cn.itcast.dao.UserDao;
- import cn.itcast.dao.impl.UserDaoImpl;
- import cn.itcast.domain.PageBean;
- import cn.itcast.domain.User;
- import cn.itcast.service.UserService;
-
- import java.util.List;
- import java.util.Map;
-
- public class UserServiceImpl implements UserService {
- private UserDao dao = new UserDaoImpl();
-
- @Override
- public List
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.add(user);
- }
-
- @Override
- public void deleteUser(String id) {
- dao.delete(Integer.parseInt(id));
- }
-
- @Override
- public User findUserById(String id) {
- return dao.findById(Integer.parseInt(id));
- }
-
- @Override
- public void updateUser(User user) {
- dao.update(user);
- }
-
- @Override
- public void delSelectedUser(String[] ids) {
- if(ids != null && ids.length > 0){
- //1.遍历数组
- for (String id : ids) {
- //2.调用dao删除
- dao.delete(Integer.parseInt(id));
- }
- }
-
- }
-
- @Override
- public PageBean
findUserByPage(String _currentPage, String _rows, Map condition) { -
- int currentPage = Integer.parseInt(_currentPage);
- int rows = Integer.parseInt(_rows);
-
- if(currentPage <=0) {
- currentPage = 1;
- }
- //1.创建空的PageBean对象
- PageBean
pb = new PageBean(); - //2.设置参数
- pb.setCurrentPage(currentPage);
- pb.setRows(rows);
-
- //3.调用dao查询总记录数
- int totalCount = dao.findTotalCount(condition);
- pb.setTotalCount(totalCount);
- //4.调用dao查询List集合
- //计算开始的记录索引
- int start = (currentPage - 1) * rows;
- List
list = dao.findByPage(start,rows,condition); - pb.setList(list);
-
- //5.计算总页码
- int totalPage = (totalCount % rows) == 0 ? totalCount/rows : (totalCount/rows) + 1;
- pb.setTotalPage(totalPage);
-
-
- return pb;
- }
- }
UserDao.java
- package cn.itcast.dao;
-
- import cn.itcast.domain.User;
-
- import java.util.List;
- import java.util.Map;
-
- /**
- * 用户操作的DAO
- */
- public interface UserDao {
-
-
- public List
findAll(); -
- User findUserByUsernameAndPassword(String username, String password);
-
- void add(User user);
-
- void delete(int id);
-
- User findById(int i);
-
- void update(User user);
-
- /**
- * 查询总记录数
- * @return
- * @param condition
- */
- int findTotalCount(Map
condition) ; -
- /**
- * 分页查询每页记录
- * @param start
- * @param rows
- * @param condition
- * @return
- */
- List
findByPage(int start, int rows, Map condition) ; - }
UserDaoimpl.java
- package cn.itcast.dao.impl;
-
- import cn.itcast.dao.UserDao;
- import cn.itcast.domain.User;
- import cn.itcast.util.JDBCUtils;
- import org.springframework.jdbc.core.BeanPropertyRowMapper;
- import org.springframework.jdbc.core.JdbcTemplate;
-
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
-
- public class UserDaoImpl implements UserDao {
-
- private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
-
- @Override
- public List
findAll() { - //使用JDBC操作数据库...
- //1.定义sql
- String sql = "select * from user";
- List
users = template.query(sql, new BeanPropertyRowMapper(User.class)); -
- return users;
- }
-
- @Override
- public User findUserByUsernameAndPassword(String username, String password) {
- try {
- String sql = "select * from user where username = ? and password = ?";
- User user = template.queryForObject(sql, new BeanPropertyRowMapper
(User.class), username, password); - return user;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
-
- }
-
- @Override
- public void add(User user) {
- //1.定义sql
- String sql = "insert into user values(null,?,?,?,?,?,?,null,null)";
- //2.执行sql
- template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
- }
-
- @Override
- public void delete(int id) {
- //1.定义sql
- String sql = "delete from user where id = ?";
- //2.执行sql
- template.update(sql, id);
- }
-
- @Override
- public User findById(int id) {
- String sql = "select * from user where id = ?";
- return template.queryForObject(sql, new BeanPropertyRowMapper
(User.class), id); - }
-
- @Override
- public void update(User user) {
- String sql = "update user set name = ?,gender = ? ,age = ? , address = ? , qq = ?, email = ? where id = ?";
- template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());
- }
-
- @Override
- public int findTotalCount(Map
condition) { - //1.定义模板初始化sql
- String sql = "select count(*) from user where 1 = 1 ";
- StringBuilder sb = new StringBuilder(sql);
- //2.遍历map
- Set
keySet = condition.keySet(); - //定义参数的集合
- List
- 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 ? ");
- params.add("%"+value+"%");//?条件的值
- }
- }
- System.out.println(sb.toString());
- System.out.println(params);
-
- return template.queryForObject(sb.toString(),Integer.class,params.toArray());
- }
-
- @Override
- public List
findByPage(int start, int rows, Map condition) { - String sql = "select * from user where 1 = 1 ";
-
- StringBuilder sb = new StringBuilder(sql);
- //2.遍历map
- Set
keySet = condition.keySet(); - //定义参数的集合
- List
params = new ArrayList(); - 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 ? ");
- params.add("%"+value+"%");//?条件的值
- }
- }
-
- //添加分页查询
- sb.append(" limit ?,? ");
- //添加分页查询参数值
- params.add(start);
- params.add(rows);
- sql = sb.toString();
- System.out.println(sql);
- System.out.println(params);
-
- return template.query(sql,new BeanPropertyRowMapper
(User.class),params.toArray()); - }
- }
创建UserService接口,定义方法,创建UserServicelmpl类实现该接口,并且重写该方法👉告诉下层(dao)调用其findAll()方法👉dao层创建UserDao接口,定义该findAll()方法为pubilc List
当findAll()操作完数据库后,返回一个List
list.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
- <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
- html>
- <html lang="zh-CN">
- <head>
-
- <meta charset="utf-8">
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
-
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>用户信息管理系统title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- <style type="text/css">
- td, th {
- text-align: center;
- }
- style>
-
- <script>
- function deleteUser(id){
- //用户安全提示
- if(confirm("您确定要删除吗?")){
- //访问路径
- location.href="${pageContext.request.contextPath}/delUserServlet?id="+id;
- }
- }
-
- window.onload = function(){
- //给删除选中按钮添加单击事件
- document.getElementById("delSelected").onclick = function(){
- if(confirm("您确定要删除选中条目吗?")){
-
- var flag = false;
- //判断是否有选中条目
- var cbs = document.getElementsByName("uid");
- for (var i = 0; i < cbs.length; i++) {
- if(cbs[i].checked){
- //有一个条目选中了
- flag = true;
- break;
- }
- }
-
- if(flag){//有条目被选中
- //表单提交
- document.getElementById("form").submit();
- }
-
- }
-
- }
- //1.获取第一个cb
- document.getElementById("firstCb").onclick = function(){
- //2.获取下边列表中所有的cb
- var cbs = document.getElementsByName("uid");
- //3.遍历
- for (var i = 0; i < cbs.length; i++) {
- //4.设置这些cbs[i]的checked状态 = firstCb.checked
- cbs[i].checked = this.checked;
-
- }
-
- }
-
-
- }
-
-
- script>
- head>
- <body>
- <div class="container">
- <h3 style="text-align: center">用户信息列表h3>
-
- <div style="float: left;">
-
- <form class="form-inline" action="${pageContext.request.contextPath}/findUserByPageServlet" method="post">
- <div class="form-group">
- <label for="exampleInputName2">姓名label>
- <input type="text" name="name" value="${condition.name[0]}" class="form-control" id="exampleInputName2" >
- div>
- <div class="form-group">
- <label for="exampleInputName3">籍贯label>
- <input type="text" name="address" value="${condition.address[0]}" class="form-control" id="exampleInputName3" >
- div>
-
- <div class="form-group">
- <label for="exampleInputEmail2">邮箱label>
- <input type="text" name="email" value="${condition.email[0]}" class="form-control" id="exampleInputEmail2" >
- div>
- <button type="submit" class="btn btn-default">查询button>
- form>
-
- div>
-
- <div style="float: right;margin: 5px;">
-
- <a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人a>
- <a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中a>
-
- div>
- <form id="form" action="${pageContext.request.contextPath}/delSelectedServlet" method="post">
- <table border="1" class="table table-bordered table-hover">
- <tr class="success">
- <th><input type="checkbox" id="firstCb">th>
- <th>编号th>
- <th>姓名th>
- <th>性别th>
- <th>年龄th>
- <th>籍贯th>
- <th>QQth>
- <th>邮箱th>
- <th>操作th>
- tr>
-
- <c:forEach items="${pb.list}" var="user" varStatus="s">
- <tr>
- <td><input type="checkbox" name="uid" value="${user.id}">td>9
- <td>${s.count}td>
- <td>${user.name}td>
- <td>${user.gender}td>
- <td>${user.age}td>
- <td>${user.address}td>
- <td>${user.qq}td>
- <td>${user.email}td>
- <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改a>
- <a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id});">删除a>td>
- tr>
-
- c:forEach>
-
-
- table>
- form>
- <div>
- <nav aria-label="Page navigation">
- <ul class="pagination">
- <c:if test="${pb.currentPage == 1}">
- <li class="disabled">
- c:if>
-
- <c:if test="${pb.currentPage != 1}">
- <li>
- c:if>
-
-
- <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage - 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Previous">
- <span aria-hidden="true">«span>
- a>
- li>
-
-
- <c:forEach begin="1" end="${pb.totalPage}" var="i" >
-
-
- <c:if test="${pb.currentPage == i}">
- <li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}a>li>
- c:if>
- <c:if test="${pb.currentPage != i}">
- <li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}a>li>
- c:if>
-
- c:forEach>
-
-
- <li>
- <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage + 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Next">
- <span aria-hidden="true">»span>
- a>
- li>
- <span style="font-size: 25px;margin-left: 5px;">
- 共${pb.totalCount}条记录,共${pb.totalPage}页
- span>
-
- ul>
- nav>
-
-
- div>
-
-
- div>
-
-
- body>
- html>
首先在login.jsp中让用户输入数据,然后LoginServlet.java中使用session拿到服务端的验证码符号与request域中的验证码进行判断,判断该验证码是否输入正确,若正确则将用户输入的用户名和密码封装成user对象,然后调用Service中的login()方法,将用户输入的信息对象user进行传参,并且在service层创建接口和实现类,定义方法,接着到dao层创建接口和实现类,对方法进行重写,使用sql语句操作数据库,若用户名与密码正确则返回该用户的用户信息对象user,反之则为null,层层递进到servlet层,进行用户登录的判断(判断返回值为user还是null)。
login.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
- html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8"/>
- <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <title>管理员登录title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- <script type="text/javascript">
- //切换验证码
- function refreshCode(){
- //1.获取验证码图片对象
- var vcode = document.getElementById("vcode");
-
- //2.设置其src属性,加时间戳
- vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime();
- }
- script>
- head>
- <body>
- <div class="container" style="width: 400px;">
- <h3 style="text-align: center;">管理员登录h3>
- <form action="${pageContext.request.contextPath}/loginServlet" method="post">
- <div class="form-group">
- <label for="user">用户名:label>
- <input type="text" name="username" class="form-control" id="user" placeholder="请输入用户名"/>
- div>
-
- <div class="form-group">
- <label for="password">密码:label>
- <input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
- div>
-
- <div class="form-inline">
- <label for="vcode">验证码:label>
- <input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
- <a href="javascript:refreshCode();">
- <img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/>
- a>
- div>
- <hr/>
- <div class="form-group" style="text-align: center;">
- <input class="btn btn btn-primary" type="submit" value="登录">
- div>
- form>
-
-
- <div class="alert alert-warning alert-dismissible" role="alert">
- <button type="button" class="close" data-dismiss="alert" >
- <span>×span>
- button>
- <strong>${login_msg}strong>
- div>
- div>
- body>
- html>
CheckCodeServlet.java
验证码的生成
- package cn.itcast.web.servlet;
-
- 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;
- import java.awt.*;
- import java.awt.image.BufferedImage;
- import java.io.IOException;
- import java.util.Random;
-
- /**
- * 验证码
- */
- @WebServlet("/checkCodeServlet")
- public class CheckCodeServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
-
- //服务器通知浏览器不要缓存
- response.setHeader("pragma","no-cache");
- response.setHeader("cache-control","no-cache");
- response.setHeader("expires","0");
-
- //在内存中创建一个长80,宽30的图片,默认黑色背景
- //参数一:长
- //参数二:宽
- //参数三:颜色
- int width = 80;
- int height = 30;
- BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
-
- //获取画笔
- Graphics g = image.getGraphics();
- //设置画笔颜色为灰色
- g.setColor(Color.GRAY);
- //填充图片
- g.fillRect(0,0, width,height);
-
- //产生4个随机验证码,12Ey
- String checkCode = getCheckCode();
- //将验证码放入HttpSession中
- request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
-
- //设置画笔颜色为黄色
- g.setColor(Color.YELLOW);
- //设置字体的小大
- g.setFont(new Font("黑体",Font.BOLD,24));
- //向图片上写入验证码
- g.drawString(checkCode,15,25);
-
- //将内存中的图片输出到浏览器
- //参数一:图片对象
- //参数二:图片的格式,如PNG,JPG,GIF
- //参数三:图片输出到哪里去
- ImageIO.write(image,"PNG",response.getOutputStream());
- }
- /**
- * 产生4位随机字符串
- */
- private String getCheckCode() {
- String base = "0123456789ABCDEFGabcdefg";
- int size = base.length();
- Random r = new Random();
- StringBuffer sb = new StringBuffer();
- for(int i=1;i<=4;i++){
- //产生0到size-1的随机值
- int index = r.nextInt(size);
- //在base字符串中获取下标为index的字符
- char c = base.charAt(index);
- //将c放入到StringBuffer中去
- sb.append(c);
- }
- return sb.toString();
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request,response);
- }
- }
-
-
-
LoginServlet.java
- package cn.itcast.web.servlet;
-
- import cn.itcast.domain.User;
- import cn.itcast.service.UserService;
- import cn.itcast.service.impl.UserServiceImpl;
- import org.apache.commons.beanutils.BeanUtils;
-
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import java.io.IOException;
- import java.lang.reflect.InvocationTargetException;
- import java.util.Map;
-
- @WebServlet("/loginServlet")
- public class LoginServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.设置编码
- request.setCharacterEncoding("utf-8");
-
- //2.获取数据
- //2.1获取用户填写验证码
- String verifycode = request.getParameter("verifycode");
-
- //3.验证码校验
- HttpSession session = request.getSession();
- String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
- session.removeAttribute("CHECKCODE_SERVER");//确保验证码一次性
- if(!checkcode_server.equalsIgnoreCase(verifycode)){
- //验证码不正确
- //提示信息
- request.setAttribute("login_msg","验证码错误!");
- //跳转登录页面
- request.getRequestDispatcher("/login.jsp").forward(request,response);
-
- return;
- }
-
- Map
map = request.getParameterMap(); - //4.封装User对象
- User user = new User();
- try {
- BeanUtils.populate(user,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
-
-
- //5.调用Service查询
- UserService service = new UserServiceImpl();
- User loginUser = service.login(user);
- //6.判断是否登录成功
- if(loginUser != null){
- //登录成功
- //将用户存入session
- session.setAttribute("user",loginUser);
- //跳转页面
- response.sendRedirect(request.getContextPath()+"/index.jsp");
- }else{
- //登录失败
- //提示信息
- request.setAttribute("login_msg","用户名或密码错误!");
- //跳转登录页面
- request.getRequestDispatcher("/login.jsp").forward(request,response);
-
- }
-
-
-
-
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
- }
接下来的service层和dao层都在上面查询功能。
add.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
- html>
- <html lang="zh-CN">
- <head>
-
- <meta charset="utf-8">
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
-
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>添加用户title>
-
-
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <script src="js/jquery-2.1.0.min.js">script>
-
- <script src="js/bootstrap.min.js">script>
- head>
- <body>
- <div class="container">
- <center><h3>添加联系人页面h3>center>
- <form action="${pageContext.request.contextPath}/addUserServlet" method="post">
- <div class="form-group">
- <label for="name">姓名:label>
- <input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
- div>
-
- <div class="form-group">
- <label>性别:label>
- <input type="radio" name="gender" value="男" checked="checked"/>男
- <input type="radio" name="gender" value="女"/>女
- div>
-
- <div class="form-group">
- <label for="age">年龄:label>
- <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
- div>
-
- <div class="form-group">
- <label for="address">籍贯:label>
- <select name="address" class="form-control" id="address">
- <option value="陕西">陕西option>
- <option value="北京">北京option>
- <option value="上海">上海option>
- select>
- div>
-
- <div class="form-group">
- <label for="qq">QQ:label>
- <input type="text" class="form-control" id="qq" name="qq" placeholder="请输入QQ号码"/>
- div>
-
- <div class="form-group">
- <label for="email">Email:label>
- <input type="text" class="form-control" id="email" name="email" placeholder="请输入邮箱地址"/>
- div>
-
- <div class="form-group" style="text-align: center">
- <input class="btn btn-primary" type="submit" value="提交" />
- <input class="btn btn-default" type="reset" value="重置" />
- <input class="btn btn-default" type="button" value="返回" />
- div>
- form>
- div>
- body>
- html>
AddUserServlet.java
- package cn.itcast.web.servlet;
-
- import cn.itcast.domain.User;
- import cn.itcast.service.UserService;
- import cn.itcast.service.impl.UserServiceImpl;
- import org.apache.commons.beanutils.BeanUtils;
-
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.lang.reflect.InvocationTargetException;
- import java.util.Map;
-
- @WebServlet("/addUserServlet")
- public class AddUserServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.设置编码
- request.setCharacterEncoding("utf-8");
- //2.获取参数
- Map
map = request.getParameterMap(); - //3.封装对象
- 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.addUser(user);
-
- //5.跳转到userListServlet
- response.sendRedirect(request.getContextPath()+"/userListServlet");
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
- }