Web08(学生表1.0)

只使用Servlet写学生表(不推荐,仅学习尝试写)

1.在目录web.WEB-INF.lib包下引入mysql驱动

2.配置web.xml文件

因为只使用了Servlet的技术,所以在web。xml文件中需要配置各个类的信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!--学生列表-->
    <servlet>
        <servlet-name>StudentList</servlet-name>
        <servlet-class>MysqlConnect.StudentList</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>StudentList</servlet-name>
        <url-pattern>/mc/list</url-pattern>
    </servlet-mapping>

    <!--学生详情-->
    <servlet>
        <servlet-name>StudentDetail</servlet-name>
        <servlet-class>MysqlConnect.StudentDetail</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>StudentDetail</servlet-name>
        <url-pattern>/mc/detail</url-pattern>
    </servlet-mapping>

    <!--修改学生信息的展示-->
    <servlet>
        <servlet-name>StudentAlterShow</servlet-name>
        <servlet-class>MysqlConnect.StudentAlterShow</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>StudentAlterShow</servlet-name>
        <url-pattern>/mc/altershow</url-pattern>
    </servlet-mapping>

    <!--修改学生信息-->
    <servlet>
        <servlet-name>StudentAlter</servlet-name>
        <servlet-class>MysqlConnect.StudentAlter</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>StudentAlter</servlet-name>
        <url-pattern>/mc/alter</url-pattern>
    </servlet-mapping>

    <!--删除学生信息-->
    <servlet>
        <servlet-name>StudentDelete</servlet-name>
        <servlet-class>MysqlConnect.StudentDelete</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>StudentDelete</servlet-name>
        <url-pattern>/mc/delete</url-pattern>
    </servlet-mapping>

    <!--新增学生信息-->
    <servlet>
        <servlet-name>StudentInsert</servlet-name>
        <servlet-class>MysqlConnect.StudentInsert</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>StudentInsert</servlet-name>
        <url-pattern>/mc/insert</url-pattern>
    </servlet-mapping>

</web-app>

 3.编写各个html文件

先在html文件中写好要进行的程序流程,然后再Java文件中对html文件进行嵌入,采用拼串的形式最后输出在页面当中

(1)index.html(欢迎页面,默认)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
  <h1>欢迎使用班级系统</h1>
  <hr>
  <a href="/oa/mc/list">查看学生列表</a>

</body>
</html>

(2)学生表展示的list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生表展示</title>
  <script type='text/javascript'>
  function del (no) {
    var ok = window.confirm ( '亲,删了不可恢复哦! ');
    if (ok) {
      alert ('正在删除数据,请稍后...' );
      document.location.href = '/oa/mc/delete?no=' + no;
    };
  }
  }</script>
</head>
<body>
<h3 align="center">学生信息操作</h3>
<hr>
  <table align="center"border="1px" width="70%">
    <tr align="center">
      <th>序号</th>
      <th>学生学号</th>
      <th>学生姓名</th>
      <th>操作</th>
    </tr>
    <tr align="center">
      <td>1</td>
      <td>zhangsan</td>
      <td>
        <a href="delete.html">删除</a>
        <a href="alter.html">修改</a>
        <a href="detail.html" >详情</a>
      </td>
    </tr>

  </table>
<a href="insert.html">新增学生</a>

</body>
</html>

(3)增删改查的各个html文件(insert.html,delete.html,alter.html,detail.html)

insert.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新增学生</title>
</head>
<body>
<h1>新增学生信息</h1>
<hr>
<form action="/oa/mc/insert" method="post">
  学生学号<input type="text" name="no" /><br>
  学生姓名<input type="text" name="name"/><br>
  学生成绩<input type="text" name="grade" /><br>

    <input type="submit" value="提交" /><br>
</form>

</body>
</html>

delete.html中可以没有代码,在Java程序中对数据库进行操作即可

alter.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改</title>
</head>
<body>
<h1>修改学生信息</h1>
<hr>
<form action="/oa/mc/alter" method="post">
  <!--序号<input type="text" name="id" value="1" readonly/><br>-->
    <!--readonly只读,不能进行修改-->
  学生学号<input type="text" name="no" value="001"/><br>
  学生姓名<input type="text" name="name" value="zhangsan"/><br>
  学生成绩<input type="text" name="grade" value="1"  /><br>

    <input type="submit" value="修改"/><br>
</form>
</body>
</html>

detail.html中也应该是动态查询出的,所以也不应该写死

扫描二维码关注公众号,回复: 14551533 查看本文章

(3)错误页面(error.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>出现错误</title>
</head>
<body>
    <h1>操作失败,<a href="javascript:void(0)" onclick="window.history.back()">返回</a></h1>

</body>
</html>

4.编写java程序对数据库中进行操作

(1)StudentList

package MysqlConnect;

import util.DButil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ResourceBundle;

/**
 * @author H
 * @version 1.0
 * @description: TODO
 * @date 2022/7/19 0:34
 */
public class StudentList extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取应用的根路径
        String contextPath = request.getContextPath();
        //设置响应类型和输出
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();


        Connection conn =null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        out.print("<!DOCTYPE html>");
        out.print("<html lang='en'>");
        out.print("<head>");
        out.print("    <meta charset='UTF-8'>");
        out.print("    <title>学生表展示</title>");

        out.print("<script type='text/javascript'>");
        out.print("    function del (no) {");
        //弹出确认框,用户点击确定,返回true,点击取消返回false
        out.print("    var ok = window.confirm ( '亲,删了不可恢复哦! ');");
        out.print("    if (ok) {");
        //发送请求进行删除数据的操作。");
        //在Js代码当中如何发送请求给服务器?
        out.print("alert ('正在删除数据,请稍后...' );  ");
        //document.location.href ='请求路径'
        //document.location = '请求路径'
        //window.location.href ='请求路径'
        //window.location ='请求路径'
        out.print("        document.location.href = '"+contextPath+"/mc/delete?no=' + no;");
        out.print("    }");
        out.print(" }");
        out.print("</script>");

        out.print("</head>");
        out.print("<body>");

        out.print("<h3 align='center'>学生信息操作</h3>");
        out.print("<hr>");
        out.print("  <table align='center' border='1px' width='70%'>");
        out.print("    <tr align='center'>");
        out.print("      <th>序号</th>");
        out.print("      <th>学生学号</th>");
        out.print("      <th>学生姓名</th>");
        out.print("      <th>成绩</th>");
        out.print("      <th>操作</th>");
        out.print("    </tr>");



        try {
            //注册驱动,再静态代码块中注册
            //获取连接
            conn=DButil.getConnection();
            //1.注册驱动
           /* Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/text";
            String root = "root";
            String password = "root";
            conn = DriverManager.getConnection(url,root,password);*/

            if (request.getParameter("name") !=" "){
                String no = request.getParameter("no");
                String name = request.getParameter("name");
                String grade = request.getParameter("grade");

                //获取预编译的数据库操作对象
                String sql = "insert into t_student(no,name,grade) values (?,?,?) ";
                ps= conn.prepareStatement(sql);
                //执行sql语句
                ps.setString(1,no);
                ps.setString(2,name);
                ps.setString(3,grade);
            }
            //获取预编译的数据库操作对象
            String sql = "select s.no,s.name,s.grade from t_student s";
            ps= conn.prepareStatement(sql);
            //执行sql语句
            rs = ps.executeQuery();
            //处理结果集
            int i = 0;

            while (rs.next()){
                int no = rs.getInt("no");
                String name = rs.getString("name");
                String grade = rs.getString("grade");
                if(no == 1) {
                    out.print("    <tr align='center'>");
                    out.print("      <td>" + (++i) + "</td>");
                    out.print("      <td>" + no + "</td>");
                    out.print("      <td><font color=\"pink\">" + name + "</font></td>");
                    out.print("      <td>" + grade + "</td>");
                    out.print("      <td>");
                    out.print("        <a href='javascript:void(0)' onclick='del("+no+")'>删除</a>");
                    out.print("        <a href='"+contextPath+"/mc/altershow?no="+no+"'>修改</a>");
                    out.print("        <a href='"+contextPath+"/mc/detail?no="+no+"'>详情</a>");
                    out.print("      </td>");
                    out.print("    </tr>");
                }else{
                    out.print("    <tr align='center'>");
                    out.print("      <td>"+(++i)+"</td>");
                    out.print("      <td>"+no+"</td>");
                    out.print("      <td>"+name+"</td>");
                    out.print("      <td>"+grade+"</td>");
                    out.print("      <td>");
                    out.print("        <a href='javascript:void(0)' onclick='del("+no+")'>删除</a>");
                    out.print("        <a href='"+contextPath+"/mc/altershow?no="+no+"'>修改</a>");
                    out.print("        <a href='"+contextPath+"/mc/detail?no="+no+"'>详情</a>");
                    out.print("      </td>");
                    out.print("    </tr>");
                }
                //out.print("序号"+i+"   "+no + ":" + name +"  "+grade+ "<br>");


            }
            out.print("      <td>");
            out.print("  <a href='"+contextPath+"/insert.html'>新增学生</a>");
            out.print("      </td>");
            out.print("    </tr>");
            out.print("  </table>");


            out.print("</body>");
            out.print("</html>");

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DButil.close(conn,ps,rs);

        }

    }


}

(2)StudentInsert

package MysqlConnect;

import util.DButil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentInsert extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取应用的根路径
        String contextPath = request.getContextPath();
        //设置响应类型和输出
        response.setContentType("text/html;chaarset=UTF-8");
        PrintWriter out = response.getWriter();

        String no = request.getParameter("no");
        String name = request.getParameter("name");
        String grade = request.getParameter("grade");
        int count = 0;

        Connection conn =null;
        PreparedStatement ps = null;

        try {
            //注册驱动,再静态代码块中注册
            //获取连接
            conn=DButil.getConnection();
            String sql = "insert into t_student(no,name,grade) values(?,?,?)";
            ps=conn.prepareStatement(sql);
            ps.setString(1,no);
            ps.setString(2,name);
            ps.setString(3,grade);

            count = ps.executeUpdate();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DButil.close(conn,ps,null);

        }
        if (count == 1){
            //添加成功
            //仍然跳转到学生列表页面
            //学生页面显示需要执行另外一个Servlet,需要使用转发机制
            //这里选择了转发机制,没有选择重定向机制
            request.getRequestDispatcher("/mc/list").forward(request,response);
        }else {
            //删除失败
            request.getRequestDispatcher("/error.html").forward(request,response);
        }


    }

}

(3)StudentDelete

package MysqlConnect;

import util.DButil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentDelete extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取应用的根路径
        String contextPath = request.getContextPath();
        //设置响应类型和输出
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();


        Connection conn =null;
        PreparedStatement ps = null;

        String no = request.getParameter("no");

        int count = 0;
        try {
            //注册驱动,再静态代码块中注册
            //获取连接
            //conn=DButil.getConnection();
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/text";
            String root = "root";
            String password = "***";
            conn = DriverManager.getConnection(url,root,password);

            //获取预编译的数据库操作对象
            String sql = "delete from t_student where no = ?";
            ps= conn.prepareStatement(sql);
            ps.setString(1,no);
            //执行sql语句
            count += ps.executeUpdate();
            //System.out.println(count);

        } catch (SQLException throwables) {
            //遇到异常回滚
            if (conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {

            DButil.close(conn,ps,null);

        }
        //System.out.println(count);
        if (count == 1){
            //删除成功
            //仍然跳转到学生列表页面
            //学生页面显示需要执行另外一个Servlet,需要使用转发机制
            //这里选择了转发机制,没有选择重定向机制
            request.getRequestDispatcher("/mc/list").forward(request,response);
        }else {
            //删除失败
            request.getRequestDispatcher("/error.html").forward(request,response);
        }

    }

}

(4)进行修改时需要先显示出原来的数据,在原来的数据中进行修改,再提交给服务器,服务器返回给一个java程序对数据库进行修改操作

StudentAlterShow

package MysqlConnect;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import util.DButil;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentAlterShow extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取应用的根路径
        String contextPath = request.getContextPath();
        //设置响应类型和输出
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("<!DOCTYPE html>");
        out.print("<html lang='en'>");
        out.print("<head>");
        out.print("    <meta charset='UTF-8'>");
        out.print("    <title>修改</title>");
        out.print("</head>");
        out.print("<body>");
        out.print("<h1>修改学生信息</h1>");
        out.print("<hr>");
        out.print("<form action='/oa/mc/alter' method='get'>");

        Connection conn =null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String no = request.getParameter("no");

        try {
            //注册驱动,再静态代码块中注册
            //获取连接
            conn=DButil.getConnection();

            //获取预编译的数据库操作对象
            String sql = "select s.name,s.grade from t_student s where s.no=?";
            ps= conn.prepareStatement(sql);
            ps.setString(1,no);
            //执行sql语句
            rs = ps.executeQuery();
            while (rs.next()){
                String name = rs.getString("name");
                String grade = rs.getString("grade");
                //out.print("<hr>");
                out.print("学生学号<input type='text' name='no' value='"+no+"'/><br>");
                out.print("学生姓名<input type='text' name='name' value='"+name+"'/><br>");
                out.print("学生成绩<input type='text' name='grade' value='"+grade+"' /><br>");
            }

            out.print("<input type='submit' value='修改'/><br>");

            out.print("</form>");
            out.print("</body>");
            out.print("</html>");

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DButil.close(conn,ps,rs);

        }


    }

}

StudentAlter

package MysqlConnect;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import util.DButil;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class StudentAlter extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取应用的根路径
        String contextPath = request.getContextPath();
        //设置响应类型和输出
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Connection conn =null;
        PreparedStatement ps = null;

        String no = request.getParameter("no");
        String name = request.getParameter("name");
        String grade = request.getParameter("grade");


        int count = 0;
        try {
            //注册驱动,再静态代码块中注册
            //获取连接
            conn= DButil.getConnection();

            //获取预编译的数据库操作对象
            String sql = "update t_student set name=?,grade=? where no=?";
            ps= conn.prepareStatement(sql);
            ps.setString(1,name);
            ps.setString(2,grade);
            ps.setString(3,no);
            //执行sql语句
            count=ps.executeUpdate();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DButil.close(conn,ps,null);

        }
        if (count == 1){
            //修改成功
            //仍然跳转到学生列表页面
            //学生页面显示需要执行另外一个Servlet,需要使用转发机制
            //这里选择了转发机制,没有选择重定向机制
            request.getRequestDispatcher("/mc/list").forward(request,response);
        }else {
            //删除失败
            request.getRequestDispatcher("/error.html").forward(request,response);
        }


    }
}

(5)StudentDetail

package MysqlConnect;

import util.DButil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentDetail extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取应用的根路径
        String contextPath = request.getContextPath();
        //设置响应类型和输出
        response.setContentType("text/html;chaarset=UTF-8");
        PrintWriter out = response.getWriter();


        Connection conn =null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        out.print("<!DOCTYPE html>");
        out.print("<html lang='en'>");
        out.print("<head>");
        out.print("  <meta charset='UTF-8'>");
        out.print("    <title>学生详情</title>");
        out.print("</head>");
        out.print("<body>");
        out.print("<h1>学生信息详情</h1>");
        out.print("<hr>");



        try {
            String no = request.getParameter("no");
            //注册驱动,再静态代码块中注册
            //获取连接
            //conn=DButil.getConnection();
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/text";
            String root = "root";
            String password = "***";
            conn = DriverManager.getConnection(url,root,password);

            //获取预编译的数据库操作对象
            String sql = "select s.name,s.grade from t_student s where s.no=?";
            ps= conn.prepareStatement(sql);
            ps.setString(1,no);
            //执行sql语句
            //处理结果集

            rs = ps.executeQuery();
            while (rs.next()){
                String name = rs.getString("name");
                String grade = rs.getString("grade");
                out.print("<hr>");
                out.print("学生学号   "+no+"<br>");
                out.print("学生姓名   "+name+"<br>");
                out.print("学生成绩   "+grade+"<br>");

            }
            out.print( " <input type='button' value='后退' onclick='window.history.back()' />");

            out.print("</body>");
            out.print("</html>");

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            DButil.close(conn,ps,rs);

        }

    }

}

5.页面展示

 

 

 

 

 

注意!!!!

因为采用纯Servlet的编写会嵌入前端代码,所以并不推荐,后续可以采用jsp前后端代码进行一些分割,代码会变的好看一些,在之后的一些项目开发过程中,可能会与前端人员进行交互,所以大多数情况不会在后端代码中嵌入前端代码,本博客只是练习Servlet期间写的一些代码,仅供参考

猜你喜欢

转载自blog.csdn.net/m0_63061397/article/details/127817594
今日推荐