学生管理系统(小试牛刀)

前后端结合实现一个简单的一个学生管理系统

配置文件pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>parkingManager</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <!--
        scope配置用于定义依赖的有效范围,重点是否被包含到项目的压缩包.如果不配置则默认compile,在测试和运行时都会使用,而且打包时会自动添加到目标压缩包。
        provided表示只在编译期内有效,不会被打包到压缩包中,由运行环境提供
         -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>com.meng</groupId>
            <artifactId>NeiMengRen</artifactId>
            <version>1.0.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jspsmart.jar</systemPath>
        </dependency>
    </dependencies>
    <build>
        <finalName>test</finalName>
        <plugins>
            <!--启动服务器的方法 -->
            <plugin>
                <!-- jetty是一个类似于tomcat的web服务器 -->
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.11.v20180605</version>
                <configuration>
                    <!-- 每隔10s自动扫描更新 -->
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                    <!--配置的连接端口号,也就是访问服务器的地址为 http://localhost:8080 -->
                    <httpConnector>
                        <port>8080</port>
                    </httpConnector>
                    <!--配置应用的上下文路径,访问当前应用的具体地址为http://localhost:8080/test -->
                    <webApp>
                        <contextPath>/</contextPath>
                    </webApp>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

网页配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>parkingManager</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <!--
        scope配置用于定义依赖的有效范围,重点是否被包含到项目的压缩包.如果不配置则默认compile,在测试和运行时都会使用,而且打包时会自动添加到目标压缩包。
        provided表示只在编译期内有效,不会被打包到压缩包中,由运行环境提供
         -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>com.meng</groupId>
            <artifactId>NeiMengRen</artifactId>
            <version>1.0.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jspsmart.jar</systemPath>
        </dependency>
    </dependencies>
    <build>
        <finalName>test</finalName>
        <plugins>
            <!--启动服务器的方法 -->
            <plugin>
                <!-- jetty是一个类似于tomcat的web服务器 -->
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.11.v20180605</version>
                <configuration>
                    <!-- 每隔10s自动扫描更新 -->
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                    <!--配置的连接端口号,也就是访问服务器的地址为 http://localhost:8080 -->
                    <httpConnector>
                        <port>8080</port>
                    </httpConnector>
                    <!--配置应用的上下文路径,访问当前应用的具体地址为http://localhost:8080/test -->
                    <webApp>
                        <contextPath>/</contextPath>
                    </webApp>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

持久层

show.jsp(显示页面)

<%@ page import="java.util.List" %>
<%@ page import="com.entity.Student" %>
<%@ page import="java.util.Objects" %>
<%@ page import="com.domain.PageBean" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <base href="<%=basePath%>">
    <title>学生管理系统</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>

</head>

<body>
<table border="1" width="800" align="center">
    <caption>学生管理页面</caption>
    <thead>
    <tr>
        <th>学号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>生日</th>
        <th>电话</th>
        <th>email</th>
        <th>地址</th>
        <th>图片</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <%
        Object obj = request.getAttribute("stuList");
        if (Objects.nonNull(obj) && obj instanceof List) {
            List<Student> stuList = (List<Student>) obj;
            for (int i = 0; i < stuList.size(); i++) {
    %>
    <tr>
        <th><%=stuList.get(i).getId()%>
        </th>
        <th><%=stuList.get(i).getName()%>
        </th>
        <th><%=stuList.get(i).getSex()%>
        </th>
        <th><%=stuList.get(i).getBirth()%>
        </th>
        <th><%=stuList.get(i).getTel()%>
        </th>
        <th><%=stuList.get(i).getEMail()%>
        </th>
        <th><%=stuList.get(i).getAddress()%>
        </th>
        <th><img src="images/<%=(i+1)%>.jpg" style="height:50px; weight:50px;">
        </th>
        <th>
            <input type="button" value="删除" onClick="location.href='./del.do?id=<%=stuList.get(i).getId()%>'"/>
            <input type="button" value="编辑" onClick="location.href='./modify.do?id=<%=stuList.get(i).getId()%>'"/>
        </th>
    </tr>
    <% }
    }%>
    <tr>
        <th colspan="9"><input type="button" value="添加学员" onClick="location.href='./add.do'"/></th>
    </tr>
    </tbody>
    <tfoot>
    <% obj = request.getAttribute("pages");
        if (obj != null && obj instanceof PageBean) {
            PageBean pb = (PageBean) obj;
    %>
    <tr>
        <td colspan="5">总共<%=pb.getRowsNum()%>条数据,当前是第<%=pb.getPageNum()%>/总共<%=pb.getMaxPage()%></td>
        <td colspan="4">
            <% for (int i = 0; i < pb.getMaxPage(); i++) {%>
            [<a href="show.do?page=<%=i+1%>"><%=i + 1%>
        </a>]&nbsp;
            <%}%>
        </td>
    </tr>
    <%}%>
    </tfoot>
</table>

</body>
</html>

stuadd.jsp(添加页面)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <base href="<%=basePath%>">
    <title>学生管理系统</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
</head>
<body>
<form action="./add.do" name="form1" method="post" onSubmit="return isSubmit();">
    <table width="400" align="center">
        <caption>学员添加页面</caption>
        <tr>
            <td>学号</td>
            <td><input type="text" name="sno" onBlur="checkSNO(this)" /></td>
            <td id="sno"></td>
        </tr>
        <tr>
            <td>姓名</td>
            <td><input type="text" name="sname" onBlur="checkSname(this)" /></td>
            <td id="sname"></td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="radio" name="ssex" value="男" /><input type="radio" name="ssex" value="女" checked="checked" /></td>
            <td></td>
        </tr>

        <tr>
            <td>生日</td>
            <td><input type="text" name="sbirthday" onBlur="checkSbirthday(this)" /></td>
            <td id="sbirthday"></td>
        </tr>
        <tr>
            <td>电话</td>
            <td><input type="text" name="sphone" /></td>
            <td></td>
        </tr>
        <tr>
            <td>邮箱</td>
            <td><input type="text" name="semail" /></td>
            <td></td>
        </tr>
        <tr>
            <td>地址</td>
            <td><input type="text" name="saddress" /></td>
            <td></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="确定" />
                <input type="reset" value="重置" />
            </td>
        </tr>
    </table>
</form>
</body>
</html>

stuedit.jsp(修改页面)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page import="com.entity.Student" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <base href="<%=basePath%>">
    <title>学生管理系统</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
</head>
<body>
<form action="./modify.do" method="post">
    <%
        Object obj = request.getAttribute("student");
        if (Objects.nonNull(obj) && obj instanceof Student) {
            Student stu = (Student) obj;
    %>
    <table width="400" align="center">
        <caption>学员编辑页面</caption>
        <tr>
            <td>学号</td>
            <td><input type="text" name="sno" value="<%=stu.getId()%>"/></td>
            <td></td>
        </tr>
        <tr>
            <td>姓名</td>
            <td><input type="text" name="sname" value="<%=stu.getName()%>"/></td>
            <td></td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="radio" name="ssex" value="<%=stu.getSex()%>" /><input type="radio" name="ssex" value="<%=stu.getSex()%>" checked="checked" /></td>
            <td></td>
        </tr>

        <tr>
            <td>生日</td>
            <td><input type="text" name="sbirthday" value="<%=stu.getBirth()%>"/></td>
            <td></td>
        </tr>
        <tr>
            <td>电话</td>
            <td><input type="text" name="sphone" value="<%=stu.getTel()%>"/></td>
            <td></td>
        </tr>
        <tr>
            <td>邮箱</td>
            <td><input type="text" name="semail" value="<%=stu.getEMail()%>"/></td>
            <td></td>
        </tr>
        <tr>
            <td>地址</td>
            <td><input type="text" name="saddress" value="<%=stu.getAddress()%>"/></td>
            <td></td>
        </tr>
        <%
            }
        %>
        <tr>
            <td>
                <input type="submit" value="确定" />
                <input type="reset" value="重置" />
            </td>
        </tr>
    </table>
</form>
</body>
</html>

业务层

实体

真实传递的数据

package com.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class Student implements Serializable {
    private Long id;
    private String name;
    private Boolean sex;
    private Date birth;
    private String tel;
    private String eMail;
    private String address;
    private String pic;
}

分页参数

package com.domain;

import lombok.Data;

import java.io.Serializable;
@Data
public class PageBean implements Serializable {
    private int rowsNum;
    private int pageNum;
    private int maxPage;
    private int rowsPerPage = 15;
}

接口

定义CRUD

package com.dao;

import com.domain.PageBean;
import com.entity.Student;

import java.util.List;

public interface IStuDao{
    List<Student> searchByExample(Student record, PageBean pages);
    boolean add(Student record);
    boolean delete(Long id);
    boolean update(Student record);
    Student selectById(Long id);
}

实现类

实现CRUD

package com.dao;

import com.domain.PageBean;
import com.entity.Student;
import com.util.ConnectionManager;
import com.util.Constants;
import com.util.DaoFactory;
import lombok.SneakyThrows;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class StuDaoImpl implements IStuDao {
    @Override
    @SneakyThrows
    public List<Student> searchByExample(Student record, PageBean pages) {
        StringBuilder sb = new StringBuilder("select * from tb_stu where 1 = 1 ");
        List<Student> res = new ArrayList<>();
        String sql = sb.toString();
        Connection con = ConnectionManager.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            if (Objects.nonNull(pages) && pages.getRowsPerPage() > 0) {
                if (pages.getPageNum() < 1)
                    pages.setPageNum(1);
                if (pages.getMaxPage() < 1) {
                    int rowsNum = 0;
                    String countSql = "select count(*) " + sb.substring(sb.indexOf(" from "));
                    ps = con.prepareStatement(countSql);
                    rs = ps.executeQuery();
                    if (rs.next()) {
                        rowsNum = rs.getInt(1);
                    } else return res;
                    int maxPage = rowsNum / pages.getRowsPerPage();
                    if (rowsNum % pages.getRowsPerPage() != 0)
                        maxPage++;
                    pages.setRowsNum(rowsNum);
                    pages.setMaxPage(maxPage);
                }
                if (pages.getPageNum() > pages.getMaxPage())
                    pages.setPageNum(pages.getMaxPage());
                int begin = (pages.getPageNum() - 1) * pages.getRowsPerPage();
                sql = sql + " limit " + begin + "," + pages.getRowsPerPage();
            }
            if (Constants.DEBUG) {
                System.out.println(sql);
            }
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                Student stu = getStudent(rs);
                res.add(stu);
            }
        } finally {
            ConnectionManager.close(rs, ps, con);
        }
        return res;
    }

    @Override
    @SneakyThrows
    public boolean add(Student record) {
        if (Objects.isNull(record) || Objects.isNull(record.getId()) || Objects.isNull(record.getName()))
            throw new RuntimeException("学生不能为空");
        int res = 0;
        List<Object> list = new ArrayList<>();
        StringBuilder sb1 = new StringBuilder("insert into tb_stu(id,name");
        StringBuilder sb2 = new StringBuilder(")values(?,?");
        list.add(record.getId());
        list.add(record.getName());
        if (Objects.nonNull(record.getSex())) {
            sb1.append(",sex");
            sb2.append(",?");
            list.add(record.getSex());
        }
        if (Objects.nonNull(record.getBirth())) {
            sb1.append(",birth");
            sb2.append(",?");
            list.add(record.getBirth());
        }
        if (Objects.nonNull(record.getTel())) {
            sb1.append(",tel");
            sb2.append(",?");
            list.add(record.getTel());
        }
        if (Objects.nonNull(record.getEMail())) {
            sb1.append(",email");
            sb2.append(",?");
            list.add(record.getEMail());
        }
        if (Objects.nonNull(record.getAddress())) {
            sb1.append(",address");
            sb2.append(",?");
            list.add(record.getAddress());
        }
        String sql = sb1.toString() + sb2.toString() + ")";
        if (!Constants.DEBUG)
            System.out.println(sql);
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = ConnectionManager.getConnection();
            if (Objects.nonNull(list) && list.size() > 0)
                ps = ConnectionManager.createPreparedStatement(con, sql, list.toArray());
            res = ps.executeUpdate();
        } finally {
            ConnectionManager.close(null, ps, con);
        }
        return res > 0;
    }

    @Override
    @SneakyThrows
    public boolean delete(Long id) {
        if (Objects.isNull(id))
            throw new RuntimeException("要删除的id不能为空");
        StringBuilder sb = new StringBuilder("delete from tb_stu where id = '").append(id).append("'");
        String sql = sb.toString();
        if (Constants.DEBUG)
            System.out.println(sql);
        int res = 0;
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = ConnectionManager.getConnection();
            ps = con.prepareStatement(sql);
            res = ps.executeUpdate();
        } finally {
            ConnectionManager.close(null, ps, con);
        }
        return res > 0;
    }

    @Override
    @SneakyThrows
    //根据id修改
    public boolean update(Student record) {
        if (selectById(record.getId()) == null)
            throw new RuntimeException("用户不存在");
        else {
            Student stu = selectById(record.getId());
        }
        int res = 0;
        List<Object> list = new ArrayList<>();
        StringBuilder sb = new StringBuilder("update tb_stu set id = ?");
        list.add(record.getId());
        if (Objects.nonNull(record.getName())) {
            sb.append(",name=?");
            list.add(record.getName());
        }
        if (Objects.nonNull(record.getSex())) {
            sb.append(",sex=?");
            list.add(record.getSex());
        }
        if (Objects.nonNull(record.getBirth())) {
            sb.append(",birth=?");
            list.add(record.getBirth());
        }
        if (Objects.nonNull(record.getTel())) {
            sb.append(",tel=?");
            list.add(record.getTel());
        }
        if (Objects.nonNull(record.getEMail())) {
            sb.append(",email=?");
            list.add(record.getEMail());
        }
        if (Objects.nonNull(record.getAddress())) {
            sb.append(",address=?");
            list.add(record.getAddress());
        }
        String sql = sb.append(" where id = ").append(record.getId()).toString();
        if (!Constants.DEBUG)
            System.out.println(sql);
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = ConnectionManager.getConnection();
            if (Objects.nonNull(list) && list.size() > 0)
                ps = ConnectionManager.createPreparedStatement(con, sql, list.toArray());
            res = ps.executeUpdate();
        } finally {
            ConnectionManager.close(null, ps, con);
        }
        return res > 0;
    }

    @SneakyThrows
    public Student selectById(Long id) {
        if (Objects.isNull(id))
            throw new RuntimeException("id不能为空");
        Student stu = null;
        StringBuilder sb = new StringBuilder("select * from tb_stu where id = ").append(id);
        String sql = sb.toString();
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            con = ConnectionManager.getConnection();
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            if (rs.next()) {
                stu = getStudent(rs);
            }
        } finally {
            ConnectionManager.close(rs, ps, con);
        }
        return stu;
    }

    @SneakyThrows
    private Student getStudent(ResultSet rs) {
        Student stu = new Student();
        stu.setId(rs.getLong("id"));
        stu.setName(rs.getString("name"));
        stu.setSex(rs.getBoolean("sex"));
        stu.setBirth(rs.getDate("birth"));
        stu.setTel(rs.getString("tel"));
        stu.setEMail(rs.getString("email"));
        stu.setAddress(rs.getString("address"));
        return stu;
    }

    public static void main(String[] args) {
        IStuDao stuDao = DaoFactory.getStuDao();

//        PageBean pb = new PageBean();
//        pb.setRowsPerPage(2);
//        pb.setPageNum(2);
//        System.out.println(stuDao.searchByExample(null, null));

        System.out.println(stuDao.delete(88888L));

//        Student stu = new Student();
//        stu.setId(88888L);
//        stu.setName("加油");
//        stu.setSex(false);
//        System.out.println(stuDao.add(stu));

        // System.out.println(stuDao.update(stu));

//        System.out.println(stuDao.selectById(4444L));
    }
}

工具类
数据库连接池管理

package com.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import lombok.SneakyThrows;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Objects;
import java.util.Properties;

public final class ConnectionManager {
    private ConnectionManager() {
    }

    public static DataSource dataSource;

    static {
        Properties ps = new Properties();
        try {
            InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
            ps.load(is);
            dataSource = DruidDataSourceFactory.createDataSource(ps);
        } catch (Exception e) {
            if (Constants.DEBUG)
                e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    @SneakyThrows
    public static Connection getConnection() {
        return dataSource.getConnection();
    }
    @SneakyThrows
    public static PreparedStatement createPreparedStatement(Connection con,String sql,Object...params){
        PreparedStatement ps = null;
        if(Objects.nonNull(con)&&StringUtils.isNOtBlank(sql)){
            ps = con.prepareStatement(sql);
        if(Objects.nonNull(params)&&params.length>0)
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i+1,params[i]);
            }
        }
        return ps;
    }
    @SneakyThrows
    public static void close(ResultSet rs, PreparedStatement ps, Connection con) {
        try {
            if (Objects.nonNull(rs))
                rs.close();
        } finally {
            try {
                if (Objects.nonNull(ps))
                    ps.close();
            } finally {
                if (Objects.nonNull(con))
                    con.close();
            }
        }
    }
}

测试工具

package com.util;

public final class Constants {
    private Constants(){}
    public final static boolean DEBUG = false;
}

工厂

package com.util;

import com.dao.IStuDao;
import com.dao.StuDaoImpl;

public final class DaoFactory {
    private DaoFactory(){}
    public static IStuDao getStuDao(){
        return new StuDaoImpl();
    }
}

字符串判空串工具

package com.util;

import java.util.Objects;

public final class StringUtils {
    private StringUtils() {
    }

    public static boolean isBlank(String str) {
        return Objects.isNull(str) || str.trim().length() < 1;
    }

    public static boolean isNOtBlank(String str) {
        return !isBlank(str);
    }
}

页面动作
显示页面的servlet

package com.action;

import com.dao.IStuDao;
import com.domain.PageBean;
import com.entity.Student;
import com.util.DaoFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

public class ShowServlet extends HttpServlet {
    private IStuDao stuDao = DaoFactory.getStuDao();

    private int rows = 15;
    @Override
    public void init() throws ServletException {
        String sRows = this.getServletConfig().getInitParameter("rows");
        try {
            rows = Integer.parseInt(sRows);
        } catch (NumberFormatException e) {
            rows = 5;
        }
    }
//    @Override
//    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        List<Student> studentList = stuDao.searchByExample(null, null);
//        System.out.println(studentList);
//        resp.setContentType("text/html");
//        PrintWriter out = resp.getWriter();
//        out.println("<!DOCTYPE html>\n" +
//                "<html>\n" +
//                "<head>\n" +
//                "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />\n" +
//                "<title>学生管理系统</title>\n" +
//                "<script type=\"text/javascript\">\n" +
//                "  function delStu(){\n" +
//                "\t\twindow.confirm(\"是否要删除该学员?\");\n" +
//                "  }\n" +
//                "</script>\n" +
//                "</head>\n" +
//                "\n" +
//                "<body>");
//        out.println("<table border=\"1\" width=\"800\" align=\"center\">\n" +
//                "\t<caption>学生管理页面</caption>\n" +
//                "\t<thead>\n" +
//                "\t\t<tr>\n" +
//                "\t\t\t<th>学号</th>\n" +
//                "\t\t\t<th>姓名</th>\n" +
//                "\t\t\t<th>性别</th>\n" +
//                "\t\t\t<th>生日</th>\n" +
//                "\t\t\t<th>电话</th>\n" +
//                "\t\t\t<th>email</th>\n" +
//                "\t\t\t<th>地址</th>\n" +
//                "\t\t\t<th>操作</th>\n" +
//                "\t\t</tr>\n" +
//                "\t</thead>");
//        out.println("<tbody>");
//        for (Student tmp:studentList) {
//            out.println("<tr>" +
//                    "<th>" +tmp.getId()+ "</th>" +"<th>" +tmp.getName()+ "</th>" + "<th>" +(tmp.getSex()?"男":"女")+ "</th>"
//                            + "<th>" +tmp.getBirth()+ "</th>" + "<th>" +tmp.getTel()+ "</th>" + "<th>" +tmp.getEMail()+ "</th>"
//                            + "<th>" +tmp.getAddress()+ "</th>"
//                    + "<th>" +"\t\t\t\t<input type=\"button\" value=\"删除\" onClick=\"delStu()\" />\n"+ "\t\t\t\t<input type=\"button\" value=\"编辑\" onClick=\"location.href='./stuedit.html'\" />\n"+"</th>"
//                     +
//                    "</tr>");
//        }
//
//        out.println(
//                "\t\t\t</th>\n" +
//                "\t\t</tr>\n" +
//                "\t\t<tr>\n" +
//                "\t\t\t<th colspan=\"8\"><input type=\"button\" value=\"添加学员\" onClick=\"location.href='./stuadd.html'\" /></th>\n" +
//                "\t\t</tr>\n" +
//                "\t</tbody>\n" +
//                "</table>\n" +
//                "\n" +
//                "</body>\n" +
//                "</html>");
//    }

    @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 {
        PageBean pages = null;
        String sPage = req.getParameter("page");
        if(sPage!=null && sPage.trim().length()>0){
            pages = new PageBean();
            int page = 0;
            try{
                page = Integer.parseInt(sPage);
            }catch (Exception e){
                page = 1;
            }
            pages.setRowsPerPage(rows);
            pages.setPageNum(page);
        }
        if(pages!=null){
            //System.out.println(pages);
            req.setAttribute("pages",pages);
        }
        List<Student> stuList = stuDao.searchByExample(null,pages);
        System.out.println(stuList);
        req.setAttribute("stuList",stuList);
        req.getRequestDispatcher("show.jsp").forward(req,resp);
    }
}

修改页面的sevlet

package com.action;

import com.dao.IStuDao;
import com.entity.Student;
import com.util.DaoFactory;
import com.util.StringUtils;
import lombok.SneakyThrows;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

public class ModifyServlet extends HttpServlet {
    private IStuDao stuDao = DaoFactory.getStuDao();

    @Override
    @SneakyThrows
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String sid = req.getParameter("sno");
        Long id = Long.parseLong(sid.trim());
        String name = req.getParameter("sname");
        String ssex = req.getParameter("ssex");
        boolean sex = Boolean.parseBoolean(ssex.trim());
        String sbirth = req.getParameter("sbirthday");
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = null;
        if (StringUtils.isNOtBlank(sbirth)) {
            birth = df.parse(sbirth.trim());
        }
        String tel = req.getParameter("sphone");
        String email = req.getParameter("semail");
        String address = req.getParameter("saddress");
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setSex(sex);
        if (Objects.nonNull(birth)) {
            stu.setBirth(birth);
        }
        stu.setTel(tel);
        stu.setEMail(email);
        stu.setAddress(address);
        System.out.println(stuDao.update(stu));
        req.getRequestDispatcher("show.do?page=1").forward(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String sid = req.getParameter("id");
        Long id = Long.parseLong(sid.trim());
        Student student = stuDao.selectById(id);
        if(student!=null){
            req.setAttribute("student",student);
            req.getRequestDispatcher("stuedit.jsp").forward(req,resp);
        }else {
            resp.sendRedirect("show.do");
        }
        //req.getRequestDispatcher("stuedit.jsp").forward(req, resp);
    }
}

删除页面的servlet

package com.action;

import com.dao.IStuDao;
import com.util.DaoFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class DelServlet extends HttpServlet {
    private IStuDao stuDao = DaoFactory.getStuDao();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String sid = req.getParameter("id");
        Long id = Long.parseLong(sid.trim());
        stuDao.delete(id);
        req.getRequestDispatcher("show.do?page=1").forward(req,resp);
    }
}

添加页面的servlet

package com.action;

import com.dao.IStuDao;
import com.entity.Student;
import com.util.DaoFactory;
import com.util.StringUtils;
import lombok.SneakyThrows;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

public class AddServlet extends HttpServlet {
    private IStuDao stuDao = DaoFactory.getStuDao();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("stuadd.jsp").forward(req, resp);
    }

    @Override
    @SneakyThrows
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String sid = req.getParameter("sno");
        Long id = Long.parseLong(sid.trim());
        String name = req.getParameter("sname");
        String ssex = req.getParameter("ssex");
        boolean sex = Boolean.parseBoolean(ssex.trim());
        String sbirth = req.getParameter("sbirthday");
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = null;
        if (StringUtils.isNOtBlank(sbirth)) {
            birth = df.parse(sbirth.trim());
        }
        String tel = req.getParameter("sphone");
        String email = req.getParameter("semail");
        String address = req.getParameter("saddress");
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setSex(sex);
        if (Objects.nonNull(birth)) {
            stu.setBirth(birth);
        }
        stu.setTel(tel);
        stu.setEMail(email);
        stu.setAddress(address);
        System.out.println(stuDao.add(stu));
        req.getRequestDispatcher("show.do?page=1").forward(req, resp);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值