用户列表页面

1.pom.xml导入依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.7</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>

        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.1.1.RELEASE</version>
        </dependency>

        <!--bootstrap-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>5.2.3</version>
        </dependency>

        <!--jQuery-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.6.4</version>
        </dependency>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
<!--        日期格式化依赖-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>

2.pojo包下person类

package com.example.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable {
    private Integer id;
    private String username;
    private String password;
    private Integer sex;
    private Date birthday;
    private String mobile;
    private String address;
}

 3.util包下导入thutils

 4.dao包下dbutiles类

package com.example.dao;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.example.pojo.Person;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;

public class DBUtils {
    //创建logback日志管理对象Logger(1分)
    private static final Logger LOGGER= LoggerFactory.getLogger(DBUtils.class);
    //声明静态成员DataSource(1分)
    private static DataSource ds;
    //static代码块中读取资源文件并为DataSouce对象赋值(日志处理异常)(1分,日志处理1分)
    static {
        Properties pro=new Properties();
        try {
            pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
        } catch (IOException e) {
            LOGGER.debug("获取资源文件失败!");
        }
        try {
            //通过资源文件创建数据源
            ds= DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            LOGGER.debug("通过资源文件创建数据源失败!");
        }
    }

    /**
     * 创建通用的增删改方法(日志处理异常)(2分,日志1分)
     * @param sql
     * @param args
     * @return
     */
    public static int exectueCom(String sql,Object...args){
        QueryRunner runner=new QueryRunner(ds);
        int row=0;
        try {
            row = runner.update(sql, args);
        } catch (SQLException e) {
            LOGGER.debug("增,删,改执行失败,请检查sql语句和参数");
        }
        return row;
    }

    /**
     * ⑤创建通用的查询(日志处理异常)(2分,日志1分)
     * @param sql
     * @param clazz
     * @param args
     * @return
     * @param <T>
     */
    public static <T> List<T> findAll(String sql, Class<T> clazz, Object...args){
        QueryRunner runner=new QueryRunner(ds);
        List<T> list=null;
        try {
            list=runner.query(sql,new BeanListHandler<>(clazz),args);
        } catch (SQLException e) {
            LOGGER.debug("查询所有执行失败,请检查sal语句!");
        }
        return list;
    }

    /**
     * 查询单个数据
     * @param sql
     * @param clazz
     * @param args
     * @return
     * @param <T>
     */

    public static <T> T findOne(String sql,Class<T> clazz,Object...args){
        QueryRunner runner=new QueryRunner(ds);
        T t=null;
        try {
            t=runner.query(sql,new BeanHandler<>(clazz),args);
        } catch (SQLException e) {
            LOGGER.debug("查询所有执行失败,请检查sal语句!");
        }
        return t;
    }

}

5.dao包下的接口

package com.example.dao;

import com.example.pojo.Person;

import java.util.List;

public interface IPersonDao {
    String FIND_ALL="SELECT * FROM person";
    String FIND_ONE="SELECT * FROM person WHERE id=?";
    String DELETE="DELETE FROM person where id=?";
    String INS="INSERT INTO person(username,password,sex,birthday,mobile,address) VALUES(?,?,?,?,?,?)";
    //6)实现对某条数据的修改操作
    String UPD="UPDATE person SET username=?,password=?,sex=?,birthday=?,mobile=?,address=? WHERE id=?";
    String LOGIN="SELECT * FROM person WHERE username=? and password=?";
    List<Person> selectAll();
    Person selectONE(int id);
    int delete(int id);
    int add(Person person);
    int update(Person person);
    Person login(String username,String password);
    List<Person> like(String mohu);
}

6.dao包下的接口实现类

package com.example.dao;

import com.example.pojo.Person;

import java.util.List;

public class PersonDao implements IPersonDao{
    @Override
    public List<Person> selectAll() {
        return DBUtils.findAll(FIND_ALL,Person.class);
    }

    @Override
    public Person selectONE(int id) {
        return DBUtils.findOne(FIND_ONE, Person.class,id);
    }

    @Override
    public int delete(int id) {
        return DBUtils.exectueCom(DELETE,id);
    }

    @Override
    public int add(Person person) {
        return DBUtils.exectueCom(INS,person.getUsername(),
                person.getPassword(),
                person.getSex(),
                person.getBirthday(),
                person.getMobile(),
                person.getAddress());
    }

    @Override
    public int update(Person person) {
        return DBUtils.exectueCom(UPD,person.getUsername(),
                person.getPassword(),
                person.getSex(),
                person.getBirthday(),
                person.getMobile(),
                person.getAddress(),
                person.getId()
        );
    }

    @Override
    public Person login(String username, String password) {
        return DBUtils.findOne(LOGIN,Person.class,username,password);
    }

    @Override
    public List<Person> like(String mohu) {
        mohu=mohu==null ? "" :mohu;
        return DBUtils.findAll("select * from person where username like '%"+mohu+"%'",Person.class);
    }
}

7.导入

8.

 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body onload="location='/tologin'">

</body>
</html>

9.

 list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="webjars/bootstrap/5.2.3/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <form action="findAll" method="post">
            <input type="text" name="mohu">
            <button class="btn btn-success">搜索</button>
        </form>
        <table class="table table-bordered table-hover">
            <tr>
                <th>序号</th>
                <th>编号</th>
                <th>账号</th>
                <th>性别</th>
                <th>生日</th>
                <th>手机</th>
                <th>地址</th>
                <th>
                    <button class="btn btn-success" onclick="location='toadd'">新增</button>
                </th>
            </tr>
            <tr th:each="person:${ps}" th:object="${person}">
                <td th:text="${personStat.count}"></td>
                <td th:text="*{id}"></td>
                <td th:text="*{username}"></td>
                <td th:text="*{sex==0 ? '男':'女'}"></td>
                <td th:text="*{birthday}"></td>
                <td th:text="*{mobile}"></td>
                <td th:text="*{address}"></td>
                <td>
                    <a th:href="@{delete(pid=*{id})}">删除</a>
                    <a th:href="@{find(pid=*{id})}">修改</a>
                </td>
            </tr>
        </table>

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

add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="webjars/bootstrap/5.2.3/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <form action="/baocun" method="post">
            姓名:<input type="text" name="username"><br>
            密码:<input type="password" name="password"><br>
            性别:<input type="radio" name="sex" value="0">男
                <input type="radio" name="sex" value="1">女<br>
            手机:<input type="text" name="mobile"><br>
            生日:<input type="text" name="birthday"><br>
            地址:<input type="text" name="address"><br>

            <button class="btn btn-success">提交</button>
        </form>
    </div>

</body>
</html>

update.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="webjars/bootstrap/5.2.3/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <form action="/baocun" method="post" th:each="person:${person}" th:object="${person}">
            <input type="hidden" name="id" th:value="*{id}" readonly>
            姓名:<input type="text" name="username" th:value="*{username}"><br>
            密码:<input type="password" name="password" th:value="*{password}"><br>
            性别:<input type="radio" name="sex" value="0" th:checked="*{sex==0}">男
                <input type="radio" name="sex" value="1" th:checked="*{sex==1}">女<br>
            手机:<input type="text" name="mobile" th:value="*{mobile}"><br>
            生日:<input type="text" name="birthday" th:value="*{birthday}"><br>
            地址:<input type="text" name="address" th:value="*{address}"><br>

            <button class="btn btn-success">提交</button>
        </form>
    </div>

</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <link rel="stylesheet" href="webjars/bootstrap/5.2.3/css/bootstrap.min.css">
</head>

<form action="login" method="post">
    账号:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <button class="btn btn-success">登录</button>
    <span th:utext="${mess}"></span>
</form>
<body>

</body>
</html>

10.servlet包下的服务类

package com.example.servlet;

import com.example.dao.IPersonDao;
import com.example.dao.PersonDao;
import com.example.pojo.Person;
import com.example.util.ThUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.thymeleaf.context.Context;


import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Map;
@WebServlet(urlPatterns = {"/toadd","/tologin","/login","/baocun","/delete","/find","/findAll"})
public class HelloServlet extends HttpServlet {
    private static final Logger LOGGER= LoggerFactory.getLogger(HelloServlet.class);
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建一个实例化对象
        IPersonDao personDao=new PersonDao();
        //创建传值对象
        Context context=new Context();
        //读取执行路径
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
        switch (servletPath){
            case "/login"->{
                //接收账号和密码
                String username = req.getParameter("username");
                String password = req.getParameter("password");
                //调用DAO进行判断
                Person person=personDao.login(username,password);
                //判断是否成功
                if (person!=null){
                    resp.sendRedirect("findAll");
                }else{
                    context.setVariable("mess","<font color='red'>对不起,登录失败</font>");
                    ThUtils.print("/view/login.html",context,resp);
                }
            }
            case "/tologin"->{
                ThUtils.print("/view/login.html",context,resp);
            }
            case "/findAll"->{
                String mohu = req.getParameter("mohu");
                context.setVariable("ps",personDao.like(mohu));
                //传递到页面
                ThUtils.print("/view/list.html",context,resp);
            }
            case "/delete"->{
                //接收页面的id
                String pid = req.getParameter("pid");
                //转换数据类型
                Integer id=Integer.parseInt(pid);
                //接收返回行数
                int m=personDao.delete(id);
                //判断返回行数,执行是否成功
                if(m==1){
                    //执行成功重新查询所有
                    resp.sendRedirect("findAll");
                }
            }
            case "/toadd"->{
                ThUtils.print("view/add.html",context,resp);
            }
            case "/baocun"->{
                //创建一个日期转换器
                DateConverter dateConverter = new DateConverter();
                //设置格式
                dateConverter.setPatterns(new String[]{"yyyy-MM-dd"});
                //注册格式
                ConvertUtils.register(dateConverter, Date.class);
                Map map=req.getParameterMap();
                Person person=new Person();
                try {
                    BeanUtils.populate(person,map);
                } catch (IllegalAccessException e) {
                    LOGGER.debug("参数异常!");
                } catch (InvocationTargetException e) {
                    LOGGER.debug("运行时异常!");
                }
                int m=0;
                //判断用户ID是否为空或0,如果是即新增,否则修改
                if (person.getId()==null || person.getId()==0){
                    m=personDao.add(person);
                }else{
                    m=personDao.update(person);
                }
                //判断返回行数是否执行成功
                if(m==1){
                    //重新查询所有
                    resp.sendRedirect("findAll");
                }
            }
            case "/find"->{
                //接收页面的id
                String pid = req.getParameter("pid");
                //转换数据类型
                Integer id=Integer.parseInt(pid);
                Person person=personDao.selectONE(id);
                context.setVariable("person",person);
                ThUtils.print("/view/update.html",context,resp);
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值