Connection cn=DriverManager.getConnection("jdbc:odbc:bookDSN");
String str="INSERT INTO booked VALUES('"+name+"','"+email+"','"+instr+"')";
Statement st=cn.createStatement();
st.executeUpdate(str);
out.print("<P><center><h1>已经成功存入数据<h1></center>");
} %>
<p></p>
<center><a href="bookstore.jsp" title="返回主页">返回主页</a></center>
</body>
</html>
7.3.9 实例小结
网上书店为我们模拟了一个简单的JDBC 电子商务应用的雏形 因为 JSP 是使用 Java 编写程序 JSP 代码同样具有 Java 代码的特点和优势 从网上书店实现的过程中 可以看 出使用JSP 作为 JDBC Web 应用的实现手段 大大地扩展了 Java 在 Internet 方面的应用 为系统开发人员提供了一种新的选择
图7-24 留言簿
7.4
JSP 之 JDBC 实例二 留言簿
留言簿在Internet 中很常见 下面 我们使用 JDBC 和 JSP 技术 在中文版 Window ME 下使用JRun 3.0 服务器实现一个留言簿 我们要实现的留言簿主要具有留言 查看留言和 删除留言等三个功能 这三个功能分别由leaveword.jsp skimdata.jsp 和 deleteword.jsp 实现
主页由wordhome.jsp 实现 各个独立的功能通过主页有机联系在一起
7.4.1 主页 wordhome.jsp
留言簿主页实际效果如图7-24 所示
在该窗口中 单击 查看留言 链接可调用 skimdata.jsp 查看数据库中保存的所有留 言 几个文本框用于让客户留言 客户必须输入各项的详细内容 才可将留言保存到服务 器数据库中 单击 我要留言 按钮 将调用leaveword.jsp 保存留言
wordhome.jsp 源代码如下 例程 7-16 wordhome.jsp
<html>
<head>
<title>留言广场</title>
</head>
<body>
<center>
<%@ page contentType="text/html;charset=gb2312" %>
<h3>欢迎光临阿当留言广场 感谢你留下建议或问题</h3>
<table width="100%" border="0" cellpadding="0">
<tr>
<td align="right"><a href="wordhome.jsp" title="留言广场">留言广场</a></td>
<td align="center"> <---> </td>
<td align="left"><a href="skimdata.jsp" title="查看留言">查看留言</a></td>
</tr>
</table>
<hr>
<form name="buyform" action="leaveword.jsp" method="POST">
<table width="100%" border="0" cellpadding="0">
<tr>
<td align="right"><b>姓名 </b></td>
<td align="left"><input type="text" name="cName" SIZE="20" value="" required=""></td>
<td align="right"><B>Email 地址 </B> </td>
<td align="left"><input type="text" name="cEmail" SIZE="20" value=""></td>
</tr>
<tr><td align="right"><b>主题 </b></td><td colspan="3"><input type="text" name="cTopic"
SIZE="40" value=""></td></tr>
<tr><td colspan="4" align="center"><textarea name="cWords" rows="10" cols="80%"></textarea>
</td></tr>
</table>
<input type="submit" name="action" value="我要留言">
-</form></center>
</body>
</html>
7.4.2 保存留言 leaveword.jsp
单击 我要留言 按钮 将调用leaveword.jsp 保存留言 客户在主页中输入的留言信 息通过request 对象传递给 leaveword.jsp 在正确保存了留言后 将在浏览器中显示已保存 的数据和相关的提示信息 需要特别提醒读者的是多次提到中文处理问题 为了从request 对象获得正确的参数和正确地从数据库获得查询结果 一定不要在 leaveword.jsp 中使用
<%@ page contentType="text/html;charset=gb2312" %> 在 JRun 服务器下 当你在浏览
我们提供的源文件时 可通过选择浏览器中的 查看 编码 简体中文 便可
看到正常的页面
leaveword.jsp 源代码如下 例程 7-17 leaveword.jsp
<html>
<head><title>保存留言</title></head>
<body>
<center><h3>感谢你的留言</h3></center>
<hr>
<h4>你留下的信息如下 </h4>
<%@ page import="java.sql.*" %>
<%
String getDate=new java.util.Date().toString();
String getName=request.getParameter("cName");
String getEmail=request.getParameter("cEmail");
String getWords=request.getParameter("cWords");
String getTopic=request.getParameter("cTopic");
if(getName.length()<1){
out.print("请输入姓名");
}else{
if(getEmail.length()<3){
out.print("请输入正确的 Email");
} else{
if(getTopic.length()<1){
out.print("请输入主题");
} else{
if(getWords.length()<1){
out.print("没有留言");
} else{
out.print("<table>");
out.print("<tr><td align=\"right\">姓名 </td><td>");
out.print(getName);
out.print("</td></tr>");
out.print("<tr><td align=\"right\">Email </td><td>");
out.print(getEmail);
out.print("</td></tr>");
out.print("<tr><td align=\"right\">主题 </td><td>");
out.print(getTopic);
out.print("</td></tr>");
out.print("<tr><td valign=\"top\" align=\"right\">留言 </td><td>");
out.print(getWords);
out.print("</td></tr>");
out.print("<tr><td align=\"right\">日期 </td><td>");
out.print(getDate);
out.print("</td></tr></table>");
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:wordsDSN");
String str="INSERT INTO words VALUES('"+getName+"','"+getDate+"','"+getEmail+"', '"+getTopic+"','"+getWords+"')";
Statement st=cn.createStatement();
st.executeUpdate(str);
st.close();
cn.close();
out.print("<center><h3>恭喜你 已经成功保存留言<h3></center>");
}
catch(Exception e){
out.print(e.getMessage());
} }}}}
%>
<hr>
<table width="100%" border="0" cellpadding="0" align="center">
<tr>
<td align="right"><a href="wordhome.jsp" title="留言广场">留言广场</a></td>
<td align="center"> <---> </td>
-<td align="left"><a href="skimdata.jsp" title="查看留言">查看留言</a></td>
</tr></table>
</body>
</html>
运行效果如图7-25 所示
图7-25 保存留言示例
7.4.3 查看留言 skimdata.jsp
为简单起见 也方便读者学习 我们没有将 skimdata.jsp 做得很复杂 只是简单地将 数据库中保存的所有留言读出来 然后在浏览器中显示 在浏览留言时 针对每一个客户 的留言提供一个 删除 按钮 该按钮用于调用deleteword.jsp 从数据库中删除对应的留
言记录
图7-26 显示当前留言簿中的部分内容
图7-26 留言簿查看示例
skimdata.jsp 源代码如下 例程 7-18 leaveword.jsp
<html>
<head>
<title>查看留言</title>
</head>
<body>
<h2>留言广场留言</h2>
<hr>
<%@ page import="java.sql.*,java.util.Vector" %>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:wordsDSN");
String str="SELECT * FROM words";
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery(str);
String name,date,email,topic,words;
while(rs.next()){
name=rs.getString("name");
date=rs.getString("wdate");
email=rs.getString("email");
topic=rs.getString("topic");
words=rs.getString("words");
out.print("<table>");
out.print("<tr><td align=\"right\"><b>主题 </b></td><td colspan=\"3\" ><b>");
out.print(topic);
out.print("</b></td></tr>");
out.print("<tr><td align=\"right\">姓名 </td><td colspan=\"3\" >");
out.print(name);
out.print("</td></tr>");
out.print("<tr><td align=\"right\">Email </td><td colspan=\"3\" >");
out.print(email);
out.print("</td></tr>");
out.print("<tr><td valign=\"top\" align=\"right\">留言 </td><td colspan=\"3\" >");
out.print(words);
out.print("</td></tr>");
out.print("<tr><td align=\"right\">日期 </td><td>");
out.print(date);
-out.print("</td><form name=\"deleteform\" action=\"deleteword.jsp\" method=\"POST\">");
out.print("<td ><input type=\"hidden\" name=\"deletePara\" value=\""+date+"\"></td>");
out.print("<td align=\"right\"><input type=\"submit\" name=\"action\" value=\"删除\">");
out.print("</td></tr></form></table>");
out.print("<hr>");
} st.close();
cn.close();
}
catch(Exception e){
out.print(e.getMessage());
}
%>
</body>
</html>
7.4.4 删除留言 deleteword.jsp
删除留言利用客户保存留言时日期的唯一性 因为日期计算到秒 作为参照 在查看 留言时 如果单击相应的 删除 按钮 对应留言的日期通 过 request 对象传递给 deleteword.jsp 这里同样需要注意中文处理问题 当成功删除了相应留言后 客户可以看 到 浏 览 器 中 的 内 容 及 时 被 更 新 看 不 到 已 删 除 的 内 容 实 现 及 时 更 新 实 际 上 是 在 deleteword.jsp 中使用 response 对象将客户重新引导到查看留言页面 源代码中的语句
response.sendRedirect("http://localhost:8100/wordboards/skimdata.jsp");
用于完成这一功能
deleteword.jsp 源代码如下 例程 7-19 deleteword.jsp
<html>
<head>
<title>删除留言</title>
</head>
<body>
<%@ page import="java.sql.*" %>
<%
String para=request.getParameter("deletePara");
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:wordsDSN");
String str="DELETE FROM words WHERE wdate like '"+para+"'";
Statement st=cn.createStatement();
st.executeUpdate(str);
st.close();
cn.close();
response.sendRedirect("http://localhost:8100/wordboards/skimdata.jsp");
}catch(Exception e){
out.print(e.getMessage());
} %>
</body>
</html>
7.4.5 实例小结
留言簿在Internet 的 Web 站点中非常常见 我们使用了 JSP 和 JDBC 来实现该留言簿 为读者提供了一种实现纯Java Web 数据库应用的模型 该留言簿是非常简单的 但从中可 以看到使用JSP 作为 JDBC Web 应用开发是一种非常好的手段