• 使用Servlet+Tomcat+MySQL开发-简易版部门信息管理系统(单表CRUD)


    为了检验JavaWeb、Servlet、MySQL、JDBC的学习效果,实现了简易版的部门信息管理系统。没有使用任何框架,这样便于深入理解原理。

    目录

    一、开发思路

    1. 设计系统功能

    2. 设计前端页面(5个,简单,文本编辑器即可,后期替换成java代码)

    3. IDEA中搭建开发环境

    4. 进行功能实现

    5. 实现JDBC工具类

    二、开发步骤

    步骤一:准备数据库表

    步骤二: 设计HTML页面(项目原型)

     步骤三:实现查看部门列表功能

    步骤四:类推,实现全部功能

    三、项目演示

    四、完整代码

    1. 完整目录结构

    2. 代码 

    web.xml

     前端页面2个:index.html 

    add.html

    后端功能实现类6个:DeptDeleteServlet.java 

    DeptDetialServlet.java 

    DeptEditServlet.java 

     DeptListServlet.java

    DeptSaveServlet.java 

    DeptUpdateServlet.java 


    一、开发思路

    前端->后端。即先设计前端页面及功能,然后后端连接MySQL实现功能。凡是与数据库产生交互的,成为功能。

    1. 设计系统功能

    • 查看部门列表

    • 新增部门

    • 删除部门

    • 查看部门详细信息

    • 跳转到修改页面

    • 修改部门

    2. 设计前端页面(5个,简单,文本编辑器即可,后期替换成java代码)

    • 欢迎页面index.html
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>欢迎使用OA系统title>
    6. head>
    7. <body>
    8. <a href="list.html">查看部门列表a>
    9. body>
    10. html>
    • 部门列表页面
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>部门列表页面title>
    6. head>
    7. <body>
    8. <script type="text/javascript">
    9. function del(dno){
    10. // 弹出确认框,用户点击确定,返回true,点击取消返回false
    11. var ok = window.confirm("亲,删了不可恢复哦!");
    12. if(ok){
    13. // 发送请求进行删除数据的操作。
    14. // 在JS代码当中如何发送请求给服务器?
    15. //alert("正在删除数据,请稍后...")
    16. //document.location.href = "请求路径"
    17. //document.location = "请求路径"
    18. //window.location.href = "请求路径"
    19. //window.location = "请求路径"
    20. document.location.href = "/oa/dept/delete?deptno=" + dno;
    21. }
    22. }
    23. script>
    24. <h1 align="center">部门列表h1>
    25. <hr >
    26. <table border="1px" align="center" width="50%">
    27. <tr>
    28. <th>序号th>
    29. <th>部门编号th>
    30. <th>部门名称th>
    31. <th>操作th>
    32. tr>
    33. <tr>
    34. <td>1td>
    35. <td>10td>
    36. <td>销售部td>
    37. <td>
    38. <a href="javascript:void(0)" onclick="del(10)">删除a>
    39. <a href="edit.html">修改a>
    40. <a href="detail.html">详情a>
    41. td>
    42. tr>
    43. <tr>
    44. <td>2td>
    45. <td>20td>
    46. <td>研发部td>
    47. <td>
    48. <a href="javascript:void(0)" onclick="del(20)" >删除a>
    49. <a href="edit.html">修改a>
    50. <a href="detail.html">详情a>
    51. td>
    52. tr>
    53. <tr>
    54. <td>3td>
    55. <td>30td>
    56. <td>运营部td>
    57. <td>
    58. <a href="javascript:void(0)" onclick="del(30)" >删除a>
    59. <a href="edit.html">修改a>
    60. <a href="detail.html">详情a>
    61. td>
    62. tr>
    63. table>
    64. <hr >
    65. <a href="add.html">新增部门a>
    66. body>
    67. html>
    • 部门信息详情页面detail.html
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>部门详情title>
    6. head>
    7. <body>
    8. <h1>部门详情h1>
    9. <hr >
    10. 部门编号:20 <br>
    11. 部门名称:销售部<br>
    12. 部门位置:北京<br>
    13. <input type="button" value="后退" onclick="window.history.back()"/>
    14. body>
    15. html>
    • 修改部门信息页面edit.html
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>修改部门title>
    6. head>
    7. <body>
    8. <h1>修改部门h1>
    9. <hr >
    10. <form action="list.html" method="get">
    11. 部门编号<input type="text" name="deptno" value="20" readonly /><br>
    12. 部门名称<input type="text" name="dname" value="销售部"/><br>
    13. 部门位置<input type="text" name="loc" value="北京"/><br>
    14. <input type="submit" value="修改"/><br>
    15. form>
    16. body>
    17. html>
    • 新增部门信息页面add.html
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>新增部门title>
    6. head>
    7. <body>
    8. <h1>新增部门h1>
    9. <hr >
    10. <form action="list.html" method="get">
    11. 部门编号<input type="text" name="deptno"/><br>
    12. 部门名称<input type="text" name="dname"/><br>
    13. 部门位置<input type="text" name="loc"/><br>
    14. <input type="submit" value="保存"/><br>
    15. form>
    16. body>
    17. html>

    3. IDEA中搭建开发环境

    见这篇文章

    (437条消息) 基于IDEA的JAVAWeb-Servlet开发,实现网页对MySQL进行简单的CRUD_天亮有惊喜的博客-CSDN博客

    开发环境搭建完成后,需要把刚刚写的5个html文件复制在web文件夹内(与WEB-INF文件夹平级) ,并且另外开发DBUtil工具类(减少JDBC代码,每次使用同一个连接)

    开发环境的目录结构

     最终的目录结构如上图所示。

    4. 进行功能实现

    见下文《二、开发步骤》

    5. 实现JDBC工具类

    在src包中新建文件夹resources,其中新增配置文件jdbc.properties(遵守java的开闭原则)

    1. driver=com.mysql.cj.jdbc.Driver
    2. url=jdbc:mysql://localhost:3306/bjpowernode
    3. user=root
    4. password=123456

    新建包com.bjpowernode.oa->utils.DBUtil.java,系统的CRUD仅使用一次jdbc连接,减少系统资源浪费。同时抽象方法(如JDBC资源关闭方法),提高代码复用性。 

    1. package com.bjpowernode.oa.utils;
    2. import java.sql.*;
    3. import java.util.ResourceBundle;
    4. /**
    5. * JDBC工具类
    6. */
    7. public class DBUtil {
    8. //静态变量:在类加载时执行,并且是有顺序的,自上而下
    9. private static ResourceBundle bundle = ResourceBundle.getBundle("resources.jdbc");
    10. private static String driver = bundle.getString("driver");
    11. private static String url = bundle.getString("url");
    12. private static String user = bundle.getString("user");
    13. private static String password = bundle.getString("password");
    14. static {
    15. //注册驱动(驱动只需要注册一次,放在静态代码块中。DBUtil类加载的时候执行)
    16. try {
    17. //com.mysql.cj.jdbc.Driver是连接数据库的驱动,不能写死,因为以后可能还要连接Oracle数据库
    18. //如果连接Oracle数据库,还需要修改java代码,显然违背了OCP开闭原则
    19. //OCP开闭原则:对拓展开放,对修改关闭(功能拓展,不修改java源代码)
    20. //Class.forName("com.mysql.cj.jdbc.Driver");
    21. Class.forName(driver);
    22. } catch (ClassNotFoundException e) {
    23. throw new RuntimeException(e);
    24. }
    25. }
    26. /**
    27. * 获取数据库连接对象
    28. * @return conn 连接对象
    29. * @throws SQLException
    30. */
    31. public static Connection getConnection() throws SQLException {
    32. //获取连接
    33. Connection conn = DriverManager.getConnection(url, user, password);
    34. return conn;
    35. }
    36. //注册驱动
    37. //获取连接
    38. //获取数据库操作对象
    39. //执行SQL语句
    40. //处理查询结果集
    41. /**
    42. *释放资源
    43. * @param conn 连接对象
    44. * @param ps 数据库操作对象
    45. * @param rs 结果集对象
    46. */
    47. public static void close(Connection conn, Statement ps, ResultSet rs){
    48. if (rs != null){
    49. try {
    50. rs.close();
    51. } catch (SQLException e) {
    52. e.printStackTrace();
    53. }
    54. }
    55. if (ps != null){
    56. try {
    57. ps.close();
    58. } catch (SQLException e) {
    59. e.printStackTrace();
    60. }
    61. }
    62. if (conn != null){
    63. try {
    64. conn.close();
    65. } catch (SQLException e) {
    66. e.printStackTrace();
    67. }
    68. }
    69. }
    70. }

    二、开发步骤

    步骤一:准备数据库表

    保存以下代码脚本 depttest.sql,运行即生成数据库表bjpowernode.depttest

    1. # 部门表
    2. drop table if exists depttest;
    3. create table depttest(
    4. deptno int primary key,
    5. dname varchar(255),
    6. loc varchar(255)
    7. );
    8. insert into depttest(deptno, dname, loc) values(10, 'XiaoShouBu', 'BEIJING');
    9. insert into depttest(deptno, dname, loc) values(20, 'YanFaBu', 'SHANGHAI');
    10. insert into depttest(deptno, dname, loc) values(30, 'JiShuBu', 'GUANGZHOU');
    11. insert into depttest(deptno, dname, loc) values(40, 'MeiTiBu', 'SHENZHEN');
    12. commit;
    13. select * from depttest;
    库表bjpowernode.depttest

    步骤二: 设计HTML页面(项目原型)

    测试该5个页面,连接正常,整体符合预期(写好跳转即可)

     

     

     

     

     步骤三:实现查看部门列表功能

    web.xml配置修改如下

    1. <servlet>
    2. <servlet-name>listservlet-name>
    3. <servlet-class>com.bjpowernode.oa.web.action.DeptListServletservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>listservlet-name>
    7. <url-pattern>/dept/listurl-pattern>
    8. servlet-mapping>

     查看部门列表功能实现类com.bjpowernode.oa.web.action.DeptListServlet.java如下:

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.ResultSet;
    12. import java.sql.SQLException;
    13. public class DeptListServlet extends HttpServlet {
    14. @Override
    15. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    16. doGet(request, response);
    17. }
    18. @Override
    19. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    20. //获取应用根路径
    21. String contextPath = request.getContextPath();
    22. //tomcat10不用写,设置响应的内容类型以及字符集,防止中文乱码
    23. response.setContentType("text/html;charset=UTF-8");
    24. PrintWriter out = response.getWriter();
    25. //这部分是静态不变的
    26. out.print(" ");
    27. out.print("");
    28. out.print(" ");
    29. out.print(" ");
    30. out.print(" 部门列表页面");
    31. out.print(" ");
    32. out.print(" ");
    33. out.print("

      部门列表

      "
      );
    34. out.print("
      "
      );
    35. out.print(" ");
    36. out.print("
    37. ");
    38. out.print("
    39. ");
    40. out.print("
    41. ");
    42. out.print("
    43. ");
    44. out.print("
    45. ");
    46. out.print("
    47. ");
    48. out.print("
    49. ");
    50. //连接数据库,查询所有部门
    51. Connection conn = null;
    52. PreparedStatement ps = null;
    53. ResultSet rs = null;
    54. try {
    55. //获取连接
    56. conn = DBUtil.getConnection();
    57. //获取预编译的数据库操作对象
    58. String sql = "select deptno, dname, loc from depttest";
    59. ps = conn.prepareStatement(sql);
    60. //执行sql语句
    61. rs = ps.executeQuery();
    62. //处理结果集
    63. int i = 0;
    64. String deptno = null;
    65. String dname = null;
    66. String loc = null;
    67. while (rs.next()) {
    68. deptno = rs.getString("deptno");
    69. dname = rs.getString("dname");
    70. loc = rs.getString("loc");
    71. //这部分是动态的
    72. out.print("
    73. ");
    74. out.print("
    75. ");
    76. out.print("
    77. ");
    78. out.print("
    79. ");
    80. out.print("
    81. ");
    82. out.print("
    83. ");
    84. out.print("
    85. ");
    86. }
    87. //这部分是静态不变的
    88. out.print("
    89. 序号部门编号部门名称部门位置操作
      " + (++i) + "" + deptno + "" + dname + "" + loc + "");
    90. out.print(" 删除");
    91. out.print(" 修改");
    92. // out.print(" 详情");
    93. out.print(" 详情");
    94. out.print("
    95. "
      );
    96. out.print("
      "
      );
    97. out.print(" 新增部门");
    98. out.print(" ");
    99. out.print("");
    100. } catch (SQLException e) {
    101. e.printStackTrace();
    102. } finally {
    103. //释放资源
    104. DBUtil.close(conn, ps, rs);
    105. }
    106. }
    107. }

    步骤四:类推,实现全部功能

    以此类推,实现全部功能:展示部门列表、查看部门详细信息、删除部门、新增部门信息、新增部门。完整目录结构如下所示:

    完整目录结构
    完整目录结构

     完整代码在下文《四、完整代码》给出

    三、项目演示

     

     

    四、完整代码

    1. 完整目录结构

    完整目录结构
    完整目录结构

    项目文件夹存放路径:.
    ├─.idea
    │  └─artifacts
    ├─oa
    │  ├─src
    │  │  ├─com.bjpowernode.oa
    │  │  │  └─utils
    │  │  │      └─DUBtil.java
    │  │  │  └─web.action
    │  │  │      └─DeptDeleteServlet.java
    │  │  │      └─DeptDetailServlet.java
    │  │  │      └─DeptEditServlet.java
    │  │  │      └─DeptListServlet.java
    │  │  │      └─DeptSavaServlet.java
    │  │  │      └─DeptUpdateServlet.java
    │  │  └─resources
    │  │  │  └─jdbc.properties
    │  └─web
    │  │  └─WEB-INF
    │  │  │  └─lib
    │  │  │      └─mysql-connector-java-8.0.28.jar
    │  │  │  └─web.xml
    │  │  └─index.html
    │  │  └─add.html
    │  └─oa.iml

    External Libraries

    │─jsp.api.jar
    │─servlet-api.kar
    │─jdk1.8.0_111

    2. 代码 

    web.xml

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    5. version="5.0">
    6. <servlet>
    7. <servlet-name>listservlet-name>
    8. <servlet-class>com.bjpowernode.oa.web.action.DeptListServletservlet-class>
    9. servlet>
    10. <servlet-mapping>
    11. <servlet-name>listservlet-name>
    12. <url-pattern>/dept/listurl-pattern>
    13. servlet-mapping>
    14. <servlet>
    15. <servlet-name>detailservlet-name>
    16. <servlet-class>com.bjpowernode.oa.web.action.DeptDetailServletservlet-class>
    17. servlet>
    18. <servlet-mapping>
    19. <servlet-name>detailservlet-name>
    20. <url-pattern>/dept/detailurl-pattern>
    21. servlet-mapping>
    22. <servlet>
    23. <servlet-name>deleteservlet-name>
    24. <servlet-class>com.bjpowernode.oa.web.action.DeptDeleteServletservlet-class>
    25. servlet>
    26. <servlet-mapping>
    27. <servlet-name>deleteservlet-name>
    28. <url-pattern>/dept/deleteurl-pattern>
    29. servlet-mapping>
    30. <servlet>
    31. <servlet-name>saveservlet-name>
    32. <servlet-class>com.bjpowernode.oa.web.action.DeptSaveServletservlet-class>
    33. servlet>
    34. <servlet-mapping>
    35. <servlet-name>saveservlet-name>
    36. <url-pattern>/dept/saveurl-pattern>
    37. servlet-mapping>
    38. <servlet>
    39. <servlet-name>editservlet-name>
    40. <servlet-class>com.bjpowernode.oa.web.action.DeptEditServletservlet-class>
    41. servlet>
    42. <servlet-mapping>
    43. <servlet-name>editservlet-name>
    44. <url-pattern>/dept/editurl-pattern>
    45. servlet-mapping>
    46. <servlet>
    47. <servlet-name>updateservlet-name>
    48. <servlet-class>com.bjpowernode.oa.web.action.DeptUpdateServletservlet-class>
    49. servlet>
    50. <servlet-mapping>
    51. <servlet-name>updateservlet-name>
    52. <url-pattern>/dept/updateurl-pattern>
    53. servlet-mapping>
    54. web-app>

     前端页面2个:index.html 

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>欢迎使用OA系统title>
    6. head>
    7. <body>
    8. <a href="/oa/dept/list">查看部门列表a>
    9. body>
    10. html>

    add.html

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>新增部门title>
    6. head>
    7. <body>
    8. <h1>新增部门h1>
    9. <hr >
    10. <form action="/oa/dept/save" method="post">
    11. 部门编号<input type="text" name="deptno"/><br>
    12. 部门名称<input type="text" name="dname"/><br>
    13. 部门位置<input type="text" name="loc"/><br>
    14. <input type="submit" value="保存"/><br>
    15. form>
    16. body>
    17. html>

    后端功能实现类6个:DeptDeleteServlet.java 

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.ResultSet;
    12. import java.sql.SQLException;
    13. public class DeptDeleteServlet extends HttpServlet {
    14. /**
    15. * 根据部门编号展示部门信息,已经在DeptListServlet中传入了deptno
    16. * @param request
    17. * @param response
    18. * @throws ServletException
    19. * @throws IOException
    20. */
    21. @Override
    22. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    23. // 获取部门编号
    24. // /oa/dept/detail
    25. String deptno = request.getParameter("deptno");
    26. response.setContentType("text/html;charset=UTF-8");
    27. PrintWriter out = response.getWriter();
    28. //连接数据库,查询所有部门
    29. Connection conn = null;
    30. PreparedStatement ps = null;
    31. ResultSet rs = null;
    32. try {
    33. //获取连接
    34. conn = DBUtil.getConnection();
    35. //获取预编译的数据库操作对象
    36. String sql = "delete from depttest where deptno = ?";
    37. ps = conn.prepareStatement(sql);
    38. ps.setString(1, deptno);
    39. //执行sql语句
    40. int flag = ps.executeUpdate();
    41. if(flag == 1){
    42. //删除成功
    43. request.getRequestDispatcher("/dept/list").forward(request, response);
    44. }
    45. else {
    46. //删除失败
    47. request.getRequestDispatcher("/error.html").forward(request, response);
    48. };
    49. } catch (SQLException e) {
    50. e.printStackTrace();
    51. } finally {
    52. //释放资源
    53. DBUtil.close(conn, ps, rs);
    54. }
    55. }
    56. }

    DeptDetialServlet.java 

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.ResultSet;
    12. import java.sql.SQLException;
    13. public class DeptDetailServlet extends HttpServlet {
    14. /**
    15. * 根据部门编号展示部门信息,已经在DeptListServlet中传入了deptno
    16. * @param request
    17. * @param response
    18. * @throws ServletException
    19. * @throws IOException
    20. */
    21. @Override
    22. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    23. // 获取部门编号
    24. // /oa/dept/detail
    25. String deptno = request.getParameter("deptno");
    26. response.setContentType("text/html;charset=UTF-8");
    27. PrintWriter out = response.getWriter();
    28. //静态页面
    29. out.print("");
    30. out.print("");
    31. out.print(" ");
    32. out.print(" ");
    33. out.print(" 部门详情");
    34. out.print(" ");
    35. out.print(" ");
    36. out.print("

      部门详情

      "
      );
    37. out.print("
      "
      );
    38. //连接数据库,查询所有部门
    39. Connection conn = null;
    40. PreparedStatement ps = null;
    41. ResultSet rs = null;
    42. try {
    43. //获取连接
    44. conn = DBUtil.getConnection();
    45. //获取预编译的数据库操作对象
    46. String sql = "select dname, loc from depttest where deptno = ?";
    47. ps = conn.prepareStatement(sql);
    48. ps.setString(1, deptno);
    49. //执行sql语句
    50. rs = ps.executeQuery();
    51. //处理结果集
    52. int i = 0;
    53. while(rs.next()) {
    54. String dname = rs.getString("dname");
    55. String loc = rs.getString("loc");
    56. //动态
    57. out.print(" 部门编号:"+deptno+"
      "
      );
    58. out.print(" 部门名称:"+dname+"
      "
      );
    59. out.print(" 部门位置:"+loc+"
      "
      );
    60. }
    61. //静态
    62. out.print(" ");
    63. out.print(" ");
    64. out.print("");
    65. } catch (SQLException e) {
    66. e.printStackTrace();
    67. } finally {
    68. //释放资源
    69. DBUtil.close(conn, ps, rs);
    70. }
    71. }
    72. }

    DeptEditServlet.java 

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.SQLException;
    12. public class DeptEditServlet extends HttpServlet {
    13. @Override
    14. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    15. //初始化,得到当前路径,
    16. response.setContentType("text/html;charset=UTF-8");
    17. PrintWriter out = response.getWriter();
    18. //获取数据库连接
    19. Connection conn = null;
    20. PreparedStatement ps = null;
    21. String deptno = request.getParameter("deptno");
    22. String dname = request.getParameter("dname");
    23. String loc = request.getParameter("loc");
    24. out.print(" ");
    25. out.print("");
    26. out.print(" ");
    27. out.print(" ");
    28. out.print(" 修改部门");
    29. out.print(" ");
    30. out.print(" ");
    31. out.print("

      修改部门

      "
      );
    32. out.print("
      "
      );
    33. out.print("
      ");
    34. out.print(" 部门编号" readonly />
      "
      );
    35. out.print(" 部门名称">
      "
      );
    36. out.print(" 部门位置">
      "
      );
    37. out.print("
      "
      );
    38. out.print(" ");
    39. out.print(" ");
    40. out.print("");
    41. }
    42. }

     DeptListServlet.java

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.ResultSet;
    12. import java.sql.SQLException;
    13. public class DeptListServlet extends HttpServlet {
    14. @Override
    15. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    16. doGet(request, response);
    17. }
    18. @Override
    19. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    20. //获取应用根路径
    21. String contextPath = request.getContextPath();
    22. //tomcat10不用写,设置响应的内容类型以及字符集,防止中文乱码
    23. response.setContentType("text/html;charset=UTF-8");
    24. PrintWriter out = response.getWriter();
    25. //这部分是静态不变的
    26. out.print(" ");
    27. out.print("");
    28. out.print(" ");
    29. out.print(" ");
    30. out.print(" 部门列表页面");
    31. out.print(" ");
    32. out.print(" ");
    33. out.print("

      部门列表

      "
      );
    34. out.print("
      "
      );
    35. out.print(" ");
    36. out.print("
    37. ");
    38. out.print("
    39. ");
    40. out.print("
    41. ");
    42. out.print("
    43. ");
    44. out.print("
    45. ");
    46. out.print("
    47. ");
    48. out.print("
    49. ");
    50. //连接数据库,查询所有部门
    51. Connection conn = null;
    52. PreparedStatement ps = null;
    53. ResultSet rs = null;
    54. try {
    55. //获取连接
    56. conn = DBUtil.getConnection();
    57. //获取预编译的数据库操作对象
    58. String sql = "select deptno, dname, loc from depttest";
    59. ps = conn.prepareStatement(sql);
    60. //执行sql语句
    61. rs = ps.executeQuery();
    62. //处理结果集
    63. int i = 0;
    64. String deptno = null;
    65. String dname = null;
    66. String loc = null;
    67. while (rs.next()) {
    68. deptno = rs.getString("deptno");
    69. dname = rs.getString("dname");
    70. loc = rs.getString("loc");
    71. //这部分是动态的
    72. out.print("
    73. ");
    74. out.print("
    75. ");
    76. out.print("
    77. ");
    78. out.print("
    79. ");
    80. out.print("
    81. ");
    82. out.print("
    83. ");
    84. out.print("
    85. ");
    86. }
    87. //这部分是静态不变的
    88. out.print("
    89. 序号部门编号部门名称部门位置操作
      " + (++i) + "" + deptno + "" + dname + "" + loc + "");
    90. out.print(" 删除");
    91. out.print(" 修改");
    92. // out.print(" 详情");
    93. out.print(" 详情");
    94. out.print("
    95. "
      );
    96. out.print("
      "
      );
    97. out.print(" 新增部门");
    98. out.print(" ");
    99. out.print("");
    100. } catch (SQLException e) {
    101. e.printStackTrace();
    102. } finally {
    103. //释放资源
    104. DBUtil.close(conn, ps, rs);
    105. }
    106. }
    107. }

    DeptSaveServlet.java 

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.SQLException;
    12. public class DeptSaveServlet extends HttpServlet {
    13. /**
    14. * 保存新增部门记录
    15. * @param request
    16. * @param response
    17. * @throws ServletException
    18. * @throws IOException
    19. */
    20. @Override
    21. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    22. // 获取部门编号
    23. // /oa/dept/detail
    24. String deptno = request.getParameter("deptno");
    25. String dname = request.getParameter("dname");
    26. String loc = request.getParameter("loc");
    27. response.setContentType("text/html;charset=UTF-8");
    28. //连接数据库,查询所有部门
    29. Connection conn = null;
    30. PreparedStatement ps = null;
    31. try {
    32. //获取连接
    33. conn = DBUtil.getConnection();
    34. //获取预编译的数据库操作对象
    35. String sql = "insert into depttest values(?, ?, ?)";
    36. ps = conn.prepareStatement(sql);
    37. ps.setString(1, deptno);
    38. ps.setString(2, dname);
    39. ps.setString(3, loc);
    40. // System.out.println(ps);
    41. //执行sql语句
    42. int flag = ps.executeUpdate();
    43. // System.out.println("flag="+flag);
    44. if(flag == 1){
    45. //执行成功
    46. request.getRequestDispatcher("/dept/list").forward(request, response);
    47. // request.getRequestDispatcher("/error.html").forward(request, response);
    48. }else {
    49. //执行成功
    50. request.getRequestDispatcher("/error.html").forward(request, response);
    51. }
    52. } catch (SQLException e) {
    53. e.printStackTrace();
    54. } finally {
    55. //释放资源
    56. DBUtil.close(conn, ps, null);
    57. }
    58. }
    59. }

    DeptUpdateServlet.java 

    1. package com.bjpowernode.oa.web.action;
    2. import com.bjpowernode.oa.utils.DBUtil;
    3. import jakarta.servlet.ServletException;
    4. import jakarta.servlet.http.HttpServlet;
    5. import jakarta.servlet.http.HttpServletRequest;
    6. import jakarta.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.Connection;
    10. import java.sql.PreparedStatement;
    11. import java.sql.SQLException;
    12. public class DeptUpdateServlet extends HttpServlet {
    13. @Override
    14. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    15. //初始化,得到当前路径,
    16. response.setContentType("text/html;charset=UTF-8");
    17. PrintWriter out = response.getWriter();
    18. //获取数据库连接
    19. Connection conn = null;
    20. PreparedStatement ps = null;
    21. String deptno = request.getParameter("deptno");
    22. String dname = request.getParameter("dname");
    23. String loc = request.getParameter("loc");
    24. try {
    25. conn = DBUtil.getConnection();
    26. //执行sql语句
    27. String sql = "update depttest set dname = ?, loc = ? where deptno = ?";
    28. //获取预编译的sql语句
    29. ps = conn.prepareStatement(sql);
    30. ps.setString(1, dname);
    31. ps.setString(2, loc);
    32. ps.setString(3, deptno);
    33. //执行sql语句
    34. int flag = ps.executeUpdate();
    35. if(flag == 1){
    36. //执行成功
    37. request.getRequestDispatcher("/dept/list").forward(request, response);
    38. } else {
    39. //执行失败
    40. request.getRequestDispatcher("/error.html").forward(request, response);
    41. }
    42. } catch (SQLException e) {
    43. e.printStackTrace();
    44. } finally {
    45. DBUtil.close(conn, ps, null);
    46. }
    47. }
    48. }

    PS:虽然已经写得很详细了,可以直接1:1复现。但是如果有想要原项目工程代码的话,在评论区留下邮箱号即可,看到之后会回复哦~

  • 相关阅读:
    Redis_三种集群模式
    加速汽车行业转型,云计算到底扮演了什么角色?
    STM8的C语言编程(5)--8位定时器应用之一
    QT基础入门【QSS】 伪状态,冲突解决、级联介绍
    kworker隔离绑定
    mysql_04_01_原理_索引下推
    学会这招,轻松实现英语文本转语音,巩固学习内容
    DBCO-SS-Mal,DBCO-SS-Maleimide,马来酰亚胺衍生物试剂特点分析
    纯CSS 毛玻璃效果
    微信小程序之投票管理
  • 原文地址:https://blog.csdn.net/weixin_42571453/article/details/127998776