📄 第7章(2).txt
字号:
负责公共留言的beans
PublicWord.java:
package tom.jiafei;
import java.sql.*;
public class PublicWord
{String logname="",
message="";
String backNews;//用来留言是否成功。
Connection con;
Statement sql;
ResultSet rs;
public PublicWord()
{ //加载桥接器:
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
}
//设置属性值、获取属性值的方法:
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{return logname;
}
public String getMessage()
{return message;
}
public void setMessage(String m)
{ message=m;
}
public String getBackNews()
{return backNews;
}
public void setBackNews(String s)
{backNews=s;
}
//添加记录到数据库的wordpad表:
public void addItem()
{try{
con=DriverManager.getConnection("jdbc:odbc:friend","","");
sql=con.createStatement();
String s="'"+logname+"'"+","+"'"+message+"'";
String condition="INSERT INTO wordpad VALUES"+"("+s+")";
sql.executeUpdate(condition);
backNews="添加成功了";
con.close();
}
catch(SQLException e)
{//由于表wordpad和member表通过字段logname做了关联,所以如果输入的logname
//不对,就会出现异常
backNews="你没有登录,不能留言";
}
}
}
负责私人留言的 beans
SecretWord.java:
package tom.jiafei;
import java.sql.*;
public class SecretWord
{String logname="",
time="", //留言时间。
message="";
String backNews;//返回留言是否成功的信息。
Connection con;
Statement sql;
ResultSet rs;
public SecretWord()
{ //加载桥接器:
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
}
//设置属性值、获取属性值的方法:
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{return logname;
}
public String getMessage()
{return message;
}
public void setMessage(String m)
{ message=m;
}
public String getBackNews()
{return backNews;
}
public void setBackNews(String s)
{backNews=s;
}
public void setTime(String t)
{time=t;
}
public String getTime()
{return time;
}
//添加记录到数据库的wordpad表:
//我们要求留言的时间是唯一的,所以下面的方法声明为synchronized
public synchronized void addItem()
{try{
con=DriverManager.getConnection("jdbc:odbc:friend","","");
sql=con.createStatement();
String s="'"+logname+"'"+","+"'"+message+"'"+","+"'"+time+"'";
String condition="INSERT INTO secretwordpad VALUES"+"("+s+")";
sql.executeUpdate(condition);
backNews="添加成功了";
con.close();
}
catch(SQLException e)
{//由于表wordpad和member表通过字段logname做了关联,所以如果输入对方的logname
//不存在,就会出现异常
backNews="该会员不存在,不能留言给他(她)";
}
}
}
留言板的主页面(效果如图7.11所示)
message.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="tom.jiafei.Login" %>
<jsp:useBean id="login" class="tom.jiafei.Login" scope="session" >
</jsp:useBean>
<%!//处理字符串的一个常用方法:
public String getString(String s)
{ if(s==null) s="";
try {byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e)
{
}
return s;
}
%>
<% //如果客户直接进入该页面将被转向登录页面。
if(session.isNew())
{response.sendRedirect("login.jsp");
}
//如果没有成功登录将被转向登录页面
String success=login.getSuccess();
if(success==null)
{success="";
}
if(!(success.equals("ok")))
{response.sendRedirect("login.jsp");
}
%>
<HTML>
<BODY ><Font size=1>
<%@ include file="head.txt" %>
<CENTER>
你可以在这里实现公共留言、私人留言。
<%String str=response.encodeURL("leaveword.jsp");
%>
<FORM action="<%=str%>" method=post>
输入你的会员名字<BR><Input Type=text name=logname value=<%=login.getLogname()%>>
<BR>输入你的留言:
<BR><TextArea name="message" Rows="8" Cols="50">
</TextArea>
<BR>公共留言(所有的会员都能查看到):
<BR><Input type=submit name="submit" value="提交为公共留言">
<BR>私人留言(输入他(她)的会员名)To:
<Input type =text name=person>
<BR><Input type=submit name="submit" value="提交为私人留言">
</FORM>
</CENTER>
</BODY>
</HTML>
进行留言操作的JSP页面
leaveword.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<jsp:useBean id="login" class="tom.jiafei.Login" scope="session" >
</jsp:useBean>
<jsp:useBean id="publicbean" class="tom.jiafei.PublicWord" scope="page" >
</jsp:useBean>
<jsp:useBean id="secretbean" class="tom.jiafei.SecretWord" scope="page" >
</jsp:useBean>
<%!//处理字符串的一个常用方法:
public String getString(String s)
{ if(s==null) s="";
try {byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e)
{ }
return s;
}
%>
<HTML>
<BODY bgcolor=pink ><Font size=1>
<% //获取提交键的的串值:
String s=request.getParameter("submit");
s=getString(s);
//根据s的不同情况分开处理:
if(s.equals("提交为公共留言"))
{ //获取提交的留言:
String ms=request.getParameter("message");
ms=getString(ms);
publicbean.setLogname(login.getLogname());
publicbean.setMessage(""+login.getLogname()+"的留言:"+ms);
//留言:
publicbean.addItem();
out.print(publicbean.getBackNews());
}
else if(s.equals("提交为私人留言"))
{ //获取会员的名字:
String name=request.getParameter("person");
name=getString(name);
String ms=request.getParameter("message");
ms=getString(ms);
if(name.equals(""))
{out.print("您没有输入他(她)的名字,不能留言给人家");
}
else
{ secretbean.setLogname(name);
secretbean.setMessage(""+login.getLogname()+"留言给你:"+ms);
//留言时间:
long n=System.currentTimeMillis();
String time=String.valueOf(n);
secretbean.setTime(time);
//留言:
secretbean.addItem();
out.print(secretbean.getBackNews());
}
}
%>
</FONT>
</BODY>
</HTML>
查看公共留言页面(效果如图7.12所示)
publicMessage.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="tom.jiafei.Login" %>
<%@ page import="tom.jiafei.PageNumber" %>
<%@ page import="tom.jiafei.HandleMessage" %>
<jsp:useBean id="handlePage" class="tom.jiafei.PageNumber" scope="session" >
</jsp:useBean>
<jsp:useBean id="login" class="tom.jiafei.Login" scope="session" >
</jsp:useBean>
<jsp:useBean id="handle" class="tom.jiafei.HandleMessage" scope="page" >
</jsp:useBean>
<% //如果客户直接进入该页面将被转向登录页面。
if(session.isNew())
{response.sendRedirect("login.jsp");
}
//如果没有成功登录将被转向登录页面
String success=login.getSuccess();
if(success==null)
{success="";
}
if(!(success.equals("ok")))
{response.sendRedirect("login.jsp");
}
%>
<HTML>
<BODY ><Font size=1>
<%@ include file="head.txt" %>
<P> 公共留言列表:
<%! //声明一个共享的连接对象:
Connection con=null;
//显示数据库记录的方法:
public void showList(ResultSet rs,javax.servlet.jsp.JspWriter out,int n,tom.jiafei.HandleMessage h)
{try
{
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=50>"+"<Font size=1>"+"会员名"+"</FONT>");
out.print("<TH width=70>"+"<Font size=1>"+"留言信息"+"</FONT>");
out.print("</TR>");
for(int i=1;i<=n;i++)
{
String logname=rs.getString("logname");
String message=rs.getString("public");
if(logname==null)
{logname="";
}
if(message==null)
{message="";
}
//为了能显示原始的HTML或JSP文件格式的信息,需对信息进行回压流处理:
h.setContent(message);
message=h.getContent();
//将信息显示在表格中:
out.print("<TR>");
out.print("<TD >"+logname+"</TD>");
out.print("<TD >"+message+"</TD>");
out.print("</TR>") ;
rs.next();
}
out.print("</Table>");
}
catch(Exception e1) {}
}
%>
<% Statement sql=null;
ResultSet rs=null;
int rowCount=0; //总的记录数。
String logname="";
//第一个客户负责建立连接对象:
if(con==null)
{ try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{out.print(e);
}
try
{con=DriverManager.getConnection("jdbc:odbc:friend","","");
sql=
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=sql.executeQuery("SELECT * FROM wordpad"); //返回可滚动的结果集。
rs.last(); //将游标移动到最后一行。
int number=rs.getRow(); //获取最后一行的行号。
rowCount=number; //获取记录数。
handlePage.setPageSize(3); //设置每页显示的记录数。
handlePage.setShowPage(1); //设置欲显示的页码数。
handlePage.setPageCount(rowCount,handlePage.getPageSize()); //计算总页数。
out.print("共有"+handlePage.getPageCount()+"页,");
out.print("每页显示"+ handlePage.getPageSize()+"条记录");
}
catch(SQLException e)
{out.print(e);
}
}
//其它客户通过同步块使用这个连接:
else
{ synchronized(con)
{ try { sql=
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=sql.executeQuery("SELECT * FROM wordpad"); //返回可滚动的结果集。
rs.last(); //将游标移动到最后一行。
int number=rs.getRow(); //获取最后一行的行号。
rowCount=number; //获取记录数。
handlePage.setPageSize(3); //设置每页显示的记录数。
handlePage.setShowPage(1); //设置欲显示的页码数。
handlePage.setPageCount(rowCount,handlePage.getPageSize()); //计算总页数。
out.print("共有"+handlePage.getPageCount()+"页,");
out.print("每页显示"+ handlePage.getPageSize()+"条记录");
}
catch(SQLException e)
{out.print(e);
}
}
}
%>
<%--选择显示某页的表单 --%>
<Form action="" method="post" >
输入欲要显示的页<Input type="text" name="ok" value="1">
<Input type="submit" value="submit">
</FORM>
<% //获取表单提交的信息:
String s=request.getParameter("ok");
if(s==null)
{s="1";
}
int m=Integer.parseInt(s);
handlePage.setShowPage(m);
out.print("目前显示第"+handlePage.getShowPage()+"页");
int n=handlePage.getShowPage();
//将游标移到:
rs.absolute((n-1)*handlePage.getPageSize()+1);
showList(rs,out,handlePage.getPageSize(),handle); //显示该页的内容
%>
</FONt>
</BODY>
</HTML>
查看私人留言页面(效果如图7.13所示)
secretMessage.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="tom.jiafei.Login" %>
<%@ page import="tom.jiafei.PageNumber" %>
<%@ page import="tom.jiafei.HandleMessage" %>
<jsp:useBean id="handlePage" class="tom.jiafei.PageNumber" scope="session" >
</jsp:useBean>
<jsp:useBean id="login" class="tom.jiafei.Login" scope="session" >
</jsp:useBean>
<jsp:useBean id="handle" class="tom.jiafei.HandleMessage" scope="page" >
</jsp:useBean>
<% //如果客户直接进入该页面将被转向登录页面。
if(session.isNew())
{response.sendRedirect("login.jsp");
}
//如果没有成功登录将被转向登录页面
String success=login.getSuccess();
if(success==null)
{success="";
}
if(!(success.equals("ok")))
{response.sendRedirect("login.jsp");
}
%>
<HTML>
<BODY ><Font size=1>
<%@ include file="head.txt" %>
<P> 公共留言列表:
<%! //声明一个共享的连接对象:
Connection con=null;
//显示数据库记录的方法:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -