javaweb实验:JSP+JDBC综合实训

目录

  • 前言
  • 实验目的
  • 实验原理
  • 实验内容
  • 实验过程
    • 流程图
    • 建立数据库和用户表
    • 实现用户登录功能
      • 连接数据库
      • 登录
      • 登录检测
      • 登录成功
      • 登录失败
      • 实现用户注册功能
        • 注册表单
        • 注册验证及操作数据库
        • 注册成功
        • 注册失败
        • 新闻管理功能
        • 总结

          前言

          JSP是一种基于Java的Web编程语言,可以生成动态的网页内容。JDBC是Java数据库连接的缩写,是一种用于访问数据库的标准API。通过使用JSP和JDBC,可以实现在网页上对数据库的操作,如增加、查询、修改和删除数据。本实验的目的是掌握使用JSP和JDBC完成数据库操作的基本方法,包括建立数据库连接、执行SQL语句、处理结果集等。

          本文中使用的数据库是MySQL,使用的可视化工具是navicat for MySQL,使用的java编译器是idea

          实验目的

          1. 熟悉使用 JDBC 访问数据库的一般流程;
          2. 理解使用JSP的核心知识和JDBC API进行数据库中数据的添加和查询操作

            的原理,学会相关编程方法;

          3. 能够根据贯穿项目案例的实际应用需要,综合运用 JSP+JDBC 相关知识和

            技术,完成数据库的连接、增加、查询。

          实验原理

          数据库应用是 Web 应用开发的一个重要应用。Web 应用程序访问数据库的

          步骤是:①加载数据库驱动程序;②建立连接对象;③创建语句对象;④获得结

          果集;⑤关闭有关连接对象。

          重要代码如下:

          Class.forName(DBDRIVER); //加载驱动 Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS); //建立连接对象 //使用 PreparedStatement 接口运行 SQL 语句 PreparedStatement pstmt=conn.prepareStatement(sql); ResultSet rs=pstmt.executeQuery(); //执行查询,返回结果集 //以下语句关闭记录集等对象,注意顺序。 rs.close(); pstmt.close(); conn.close();

          实验内容

          (一)编程实现用户的登录与注册功能。

          【步骤 1】建立数据库 db_news2019 和用户表 t_user。

          【步骤 2】实现用户登录功能。

          【步骤 3】实现用户注册功能。

          (二)将用户登录与注册功能代码与新闻管理功能代码进行集成在一起。

          实验过程

          流程图

          建立数据库和用户表

          数据库代码

          DROP TABLE IF EXISTS `t_user`;
          CREATE TABLE `t_user` (
            `uid` varchar(16) NOT NULL,
            `uname` varchar(20) NOT NULL,
            `upassword` varchar(20) NOT NULL,
            `usex` varchar(10) NOT NULL,
            `uemail` varchar(20) NOT NULL,
            `uregdate` date NOT NULL,
            PRIMARY KEY (`uid`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
          INSERT INTO `t_user` VALUES ('', '', '', '', '', '');#这里填需要的填入的信息
          

          实现用户登录功能

          代码如下:

          这里是一个java代码,用来实现jdbc连接数据库的功能

          连接数据库

          import java.awt.*;
          import java.sql.*;
          public class JDBC { private Connection conn = null;
              private String url = "jdbc:mysql://localhost:3306/db_news2019";//数据库名称
              private String user = "root";//用户名
              private String password = "root";//密码
              public Connection getConnection() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver");
                  conn = DriverManager.getConnection(url, user, password);
                  return conn;
              }
              }
          

          下面是登录功能

          登录

          <%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>登录程序之表单页面<%
          	String userId = "";
          	String password = "";
          	Cookie[] cookies = request.getCookies();
          	if(cookies != null){for(int i=0; iif (cookies[i].getName().equals("Cookie2019")) { //如果cookie对象的名称为Cookie2019
          				userId = cookies[i].getValue().split("#")[0];  //获取用户名
          				password = cookies[i].getValue().split("#")[1];  //获取密码
          			}
          		}
          	}
          %>

          登录操作


          用户登录
          登录ID:
          登录密码:
              记住我
          如果尚未注册,请先点击这里 进行注册!

          如果您是管理员,可点击这里进入!

          下面是登录检测功能,用来检测是否正确登录

          登录检测

          <%@ page import="java.sql.Connection" %><%@ page import="java.sql.PreparedStatement" %><%@ page import="java.sql.ResultSet" %><%@ page import="MysqlData.JDBC" %><%@page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>登录程序之验证页面<%
              try { //获取用户名和密码
                  request.setCharacterEncoding("UTF-8");
                  String id= request.getParameter("id");
                  String password= request.getParameter("password");
                  String remenber = request.getParameter("remenber");
                  //访问数据库,查询用户名和密码
                  Connection conn= new JDBC().getConnection();
                  //创建语句容器
                  PreparedStatement stmt=conn.prepareStatement("select * from t_user where uid=? and upassword=?");
                  stmt.setString(1,id);
                  stmt.setString(2,password);
                  ResultSet rs=stmt.executeQuery();
                  //(rs.next())
                  //"admin".equals(name)&&"123456".equals(pwd)
                  String name = "";
                  Cookie[] cookies;
                  if(rs.next()){ name = rs.getString("uname");
                      cookies = request.getCookies();
                      int i;
                      boolean cookies_flag = false; //表示是否创建Cookie
                      if(cookies != null){ for(i=0; i if("Cookie2019".equals(cookies[i].getName())){ break;
                              }
                          }
                          if(i cookies_flag = false;
                          }else{ cookies_flag = true;
                          }
                      }else{ cookies_flag = true;
                      }
                      Cookie cookie;
                      if(remenber != null){ if(cookies_flag){ cookie = new Cookie("Cookie2019", id+"#"+password);
                              cookie.setMaxAge(10);
                              response.addCookie(cookie);
                          }
                      }else{ if(!cookies_flag){ cookie = new Cookie("Cookie2019", id+"#"+password);
                              cookie.setMaxAge(0);
                              response.addCookie(cookie);
                          }
                      }
                      rs.close();
                      stmt.close();
                      conn.close();
                      session.setAttribute("username", name);
                      session.setMaxInactiveInterval(60);
                      response.sendRedirect("login_success.jsp");
                  }else{ rs.close();
                      stmt.close();
                      conn.close();
                      response.sendRedirect("login_failure.jsp");
                  }
              }catch (Exception e) { out.print("错误!");
              }
          %>

          下面是登录成功的页面

          登录成功

          <%@ page import="java.sql.Connection" %><%@ page import="java.sql.PreparedStatement" %><%@ page import="java.sql.ResultSet" %><%@ page import="MysqlData.JDBC" %><%@ page import="MysqlData.JDBC" %><%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>登录程序之登录成功页面

          登录成功!欢迎[<%=session.getAttribute("username")%>]访问新闻管理系统!


          增加新闻   安全退出<% request.setCharacterEncoding("UTF-8"); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; String title = request.getParameter("标题"); String auther = request.getParameter("作者"); String date = request.getParameter("日期"); String heat = request.getParameter("热度"); int result = 0; boolean isError = false; try {conn= new JDBC().getConnection(); if (title != null) {stmt = conn.prepareStatement("insert t_news values (?,?,?,?)"); stmt.setObject(1, title); stmt.setObject(2, auther); stmt.setObject(3, date); stmt.setObject(4, Integer.parseInt(heat)); result = stmt.executeUpdate(); } //创建语句容器 stmt=conn.prepareStatement("select * from t_news"); rs=stmt.executeQuery(); %><% while(rs.next()) {%><% } rs.close(); stmt.close(); conn.close(); } catch (Exception e) {isError = true; } %>
          标题作者日期热度操作
          <%=rs.getObject("标题")%><%=rs.getObject("作者")%><%=rs.getObject("日期")%><%=rs.getObject("热度")%>查询详细  修改  删除

          下面是登录失败的页面

          登录失败

          <%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>登录程序之登录成功页面

          登录操作


          用户ID或密码错误!请重新登录

          实现用户注册功能

          注册表单

          <%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>  注册程序之表单页面<%
              String userId = "";
              String password = "";
              Cookie[] cookies = request.getCookies();
              if (cookies != null) { for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("Cookie2019")) { //如果cookie对象的名称为Cookie2019
                          userId = cookies[i].getValue().split("#")[0];  //获取用户名
                          password = cookies[i].getValue().split("#")[1];  //获取密码
                      }
                  }
              }
          %>

          注册操作


          用户注册
          登录ID:
          真实姓名:
          性别:
          E-Mail:
          登录密码:
          确认密码:
             

          注册验证及操作数据库

          <%@ page import="java.sql.Connection" %><%@ page import="java.sql.PreparedStatement" %><%@ page import="java.sql.ResultSet" %><%@ page import="java.sql.DriverManager" %><%@ page import="MysqlData.JDBC" %><%@ page contentType="text/html;charset=utf-8" language="java" %> 注册程序之验证页面<%
              try { String text = "";
                  request.setCharacterEncoding("utf-8");
                  String id = request.getParameter("id");
                  String password1 = request.getParameter("password1");
                  String password2 = request.getParameter("password2");
                  String name = request.getParameter("name");
                  String sex = request.getParameter("gender");
                  String email = request.getParameter("email");
                  Connection conn= new JDBC().getConnection();
                  //创建语句容器
                  String sql1 = "select * from t_user where uid=?";
                  PreparedStatement stmt1 = conn.prepareStatement(sql1);
                  stmt1.setObject(1,id);
                  ResultSet rs = stmt1.executeQuery();
                  if ("".equals(password1) || "".equals(password2) || "".equals(id) || "".equals(name)) { text = "注册信息不完整!";
                      response.sendRedirect("reg_failure.jsp");
                  }else if(rs.next()) { text = "用户ID已存在!";
                      response.sendRedirect("reg_failure.jsp");
                  } else if (!password1.equals(password2)) { text = "两次输入密码不一致!";
                      response.sendRedirect("reg_failure.jsp");
                  } else { String sql2 = "insert t_user values (?,?,?,?,?,?)";
                      PreparedStatement stmt2 = conn.prepareStatement(sql2);
                      stmt2.setObject(1,id);
                      stmt2.setObject(2,name);
                      stmt2.setObject(3,password1);
                      stmt2.setObject(4,sex);
                      stmt2.setObject(5,email);
                      stmt2.setObject(6,new java.util.Date());
                      int result = stmt2.executeUpdate();
                      response.sendRedirect("reg_success.jsp");
                      stmt2.close();
                  }
                  session.setAttribute("text",text);
                  session.setAttribute("name",name);
                  rs.close();
                  stmt1.close();
                  conn.close();
                  } catch (Exception e) { out.print("数据添加失败!");
                  }
          %>

          注册成功

          <%@ page contentType="text/html;charset=utf-8" language="java" %> 注册程序之成功页面
          <%! int count = 5; %>[<%=session.getAttribute("name")%>] 恭喜您--注册成功!
          <%=count%>秒后自动跳转界面 <% response.setHeader("refresh","1"); // response.setHeader("refresh","5;URL=https://blog.csdn.net/m0_72471315/article/details/register.jsp"); if(count == 0) { response.sendRedirect("https://blog.csdn.net/m0_72471315/article/details/login.jsp"); session.removeAttribute("text"); session.removeAttribute("name"); count = 6; } count--; %>

          注册失败

          <%@ page contentType="text/html;charset=utf-8" language="java" %> 注册程序之失败页面

          注册操作


          <%if (session.getAttribute("text").equals("用户ID已存在!")) {%> 错误:<%=session.getAttribute("text")%>请登录 <% }else { %> 错误:<%=session.getAttribute("text")%>请重新注册

          <% } session.removeAttribute("text"); session.removeAttribute("name"); %>

          新闻管理功能

          <%@ page contentType="text/html;charset=utf-8" language="java" %> Title<%@ page language="java" contentType="text/html;charset=utf-8"
                   pageEncoding="utf-8"%><%@ page
                  import="java.sql.*"
          %>  显示所有新闻
          登录成功!欢迎[<%=session.getAttribute("username")%>]访问新闻管理系统!

          增加新闻  安全退出
          <% Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/db_news2019"; String username = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url,username,password); Statement stmt = conn.createStatement(); String sql = "select * from t_news"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ %> <%-- --%> <% } rs.close(); stmt.close(); conn.close(); %>
          标题 作者 日期 热度 操作
          <%=rs.getString("title") %> <%=rs.getString("author") %><%=rs.getString("content") %><%=rs.getDate("enterdate") %> <%=rs.getInt("hot") %> 查询详情 修改 删除

          总结

          本 次 实 验 是 使 用 J S P + J D B C 技 术 开 发 一 个 简 单 的 We b 应 用 , 实现 对 数 据 库 中 的 记 录 进 行 增 加 和 查 询 的 功 能 。实 验 过 程 中 ,我学 习 了 如 何 使 用 J S P 页 面 和 J ava B e a n 组 件 进 行 数 据 交 互 ,如 何使 用 J D B C A P I 操 作 数 据 库 ,以 及 如 何 处 理 异 常 和 错 误 。实 验 的结 论 是 , J S P + J D B C 技 术 是 一 种 有 效 的 We b 开 发 方 法 , 可 以 简化 编 程 和 提 高 效 率 。