javaweb实验:JSP+JDBC综合实训_数据库记录的增加、查询
JSP是一种基于Java的Web编程语言,可以生成动态的网页内容。JDBC是Java数据库连接的缩写,是一种用于访问数据库的标准API。通过使用JSP和JDBC,可以实现在网页上对数据库的操作,如增加、查询、修改和删除数据。本实验的目的是掌握使用JSP和JDBC完成数据库操作的基本方法,包括建立数据库连接、执行SQL语句、处理结果集等。本文中使用的数据库是MySQL,使用的可视化工具是navica
目录
前言
JSP是一种基于Java的Web编程语言,可以生成动态的网页内容。JDBC是Java数据库连接的缩写,是一种用于访问数据库的标准API。通过使用JSP和JDBC,可以实现在网页上对数据库的操作,如增加、查询、修改和删除数据。本实验的目的是掌握使用JSP和JDBC完成数据库操作的基本方法,包括建立数据库连接、执行SQL语句、处理结果集等。
本文中使用的数据库是MySQL,使用的可视化工具是navicat for MySQL,使用的java编译器是idea
实验目的
- 熟悉使用 JDBC 访问数据库的一般流程;
- 理解使用JSP的核心知识和JDBC API进行数据库中数据的添加和查询操作
的原理,学会相关编程方法; - 能够根据贯穿项目案例的实际应用需要,综合运用 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"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>登录程序之表单页面</title>
</head>
<body>
<%
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]; //获取密码
}
}
}
%>
<center>
<h1>登录操作</h1>
<hr>
<form action="login_check.jsp" method="post">
<table border="1">
<tr>
<td colspan="2">用户登录</td>
</tr>
<tr>
<td>登录ID:</td>
<td><input type="text" name="id" value="<%=userId%>"></td>
</tr>
<tr>
<td>登录密码:</td>
<td><input type="password" name="password" value="<%=password%>"></td>
</tr>
<tr>
<td colspan="2">
<center>
<input type="submit" value="登录">
<input type="reset" value="重置">
<input type="checkbox" name="remenber" checked>记住我
</center>
</td>
</tr>
</table>
</form>
如果尚未注册,请先点击<a href="register.jsp">这里</a> 进行注册!<br><br>
如果您是管理员,可点击<a href="mlogin.jsp">这里</a>进入!
</center>
</body>
下面是登录检测功能,用来检测是否正确登录
登录检测
<%@ 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"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>登录程序之验证页面</title>
</head>
<body>
<%
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<cookies.length; i++){
if("Cookie2019".equals(cookies[i].getName())){
break;
}
}
if(i<cookies.length){
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("错误!");
}
%>
</body>
下面是登录成功的页面
登录成功
<%@ 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"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>登录程序之登录成功页面</title>
</head>
<body>
<center>
<h2>登录成功!欢迎[<%=session.getAttribute("username")%>]访问新闻管理系统!</h2>
<hr>
<a href="Insert.jsp">增加新闻</a>
<a href="logout.jsp">安全退出</a>
<%
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();
%>
<table align="center" border="1" cellspacing="0">
<tr>
<th>标题</th>
<th>作者</th>
<th>日期</th>
<th>热度</th>
<th>操作</th>
</tr>
<%
while(rs.next()) {
%>
<tr>
<td><%=rs.getObject("标题")%></td>
<td><%=rs.getObject("作者")%></td>
<td><%=rs.getObject("日期")%></td>
<td><%=rs.getObject("热度")%></td>
<td>
<a href="">查询详细</a>
<a href="">修改</a>
<a href="">删除</a>
</td>
</tr>
<%
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
isError = true;
}
%>
</table>
</center>
</body>
<script>
<%
if (isError) {
%>
alert("新闻标题为空或该新闻标题已存在!");
window.location.href = "login_success.jsp";
<%
}
%>
</script>
</html>
下面是登录失败的页面
登录失败
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>登录程序之登录成功页面</title>
</head>
<body>
<center>
<h1>登录操作</h1>
<hr>
<h2>用户ID或密码错误!请重新<a href="logout.jsp">登录</a></h2>
</center>
</body>
实现用户注册功能
注册表单
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>注册程序之表单页面</title>
</head>
<body>
<%
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]; //获取密码
}
}
}
%>
<center>
<h1>注册操作</h1>
<hr>
<form action="register_check.jsp" method="post">
<table border="1">
<tr>
<td colspan="2">用户注册</td>
</tr>
<tr>
<td>登录ID:</td>
<td><input type="text" name="id" value="<%=userId%>"></td>
</tr>
<tr>
<td>真实姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>性别:</td>
<td>
<label><input type="radio" name="gender" value="男">男</label>
<label><input type="radio" name="gender" value="女">女</label>
</td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input type="email" name="email"></td>
</tr>
<tr>
<td>登录密码:</td>
<td><input type="password" name="password1" value="<%=password%>"></td>
</tr>
<tr>
<td>确认密码:</td>
<td><input type="password" name="password2"></td>
</tr>
<tr>
<td colspan="2">
<center>
<input type="submit" value="注册">
<input type="reset" value="重置">
<input type="button" value="返回" onclick="window.location.href = 'login.jsp'">
</center>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
注册验证及操作数据库
<%@ 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" %>
<html>
<head>
<title>注册程序之验证页面</title>
</head>
<body>
<%
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("数据添加失败!");
}
%>
</body>
</html>
注册成功
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>注册程序之成功页面</title>
</head>
<body>
<center>
<%! int count = 5; %>
[<%=session.getAttribute("name")%>] 恭喜您--注册成功!<br>
<%=count%>秒后自动跳转界面
<%
response.setHeader("refresh","1");
// response.setHeader("refresh","5;URL=register.jsp");
if(count == 0) {
response.sendRedirect("login.jsp");
session.removeAttribute("text");
session.removeAttribute("name");
count = 6;
}
count--;
%>
</center>
</body>
</html>
注册失败
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>注册程序之失败页面</title>
</head>
<body>
<center>
<h1>注册操作</h1>
<hr>
<h2>
<%if (session.getAttribute("text").equals("用户ID已存在!")) {%>
错误:<%=session.getAttribute("text")%>请<a href="login.jsp">登录</a>
<%
}else {
%>
错误:<%=session.getAttribute("text")%>请重新<a href="register.jsp">注册</a></h2>
<%
}
session.removeAttribute("text");
session.removeAttribute("name");
%>
</center>
</body>
</html>
新闻管理功能
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<%@ page
import="java.sql.*"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>显示所有新闻</title>
</head>
<body>
<table align="center" border="0" width="750px" cellspacing="0">
<tr>
<td align="center" style="font-family:'黑体'; font-size:28px;">登录成功!欢迎[<%=session.getAttribute("username")%>]访问新闻管理系统!</td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr style="font-family:'宋体'; font-size:24px;">
<td align="right"><a href="javascript:void(0)"><b>增加新闻</b></a> <a href="logout.jsp">安全退出</a></td>
</tr>
</table>
<table align="center" border="1" width="750px" cellspacing="0">
<tr>
<th width="320px">标题</th>
<th width="120px">作者</th>
<th width="110px">日期</th>
<th width="50px">热度</th>
<th width="150px">操作</th>
</tr>
<%
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()){
%>
<tr>
<td><%=rs.getString("title") %></td>
<td><%=rs.getString("author") %></td>
<%-- <td><%=rs.getString("content") %></td> --%>
<td><%=rs.getDate("enterdate") %></td>
<td><%=rs.getInt("hot") %></td>
<td>
<a href="javascript:void(0)">查询详情</a>
<a href="javascript:void(0)">修改</a>
<a href="javascript:void(0)">删除</a>
</td>
</tr>
<%
}
rs.close();
stmt.close();
conn.close();
%>
</table>
</body>
</html>
</body>
</html>
总结
本 次 实 验 是 使 用 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 开 发 方 法 , 可 以 简化 编 程 和 提 高 效 率 。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)