JSP复习笔记——第10章 连接数据库 之 JSP+JDBC留言管理程序


JSP+JDBC留言管理程序

-- 创建表
-- 用户表(登陆)、留言表

-- 删除表
DROP TABLE person ;
DROP TABLE note ;

-- 删除序列
DROP SEQUENCE note_sequ ;

-- 创建序列
CREATE SEQUENCE note_sequ ;


-- 创建person表
CREATE TABLE person
(
	id varchar(20) not null primary key ,
	name varchar(20) ,
	password varchar(20)
) ;

-- 创建留言表
CREATE TABLE note
(
	id int not null primary key , -- sequence
	title varchar(20) not null ,
	author varchar(20) not null ,
	content varchar(50) not null 
) ;

-- 插入测试数据
INSERT INTO person VALUES ('darkness','wind','zzzzzz') ;
INSERT INTO person VALUES ('sky','could','mmmmmm') ;

-- 事务提交
commit ;


--------------------------login.jsp--------------------
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		// 判断是否有错误信息,如果有则打印
		// 如果没有此段代码,则显示时会直接打印null
		if(request.getAttribute("err")!=null)
		{
	%>
			<h2><%=request.getAttribute("err")%></h2>
	<%
		}
	%>
	<form action="login_conf.jsp" method="post">
	<table width="80%">
	<tr>
		<td colspan="2">用户登陆</td>
	</tr>
	<tr>
		<td>用户名:</td>
		<td><input type="text" name="id"></td>
	</tr>
	<tr>
		<td>密&nbsp;&nbsp;码:</td>
		<td><input type="password" name="password"></td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" value="登陆">
			<input type="reset" value="重置">
		</td>
	</tr>
	</table>
	</form>
</center>
</body>
</html>


----------------login_conf.jsp----------
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%!
		String DBDRIVER			= "oracle.jdbc.driver.OracleDriver" ;
		String DBURL			= "jdbc:oracle:thin:@localhost:1521:sky" ;
		String DBUSER			= "scott" ;
		String DBPASSWORD		= "darkness" ;
		Connection conn			= null ;
		PreparedStatement pstmt	= null ;
		ResultSet rs			= null ;
	%>
	<%
		// 声明一个boolean变量,用于保存用户是否合法的状态
		boolean flag = false ;

		// 接收参数
		String id = request.getParameter("id") ;
		String password = request.getParameter("password") ;
	%>
	<%
		String sql = "SELECT name FROM person WHERE id=? and password=?" ;
		try {
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
			pstmt = conn.prepareStatement(sql) ;
			pstmt.setString(1,id) ;
			pstmt.setString(2,password) ;
			rs = pstmt.executeQuery() ;
			if (rs.next()) {
				// 用户合法
				flag = true ;
				// 将用户名保存在session之中
				session.setAttribute("uname",rs.getString(1)) ;
			} else {
				// 保存错误信息
				request.setAttribute("err","错误的用户名及密码!!!") ;
			}
			rs.close() ;
			pstmt.close() ;
			conn.close() ;
		} catch (Exception e) {
		}
	%>
	<%
		// 跳转
		if (flag) {
			// 用户合法
	%>
			<jsp:forward page="login_success.jsp"/>
	<%
		} else {
			// 用户非法
	%>
			<jsp:forward page="login.jsp"/>
	<%
		}
	%>
</center>
</body>
</html>


----------------login_success.jsp------------
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>
			<h2>登陆成功</h2>
			<h2>欢迎<font color="red" size="12">
				<%=session.getAttribute("uname")%>
			</font>光临 留言程序</h2>
			<h3><a href="list_notes.jsp">进入留言管理页面</a></h3>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>


-------------------------insert.jsp------------------
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>
	<form action="insert_do.jsp" method="post">
		<table>
			<tr>
				<td colspan="2">添加新留言</td>
			</tr>
			<tr>
				<td>标题:</td>
				<td><input type="text" name="title"></td>
			</tr>
			<tr>
				<td>作者:</td>
				<td><input type="text" name="author"></td>
			</tr>
			<tr>
				<td>内容:</td>
				<td><textarea name="content" cols="30" rows="6"></textarea></td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="添加">
					<input type="reset" value="重置">
				</td>
			</tr>
		</table>
	</form>
	<h3><a href="list_notes.jsp">回到留言列表页</a></h3>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>


--------------------------insert_do.jsp--------------------------
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		// 进行乱码处理
		request.setCharacterEncoding("GB2312") ;
	%>
	<%
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>
	<%!
		String DBDRIVER			= "oracle.jdbc.driver.OracleDriver" ;
		String DBURL			= "jdbc:oracle:thin:@localhost:1521:sky" ;
		String DBUSER			= "scott" ;
		String DBPASSWORD		= "tiger" ;
		Connection conn			= null ;
		PreparedStatement pstmt	= null ;
	%>
	<%
		// 声明一个boolean变量
		boolean flag = false ;

		// 接收参数
		String title = request.getParameter("title") ;
		String author = request.getParameter("author") ;
		String content = request.getParameter("content") ;
	%>
	<%
		// 现在note表中的主键是sequence生成
		String sql = "INSERT INTO note VALUES(note_sequ.nextVal,?,?,?)" ;
		try {
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
			pstmt = conn.prepareStatement(sql) ;
			pstmt.setString(1,title) ;
			pstmt.setString(2,author) ;
			pstmt.setString(3,content) ;
			pstmt.executeUpdate() ;
			pstmt.close() ;
			conn.close() ;
			// 如果插入成功,则肯定能执行到此段代码
			flag = true ;
		} catch(Exception e) {
		}
	%>
	<%
			response.setHeader("refresh","2;URL=list_notes.jsp") ;
			if(flag) {
	%>
				留言添加成功,两秒后跳转到留言列表页!!!<br>
				如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!
	<%
			} else {
	%>
				留言添加失败,两秒后跳转到留言列表页!!!<br>
				如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!
	<%
			}
	%>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>


---------------------------update.jsp-----------
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>	
	<%!
		String DBDRIVER			= "oracle.jdbc.driver.OracleDriver" ;
		String DBURL			= "jdbc:oracle:thin:@localhost:1521:sky" ;
		String DBUSER			= "scott" ;
		String DBPASSWORD		= "tiger" ;
		Connection conn			= null ;
		PreparedStatement pstmt	= null ;
		ResultSet rs			= null ;
	%>
	<%
		// 接收参数
		int id = 0 ;
		try {
			id = Integer.parseInt(request.getParameter("id")) ;
		} catch(Exception e) {
		}
	%>
	<%
		// 如果有内容,则修改变量i,如果没有,则根据i的值进行无内容提示
		int i = 0 ;
		String sql = "SELECT id,title,author,content FROM note WHERE id=?" ;
		try {
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
			pstmt = conn.prepareStatement(sql) ;
			// 设置查询条件
			pstmt.setInt(1,id) ;
			rs = pstmt.executeQuery() ;
	%>
	<%
			if(rs.next()) {
				i++ ;
				// 进行循环打印,打印出所有的内容,以表格形式
				// 从数据库中取出内容
				id = rs.getInt(1) ;
				String title = rs.getString(2) ;
				String author = rs.getString(3) ;
				String content = rs.getString(4) ;
	%>
	<form action="update_do.jsp" method="post">
		<table>
			<tr>
				<td colspan="2">添加新留言</td>
			</tr>
			<tr>
				<td>标题:</td>
				<td><input type="text" name="title" value="<%=title%>"></td>
			</tr>
			<tr>
				<td>作者:</td>
				<td><input type="text" name="author" value="<%=author%>"></td>
			</tr>
			<tr>
				<td>内容:</td>
				<td><textarea name="content" cols="30" rows="6"><%=content%></textarea></td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="hidden" name="id" value="<%=id%>">
					<input type="submit" value="更新">
					<input type="reset" value="重置">
				</td>
			</tr>
		</table>
	</form>
	<%
			} else {
	%>
				没有发现,要更新的内容!!<br>
				请确认要更新的留言是否存在!!<br>
	<%
			}
	%>
	<%
			rs.close() ;
			pstmt.close() ;
			conn.close() ;
		} catch(Exception e) {
		}
	%>
	<h3><a href="list_notes.jsp">回到留言列表页</a></h3>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>


-------------------------- update_do.jsp-----------------------------------------
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		// 进行乱码处理
		request.setCharacterEncoding("GB2312") ;
	%>
	<%
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>
	<%!
		String DBDRIVER			= "oracle.jdbc.driver.OracleDriver" ;
		String DBURL			= "jdbc:oracle:thin:@localhost:1521:sky" ;
		String DBUSER			= "scott" ;
		String DBPASSWORD		= "tiger" ;
		Connection conn			= null ;
		PreparedStatement pstmt	= null ;
	%>
	<%
		// 声明一个boolean变量
		boolean flag = false ;

		// 接收参数
		String title = request.getParameter("title") ;
		String author = request.getParameter("author") ;
		String content = request.getParameter("content") ;
		int id = 0 ;
		try {
			id = Integer.parseInt(request.getParameter("id")) ;
		} catch(Exception e) {
		}
	%>
	<%
		// 更新note表中的数据
		String sql = "UPDATE note set title=?,author=?,content=? WHERE id=?" ;
		try {
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
			pstmt = conn.prepareStatement(sql) ;
			pstmt.setString(1,title) ;
			pstmt.setString(2,author) ;
			pstmt.setString(3,content) ;
			pstmt.setInt(4,id);
			pstmt.executeUpdate() ;
			pstmt.close() ;
			conn.close() ;
			// 如果修改成功,则肯定能执行到此段代码
			flag = true ;
		} catch(Exception e) {
		}
	%>
	<%
			response.setHeader("refresh","2;URL=list_notes.jsp") ;
			if(flag) {
	%>
				留言修改成功,两秒后跳转到留言列表页!!!<br>
				如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!
	<%
			} else {
	%>
				留言修改失败,两秒后跳转到留言列表页!!!<br>
				如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!
	<%
			}
	%>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>


----------------------delete_do.jsp--------------------
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>	
	<%!
		String DBDRIVER			= "oracle.jdbc.driver.OracleDriver" ;
		String DBURL			= "jdbc:oracle:thin:@localhost:1521:sky" ;
		String DBUSER			= "scott" ;
		String DBPASSWORD		= "tiger" ;
		Connection conn			= null ;
		PreparedStatement pstmt	= null ;
	%>
	<%
		// 接收参数
		int id = 0 ;
		try {
			id = Integer.parseInt(request.getParameter("id")) ;
		} catch(Exception e) {
		}
	%>
	<%
		String sql = "DELETE FROM note WHERE id=?" ;
		boolean flag = false ;
		try {
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
			pstmt = conn.prepareStatement(sql) ;
			// 设置删除条件
			pstmt.setInt(1,id) ;
			pstmt.executeUpdate() ;			
			pstmt.close() ;
			conn.close() ;
			flag = true ;
		} catch(Exception e) {
		}
	%>
	<%
			response.setHeader("refresh","2;URL=list_notes.jsp") ;
			if(flag) {
	%>
				留言删除成功,两秒后跳转到留言列表页!!!<br>
				如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!
	<%
			} else {
	%>
				留言删除失败,两秒后跳转到留言列表页!!!<br>
				如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!
	<%
			}
	%>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>


-----------------list_notes.jsp-------------------------------------
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
	<title>JSP+JDBC 留言管理程序——登陆</title>
</head>
<body>
<center>
	<h1>留言管理范例 —— JSP + JDBC实现</h1>
	<hr>
	<br>
	<%
		// 编码转换
		request.setCharacterEncoding("GB2312") ;
		if(session.getAttribute("uname")!=null) {
			// 用户已登陆
	%>
	<%!
		String DBDRIVER			= "oracle.jdbc.driver.OracleDriver" ;
		String DBURL			= "jdbc:oracle:thin:@localhost:1521:sky" ;
		String DBUSER			= "scott" ;
		String DBPASSWORD		= "tiger" ;
		Connection conn			= null ;
		PreparedStatement pstmt	= null ;
		ResultSet rs			= null ;
	%>
	<%
		// 如果有内容,则修改变量i,如果没有,则根据i的值进行无内容提示
		int i = 0 ;
		String sql = null; 
		String keyword = request.getParameter("keyword") ;
		// out.println(keyword) ;
		if(keyword==null) {
			// 没有任何查询条件
			sql = "SELECT id,title,author,content FROM note" ;
		} else {
			// 有查询条件
			sql = "SELECT id,title,author,content FROM note WHERE title like ? or author like ? or content like ?" ;
		}
		
		try {
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
			pstmt = conn.prepareStatement(sql) ;

			// 如果存在查询内容,则需要设置查询条件
			if(keyword!=null) {
				// 存在查询条件
				pstmt.setString(1,"%"+keyword+"%") ;
				pstmt.setString(2,"%"+keyword+"%") ;
				pstmt.setString(3,"%"+keyword+"%") ;
			}

			rs = pstmt.executeQuery() ;
	%>
<form action="list_notes.jsp" method="POST">
	请输入查询内容:<input type="text" name="keyword">
	<input type="submit" value="查询">
</form>
</h3><a href="insert.jsp">添加新留言</a></h3>
<table width="80%" border="1">
	<tr>
		<td>留言ID</td>
		<td>标题</td>
		<td>作者</td>
		<td>内容</td>
		<td>删除</td>
	</tr>
	<%
			while(rs.next()) {
				i++ ;
				// 进行循环打印,打印出所有的内容,以表格形式
				// 从数据库中取出内容
				int id = rs.getInt(1) ;
				String title = rs.getString(2) ;
				String author = rs.getString(3) ;
				String content = rs.getString(4) ;

				if(keyword!=null) {
					// 需要将数据返红
					title = title.replaceAll(keyword,"<font color=\"red\">"+keyword+"</font>") ;
					author = author.replaceAll(keyword,"<font color=\"red\">"+keyword+"</font>") ;
					content = content.replaceAll(keyword,"<font color=\"red\">"+keyword+"</font>") ;
				}
	%>
				<tr>
					<td><%=id%></td>
					<td><a href="update.jsp?id=<%=id%>"><%=title%></a></td>
					<td><%=author%></td>
					<td><%=content%></td>
					<td><a href="delete_do.jsp?id=<%=id%>">删除</a></td>
				</tr>
	<%
			}
			// 判断i的值是否改变,如果改变,则表示有内容,反之,无内容
			if(i==0) {
				// 进行提示
	%>
				<tr>
					<td colspan="5">没有任何内容!!!</td>
				</tr>
	<%
			}
	%>
</table>
	<%
			rs.close() ;
			pstmt.close() ;
			conn.close() ;
		}
		catch(Exception e) {
		}
	%>
	<%
		} else {
			// 用户未登陆,提示用户登陆,并跳转
			response.setHeader("refresh","2;URL=login.jsp") ;
	%>
			您还未登陆,请先登陆!!!<br>
			两秒后自动跳转到登陆窗口!!!<br>
			如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
	<%
		}
	%>
</center>
</body>
</html>



你可能感兴趣的:(html,oracle,sql,jsp,jdbc)