zoukankan      html  css  js  c++  java
  • java+servlet+JDBC

    JAVA连接数据库实验

    1.实验思路

    本实验后端采用的是JDBC连接数据库,服务端和客户端的连接采用的是servlet开发工具,主要的结构是采用servlet作为中间层实现信息交互和页面的重定向,后端则是采用JDBC实现页面和MYSQL数据库的交互。

    2.代码结构图

    结构图1

    结构图2


    3.实验开发工具

    Intelij -IU 2018.3.6 旗舰版( 因为后续要使用tomcat插件,社区版没有该功能)

    附上链接https://www.cnblogs.com/xin1006/p/11414278.html

    Tomcat服务器的部署(用来实现servlet工具)
    数据库MYSQL 8.0 外加连接工具 NAVICAT
    对应数据库版本的JDBC驱动程序的 mysql-connector-java连接包

    4.实验正式准备

    (1)数据库 MYSQL(安装和连接首先自己实现)(免安装版也可以,那样其实可以直接用命令行)

    数据库ku
    内部包含两张表 table
    login表 login
    student表 student

    (2)IDEA环境部署

    1.首先获得对应的驱动包,这里我附上对应的链接
    链接 提取码:a527
    2.安装Tomcat(首先记得先安装JDK,不做相关的赘述 )
    附上参考 https://www.jb51.net/article/137404.htm
    安装之后打开 localhost:8080(检查是否出现Tomcat,如果没有出现就是安装失败,可能是接口冲突,或者是相关的环境路径有误)

    样图

    3.IDEA配置
    new一个新的project

    idea

    勾选web 选择对应的jdk(我这里版本稍微高了点)

    最后取上名字 (路径不能有中文,安装Tomcat的路径也不能有中文,路径不宜过长)

    最终得到如下图

    手动打开此路径

    WEB-INF目录下新建子目录,叫做lib里面存放我们相关要用到的包,把刚刚我们的connect.jar的驱动包放入

    继续进入IDEA进行操作 ,打开刚刚jar包放入的文件夹lib,右键jar包,选择ADD as Library,点击ok,点击右上角确认是否配置完成



    接下来是配置Tomcat(这个才是本文的关键)

    点击上图的Add Configuration


    server无需改动


    这个就是配置输出路径 修改一下,确认

    运行,然后看弹出界面,成功弹出下图ok


    生成的.class文件会存放到out目录之中



    5.实验正式代码部署


    src目录下新建三级文件目录,com目录 ,子目录zsh目录
    及其zsh目录下所属的三个子目录,分别是util,servlet,bean目录

    重定向框图(时间上比较赶,可能有些地方漏掉了)

    登录操作

    代码

    Student 数据信息表(实现信息的接口)
    package com.zsh.bean;
    /// 信息表层
    import java.util.ArrayList;
    import java.util.List;
    public class Student {
        private int id;/// 编号
        private String name;/// 姓名
        private int age;/// 年龄
        private String sex;/// 性别
        private int  grade;/// 成绩
        private String address;/// 地址
        public int get_id()
        {
            return id;
        }
        public void set_id(int ID)
        {
            this.id = ID;
        }
        public String  get_name()
        {
            return name;
        }
        public void set_name(String name)
        {
            this.name  = name;
        }
        public int get_age()
        {
            return age;
        }
        public void set_age(int age)
        {
            this.age =age;
        }
        public String  get_sex()
        {
            return sex;
        }
        public void set_sex(String sex)
        {
            this.sex  = sex;
        }
        public int  get_grade()
        {
            return grade;
        }
        public void set_grade(int  grade)
        {
            this.grade = grade;
        }
        public String  get_address()
        {
            return address;
        }
        public void set_address(String address)
        {
            this.address  = address;
        }
    }
    
    

    数据库连接,DBcon类 其他的基本大家都应该知晓 ,我就简单说一下我踩的坑 final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
    //数据库连接地址
    final String URL = "jdbc:mysql://localhost:3306/school?serverTimezone=UTC&useSSL=false";
    //用户名,更换成你自己的用户名,此处为root用户
    final String USER_NAME = "root";
    //密码,更换成你自己设定的密码
    final String PASSWORD = "root";
    school是我的数据库名字,到时候改成自己的就可以了
    貌似是MYSQL 5.0以下和5.0以上的驱动代码不同
    8.0的final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
    5.0以下的final String DRIVER_NAME = "com.mysql.jdbc.Driver";
    还有就是这个,?后面表示带的参数,一个主要是用来调整时区,核对MYSQL的时区,另外一个https://www.cnblogs.com/MonkeySun/p/13406050.html
    final String URL = "jdbc:mysql://localhost:3306/school?serverTimezone=UTC&useSSL=false";

    package com.zsh.util;
    
    import com.mysql.cj.jdbc.exceptions.NotUpdatable;
    import com.mysql.cj.xdevapi.SqlDataResult;
    import java.sql.*;
    
    public class DBcon {
        public static Connection getconn()
        {
            final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
            //数据库连接地址
            final String URL = "jdbc:mysql://localhost:3306/school?serverTimezone=UTC&useSSL=false";
            //用户名,更换成你自己的用户名,此处为root用户
            final String USER_NAME = "root";
            //密码,更换成你自己设定的密码
            final String PASSWORD = "root";
            Connection connection =  null;/// 驱动对象
            try {
                //加载mysql的驱动类
                Class.forName(DRIVER_NAME);
                connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
            }catch (SQLException e)
            {
                e.printStackTrace();
            }catch(ClassNotFoundException e)
            {
                e.getException();
            }
            return connection;
        }
        public static void closeconn(Connection con, PreparedStatement pre, ResultSet rs)
        {
             if (con!=null)
             {
                 try{
                     con.close();
                 }catch(SQLException e)
                 {
                     e.printStackTrace();
                 }
             }
             if (pre!=null)
             {
                 try{
                     pre.close();
                 }catch(SQLException e){
                     e.printStackTrace();
                 }
             }
             if (rs!=null)
             {
                 try{
                     rs.close();
                 }catch (SQLException e)
                 {
                     e.printStackTrace();
                 }
             }
        }
    }
    
    

    loginservlet (是用来实现登陆操作)
    说明:doPost()函数是固定格式
    继承HttpServlet接口需要实现doPost方法或者doGet方法
    这两个方法的区别是doPost 是密文通道(也就是隐藏了)
    doGet方法则会将你之前所在页面输入的所有信息放到重定向的URL里面(也就是明文) 所以虽然并不是什么严谨的项目,url后缀太长也很难匹配
    还是先简单说明一下

     HttpServletRequest request,HttpServletResponse response///这两个参数 request获取当前页面所输入的信息
    /// response是返回信息到页面的接口
    ///默认的response和request采用的是ios--8859-1编码 最终需要转化为utf-8
     request.setCharacterEncoding("utf-8");
     response.setCharacterEncoding("utf-8");
     response.setHeader("Content-Type","text/html;charset=utf-8");
    
    /// getParameter可以理解为按照指定参数获得对应页面的数据
    /// 比如说下图两个文本框,name和id都是我们所需要的参数
    /// 那么我在和他连接的servlet之中就能调用该函数获取对应的id的信息
    String name = request.getParameter("name");
    String pwd = request.getParameter("pwd");
    

    package com.zsh.servlet;
    import com.zsh.util.DBcon;
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServlet;
    import java.util.concurrent.TimeUnit;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    @WebServlet("/login")/// 声明  servlet框架需要你写上存在哪些servlet,新版本的就可以按照此种声明方式
    ///说明下一次重定向之后的URL路径就是https://...../login
    public class loginservlet extends HttpServlet  {/// 继承该接口是因为其他接口需要重写一些方法
        protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException
        {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type","text/html;charset=utf-8");
            String name = request.getParameter("name");
            String pwd = request.getParameter("pwd");
            boolean flag = false;
            Connection con = DBcon.getconn();///连接数据库
            PreparedStatement ps = null;
            ResultSet rs = null;
            String sql = "select * from login where name = ? and pwd = ?";
            PrintWriter out = response.getWriter();
            try {
                ps = con .prepareStatement(sql);
                ps.setString(1,name);
                ps.setString(2,pwd);
                rs = ps.executeQuery();/// 获取查询结果 
    
                if(rs.next()){/// 如果存在next就说明查询到了该账号,所以就登录成功
                    flag = true;
                }else{
                    flag = false;
                }
    
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                DBcon.closeconn(con,ps,rs);
            }
    
            if(flag){
                response.sendRedirect("jdbc.jsp");/// 页面重定向  跳转到添加数据的页面
                out.println("登录成功");
            }else {
                response.sendRedirect("error.jsp");
            }
        }
    }
    
    

    index.jsp连接的是loginservlet

    <%--
      Created by IntelliJ IDEA.
      User: cdk13
      Date: 2021/6/7
      Time: 15:14
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
    </head>
    <body>
    <form action="/login" method="post">
    <--%上面说明的是action连接对象,method就是处理的方法,如果写上get就是对应doGet方法,否则就是doPost方法%-->
        <table align="center" border="1 " width="50%" cellpadding="6">
        <tr>
            <td align="center" >账号:</td>
            <td align="left" ><input type="text" name="name" id="name"></td>
        </tr>
        <tr>
            <td align="center" >密码:</td>
            <td align="left" ><input type="text" name="pwd" id="pwd"></td>
        </tr>
        <tr>
            <th colspan="2" align="center" ><a href="register.jsp" >注册请点击此处                   </a> <input type="submit" name="submit" value="登录" ></th>
    <--%弄一个超链接%-->
        </tr>
    
        </table>
    </form>
    </body>
    </html>
    

    registerservlet.java

    package com.zsh.servlet;
    import com.zsh.util.DBcon;
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServlet;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.*;
    @WebServlet("/register")
    public class registerservlet extends HttpServlet{
        protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type", "text/html;charset=utf-8");
            String name = request.getParameter("name");
            String pwd1 = request.getParameter("pwd1");
            String pwd2 = request.getParameter("pwd2");
            String sql = "insert into login(name,pwd) values(?,?)";
            Connection conn = DBcon.getconn();
            PreparedStatement ps = null;
            ResultSet rs = null;
            boolean flag = false;
            List<String >error = new ArrayList<>();///该参数主要是用来传递报错,主要传送给error1.jsp
            if (name.equals("")||pwd1.equals("")||pwd2.equals(""))///一个为空,添加报错参数
            {
                if (name.equals(""))error.add("请输入用户名
    ");
                if (pwd1.equals(""))error.add("请输入密码
    ");
                if (pwd2.equals(""))error.add("请确认密码
    ");
                if (!error.isEmpty()) {
                    request.setAttribute("error", error);
                    request.getRequestDispatcher("error1.jsp").forward(request, response);///这两句就是传递参数从servlet到jsp的关键
                }
                response.sendRedirect("error1.jsp");/// 重定向
            }
            if (pwd1==pwd2) {
                try {
                    ps = conn.prepareStatement(sql);
                    ps.setString(1, name);
                    ps.setString(2, pwd1);
                    rs = ps.executeQuery();
                    if(rs.next()){
                        flag = true;
                    }else{
                        flag = false;
                    }
                    if (flag)
                    {
                        response.sendRedirect("error1.jsp");
                    }
                    else  ps.executeUpdate();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    DBcon.closeconn(conn, ps, null);
                }
                response.sendRedirect("success.jsp");
            }
            else {
                error.add("两次输入密码不一致
    ");
                if (!error.isEmpty()) {
                    request.setAttribute("error", error);
                    request.getRequestDispatcher("error1.jsp").forward(request, response);
                }
                response.sendRedirect("error1.jsp");
            }
    
        }
    }
    
    

    selectservlet
    这里有一个特别值得注意的地方 因为我们要显示所有的学生信息
    all.jsp之中显示,但是一般是从all.jsp之中获得参数之后传回selectservlet ,所以为了显示信息首先我们要先定向到selectservlet 获得信息之后再重定向到all.jsp

    package com.zsh.servlet;
    import com.mysql.cj.xdevapi.DbDoc;
    import com.mysql.cj.xdevapi.SqlDataResult;
    import com.zsh.bean.Student;
    import com.zsh.util.DBcon;
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServlet;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Statement;
    import java.util.*;
    @WebServlet("/select")
    public class selectservlet extends HttpServlet{
        protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type", "text/html;charset=utf-8");
            String sql = "select * from student ";
            Connection conn = DBcon.getconn();
            try {
                PreparedStatement ps = null;
                ps = conn.prepareStatement(sql);
                ResultSet rs =  ps.executeQuery();
                List <Student> list = new ArrayList<Student>();/// 这里由于我们要在当前页面显示所有 的学生信息,所以就需要存下来,传递个和他当前相关联的all.jsp
                while (rs.next())
                {
                    Student stu  =new Student();
                    stu.set_id(rs.getInt("id"));
                    stu.set_name(rs.getString("name"));
                    stu.set_sex(rs.getString("sex"));
                    stu.set_age(rs.getInt("age"));
                    stu.set_grade(rs.getInt("grade"));
                    stu.set_address(rs.getString("address"));
                    list.add(stu);
                }
                request.setAttribute("list", list);///和上面一样的,传递给jsp
                DBcon.closeconn(conn,ps,rs);
            }catch (SQLException e)
            {
                e.printStackTrace();
            }
            request.getRequestDispatcher("all.jsp").forward(request, response);
        }
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            doPost(request, response);
        }
        public void destroy()
        {
            super.destroy();
        }
    }
    
    

    all.jsp
    List list = (List)request.getAttribute("list");
    上面这句话就是从selectservlet获取对应的学生信息,然后实现显示
    删除
    修改
    上面是两个超链接,一个是链接deleteservlet ,另一个是update.jsp
    为什么不需要delete.jsp呢因为我当前获得对应的id我就知道我要删除的对象
    删除他的所有参数即可、
    但是更新就需要一个界面来针对指定的页面更新

    <%--
      Created by IntelliJ IDEA.
      User: cdk13
      Date: 2021/6/8
      Time: 13:01
      To change this template use File | Settings | File Templates.
    --%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="com.zsh.bean.Student"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <body>
    
    <table id="table1" align="center" border="1" width="50%" cellpadding="6">
        <tr>
            <th colspan="6" align="center" >查询到的学生信息</th><%--th加粗, cellpadding和android padding含义一样--%>
        </tr>
        <tr>
            <th align="center" >ID</th>
            <th align="center" >学生姓名</th>
            <th align="center" >年龄</th>
            <th align="center" >性别</th>
            <th align="center" >成绩</th>
            <th align="center" >地址</th>
            <th align="center" >操     作</th>
        </tr>
        <%
            //获取图书信息集合
            List<Student> list = (List<Student>)request.getAttribute("list");
            if(list == null || list.size() < 1){
                out.print("没有数据 ");
            }else{
                for(Student s:list){
        %>
        <tr align="center">
            <td> <%= s.get_id() %></td>
            <td> <%= s.get_name()%></td>
            <td> <%= s.get_age() %></td>
            <td> <%= s.get_sex()%></td>
            <td> <%= s.get_grade()%></td>
            <td> <%= s.get_address()%></td>
            <td>
                <a href="delete?id=<%=s.get_id() %>">删除</a>
                <a href="update.jsp?id=<%=s.get_id() %>">修改</a>
            </td>
        </tr>
        <%
                }
            }
        %>
    </table>
    </body>
    </html>
    

    updateservlet
    提醒一下@WebServlet("/update") 一定要加上/

    package com.zsh.servlet;
    import com.zsh.util.DBcon;
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServlet;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.*;
    @WebServlet("/update")
    public class updateservlet extends HttpServlet{
        protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type", "text/html;charset=utf-8");
    
            String path = request.getContextPath();
            String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
            String id = request.getParameter("id");
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            String sex = request.getParameter("sex");
            String grade = request.getParameter("grade");
            String address = request.getParameter("address");
            String sql = "update student set name =?,age = ?,sex = ?,grade = ?,address=? where id= ?";
            Connection conn = DBcon.getconn();
            PreparedStatement ps = null;
            ResultSet rs = null;
            boolean flag = false;
            if (name == null||age== null ||sex == null ||grade==null ||address == null)
            {
                PrintWriter out = response.getWriter();//// 传递信息回对应界面的接口
                out.print("更新失败!");
                response.setHeader("Refresh", "1;jdbc.jsp");
            }
            try
            {
                conn = DBcon.getconn();
                ps = conn.prepareStatement(sql);
                ps.setString(1, name);
                ps.setInt(2, Integer.parseInt(age));
                ps.setString(3,sex);
                ps.setInt(4, Integer.parseInt(grade));
                ps.setString(5, address);
                ps.setInt(6, Integer.parseInt(id));
                int row = ps.executeUpdate();
                PrintWriter out = response.getWriter();
                /// List<String > error = new LinkedList<String >();
                if(row > 0){
                    out.print("更新成功!");
                    response.setHeader("Refresh", "1;jdbc.jsp");
                }
                else {
                    out.print("更新失败!");
                    response.setHeader("Refresh", "1;jdbc.jsp");
                }
            }catch (SQLException e)
            {
                e.printStackTrace();
            }
            finally {
                DBcon.closeconn(conn,ps,rs);
            }
        }
        protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
            doPost(request,response);
        }
    }
    
    

    deleteservlet
    这里主要是一点,删除最后要更新页面,所以又要定向到selectservlet,重新显示all.jsp,对应的id是之前的all.jsp之中删除 ?后面附加的id参数

    package com.zsh.servlet;
    import com.zsh.util.DBcon;
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServlet;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.*;
    @WebServlet("/delete")
    public class deleteservlet extends HttpServlet{
        protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type", "text/html;charset=utf-8");
            String sql = "delete from student where id = ?";
            Connection conn = DBcon.getconn();
            String id = request.getParameter("id");
            PreparedStatement ps = null;
            try {
               ps = conn.prepareStatement(sql);
               ps.setInt(1,Integer.parseInt(id));
               ps.executeUpdate();
            }catch(SQLException e)
            {
                e.printStackTrace();
            }finally {
                DBcon.closeconn(conn,ps,null);
            }
            response.sendRedirect("/select");/// 重定向  删除之后到达
        }
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request,response);
        }
    }
    
    

    insertservlet

    package com.zsh.servlet;
    import com.mysql.cj.xdevapi.DbDoc;
    import com.zsh.util.DBcon;
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServlet;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.*;
    @WebServlet("/insert")
    public class insertservlet extends HttpServlet{
        protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type", "text/html;charset=utf-8");
            String  id = request.getParameter("id");
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            String sex = request.getParameter("sex");
            String grade = request.getParameter("grade");
            String address = request.getParameter("address");
            Connection conn =  null;
            String sql = "insert into student(id,name,age,sex,grade,address) values(?,?,?,?,?,?)";
            try{
                conn = DBcon.getconn();
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setInt(1, Integer.parseInt(id));
                ps.setString(2, name);
                ps.setInt(3, Integer.parseInt(age));
                ps.setString(4,sex);
                ps.setInt(5, Integer.parseInt(grade));
                ps.setString(6, address);
                int row = ps.executeUpdate();
                PrintWriter out = response.getWriter();
                if(row > 0){
                    out.print("成功添加了 " + row + "条数据! ");
                    response.setHeader("Refresh", "1;jdbc.jsp");
                }
                if(ps!=null){
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(conn!=null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }catch(Exception e) {
                PrintWriter out = response.getWriter();
                out.print("图书信息添加失败  请重新输入" + e.toString());
                response.setHeader("Refresh", "1;jdbc.jsp");/// 停留一秒在转到对应页面
            }
        }
    }
    
    

    error.jsp

    <%@ page import="java.util.concurrent.TimeUnit" %>
    <%@ page import="java.io.PrintWriter" %><%--
      Created by IntelliJ IDEA.
      User: cdk13
      Date: 2021/6/7
      Time: 20:53
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>输入错误</title>
        登录失败,请重新输入!<br/>
    </head>
    <body>
    <%response.setHeader("Refresh", "1;index.jsp"); %>
    </body>
    </html>
    

    error1.jsp 用来处理基本的异常信息

    <%--
      Created by IntelliJ IDEA.
      User: cdk13
      Date: 2021/6/7
      Time: 23:12
      To change this template use File | Settings | File Templates.
    --%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="java.lang.String"%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <jsp:useBean id="x" class="com.zsh.servlet.registerservlet"></jsp:useBean>
    <jsp:setProperty property="*" name="x"/>
    <html>
    <head>
        <title>注册失败</title>
        <%
            List<String> errors = (List<String>) request.getAttribute("error");
            for (String error : errors) {
                out.println("<li>" + error + "</li>");
            }
        %>
    </head>
    <body>
    <%response.setHeader("Refresh", "1;index.jsp"); %>
    </body>
    </html>
    
    

    jdbc.jsp 添加学生信息

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <body>
    <form action="/insert" method="post">
    
        <table align="center" border="1 " width="50%" cellpadding="6">
            <tr>
                <th colspan="2" align="center" >添加学生信息</th><%--th加粗, cellpadding和android padding含义一样--%>
            </tr>
            <tr>
                <td align="center" >学生ID:</td>
                <td align="left" ><input type="text" name="id"></td>
            </tr>
            <tr>
                <td align="center" >学生名字:</td>
                <td align="left" ><input type="text" name="name"></td>
            </tr>
            <tr>
                <td align="center" >年        龄:</td>
                <td align="left" ><input type="text" name="age"></td>
            </tr>
            <tr>
                <td align="center" >性        别:</td>
                <td align="left" ><input type="text" name="sex"></td>
            </tr>
            <tr>
                <td align="center" >成        绩:</td>
                <td align="left" ><input type="text" name="grade"></td>
            </tr>
            <tr>
                <td align="center" >地        址:</td>
                <td align="left" ><input type="text" name="address"></td>
            </tr>
            <tr>
                <th colspan="2" align="center" ><input type="submit" name="submit" value="添加"></th>
            </tr>
                <a href="/select" >查询所有学生信息点击此处</a>
        </table>
    </form>
    </body>
    </html>
    

    register.jsp

    <%--
      Created by IntelliJ IDEA.
      User: cdk13
      Date: 2021/6/7
      Time: 20:19
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>注册</title>
    </head>
    <body>
    <form action="/register" method="post">
    <table align="center" border="1 " width="50%" cellpadding="6">
        <tr>
            <th colspan="2" align="center" >添加新账号</th><%--th加粗, cellpadding和android padding含义一样--%>
        </tr>
        <tr>
            <td align="center" >账号:</td>
            <td align="left" ><input type="text" name="name"></td>
        </tr>
        <tr>
            <td align="center" >密码:</td>
            <td align="left" ><input type="text" name="pwd1"></td>
        </tr>
        <tr>
            <td align="center" >再次确认密码:</td>
            <td align="left" ><input type="text" name="pwd2"></td>
        </tr>
    
        <tr>
            <th colspan="2" align="center" ><input type="submit" name="submit" value="注册"></th>
        </tr>
    </table>
        </form>
    </body>
    </html>
    
    

    success.jsp 登录成功页面

    <%--
      Created by IntelliJ IDEA.
      User: cdk13
      Date: 2021/6/7
      Time: 23:12
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>login</title>
        注册成功,请回主页面登录<br/>
    </head>
    <body>
    <%response.setHeader("Refresh", "1;index.jsp"); %>
    </body>
    </html>
    
    

    update.jsp
    关于这里呢

    > 是因为我之前从all.jsp跳转到这个页面,后面附加了参数id,那么我就知道对应删除的是哪个id的学生信息,由于我这边水平有限,正则表达式和其他方法都不太会,所以采用获得参数,也就是id=?然后截取?,也就知道对应的id,然后给id这个文本框附上对应的文本值,这样就相当于默认值,这样就能修改刚刚指定id的信息,实现jsp-》jsp-》servelt信息的共享 ~~~ <%-- Created by IntelliJ IDEA. User: cdk13 Date: 2021/6/8 Time: 17:02 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> 修改
    <table align="center" border="1 " width="50%" cellpadding="6">
        <tr>
            <th colspan="2" align="center" >修改学生信息</th><%--th加粗, cellpadding和android padding含义一样--%>
        </tr>
        <tr>
            <td align="center" >ID:</td>
            <td align="left" ><input type="text" name="id" value=<%=request.getQueryString().substring(3,request.getQueryString().length()) %>></td>
        </tr>
        <tr>
            <td align="center" >学生名字:</td>
            <td align="left" ><input type="text" name="name"></td>
        </tr>
        <tr>
            <td align="center" >年        龄:</td>
            <td align="left" ><input type="text" name="age"></td>
        </tr>
        <tr>
            <td align="center" >性        别:</td>
            <td align="left" ><input type="text" name="sex"></td>
        </tr>
        <tr>
            <td align="center" >成        绩:</td>
            <td align="left" ><input type="text" name="grade"></td>
        </tr>
        <tr>
            <td align="center" >地        址:</td>
            <td align="left" ><input type="text" name="address"></td>
        </tr>
        <tr>
            <th colspan="2" align="center" ><input type="submit" name="submit" value="修改"></th>
        </tr>
    </table>
    
    ~~~

    最后就是关于该实验的不足,由于我是第一次接触还有很多地方没理解到位,这个实验我也是临时肝了三天,基本上就没有怎么休息,因为要一步一步踩坑,避坑,主要的不足在于:1.很多异常处理没有到位,比如说所有界面的文本限制,长度限制 2.界面美化,由于时间不够,临近期末,效果只能说有个雏形 3.一些界面跳转过于敷衍,对于一个jsp实现servlet之间的通信过程有些地方没太理解,比如说可不可以响应多个servlet,所以我特意用超链接避开了,有时间的话我会继续完善的,有什么错误和意见欢迎大家指出。
    参考
    https://www.cnblogs.com/xin1006/p/11414278.html
    https://blog.csdn.net/zs20082012/article/details/79469149
    https://blog.csdn.net/weixin_45743799/article/details/103372318

    齐芒行,川锋明!
  • 相关阅读:
    Ubuntu 13.04 配置Cocos2d-x记录
    Ubuntu系列Crontab日记记录
    只是为了拾起一只笔,所以写了这些
    XhProf安装教程–详细教程
    检查.gitignore语法
    JavaScript设置右下角悬浮窗
    Codeforces Round #428 (Div. 2) B
    2017 多校5 hdu 6093 Rikka with Number
    cf 834 E. Ever-Hungry Krakozyabra
    codeforces 834 D. The Bakery
  • 原文地址:https://www.cnblogs.com/qimang-311/p/14866010.html
Copyright © 2011-2022 走看看