??
字號(hào):
負(fù)責(zé)公共留言的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){}
}
//設(shè)置屬性值、獲取屬性值的方法:
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;
}
//添加記錄到數(shù)據(jù)庫的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做了關(guān)聯(lián),所以如果輸入的logname
//不對(duì),就會(huì)出現(xiàn)異常
backNews="你沒有登錄,不能留言";
}
}
}
負(fù)責(zé)私人留言的 beans
SecretWord.java:
package tom.jiafei;
import java.sql.*;
public class SecretWord
{String logname="",
time="", //留言時(shí)間。
message="";
String backNews;//返回留言是否成功的信息。
Connection con;
Statement sql;
ResultSet rs;
public SecretWord()
{ //加載橋接器:
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
}
//設(shè)置屬性值、獲取屬性值的方法:
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;
}
//添加記錄到數(shù)據(jù)庫的wordpad表:
//我們要求留言的時(shí)間是唯一的,所以下面的方法聲明為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做了關(guān)聯(lián),所以如果輸入對(duì)方的logname
//不存在,就會(huì)出現(xiàn)異常
backNews="該會(huì)員不存在,不能留言給他(她)";
}
}
}
留言板的主頁面(效果如圖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>
<%!//處理字符串的一個(gè)常用方法:
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;
}
%>
<% //如果客戶直接進(jìn)入該頁面將被轉(zhuǎn)向登錄頁面。
if(session.isNew())
{response.sendRedirect("login.jsp");
}
//如果沒有成功登錄將被轉(zhuǎn)向登錄頁面
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>
你可以在這里實(shí)現(xiàn)公共留言、私人留言。
<%String str=response.encodeURL("leaveword.jsp");
%>
<FORM action="<%=str%>" method=post>
輸入你的會(huì)員名字<BR><Input Type=text name=logname value=<%=login.getLogname()%>>
<BR>輸入你的留言:
<BR><TextArea name="message" Rows="8" Cols="50">
</TextArea>
<BR>公共留言(所有的會(huì)員都能查看到):
<BR><Input type=submit name="submit" value="提交為公共留言">
<BR>私人留言(輸入他(她)的會(huì)員名)To:
<Input type =text name=person>
<BR><Input type=submit name="submit" value="提交為私人留言">
</FORM>
</CENTER>
</BODY>
</HTML>
進(jìn)行留言操作的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>
<%!//處理字符串的一個(gè)常用方法:
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);
//根據(jù)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("提交為私人留言"))
{ //獲取會(huì)員的名字:
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);
//留言時(shí)間:
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>
<% //如果客戶直接進(jìn)入該頁面將被轉(zhuǎn)向登錄頁面。
if(session.isNew())
{response.sendRedirect("login.jsp");
}
//如果沒有成功登錄將被轉(zhuǎn)向登錄頁面
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> 公共留言列表:
<%! //聲明一個(gè)共享的連接對(duì)象:
Connection con=null;
//顯示數(shù)據(jù)庫記錄的方法:
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>"+"會(huì)員名"+"</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文件格式的信息,需對(duì)信息進(jìn)行回壓流處理:
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; //總的記錄數(shù)。
String logname="";
//第一個(gè)客戶負(fù)責(zé)建立連接對(duì)象:
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"); //返回可滾動(dòng)的結(jié)果集。
rs.last(); //將游標(biāo)移動(dòng)到最后一行。
int number=rs.getRow(); //獲取最后一行的行號(hào)。
rowCount=number; //獲取記錄數(shù)。
handlePage.setPageSize(3); //設(shè)置每頁顯示的記錄數(shù)。
handlePage.setShowPage(1); //設(shè)置欲顯示的頁碼數(shù)。
handlePage.setPageCount(rowCount,handlePage.getPageSize()); //計(jì)算總頁數(shù)。
out.print("共有"+handlePage.getPageCount()+"頁,");
out.print("每頁顯示"+ handlePage.getPageSize()+"條記錄");
}
catch(SQLException e)
{out.print(e);
}
}
//其它客戶通過同步塊使用這個(gè)連接:
else
{ synchronized(con)
{ try { sql=
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=sql.executeQuery("SELECT * FROM wordpad"); //返回可滾動(dòng)的結(jié)果集。
rs.last(); //將游標(biāo)移動(dòng)到最后一行。
int number=rs.getRow(); //獲取最后一行的行號(hào)。
rowCount=number; //獲取記錄數(shù)。
handlePage.setPageSize(3); //設(shè)置每頁顯示的記錄數(shù)。
handlePage.setShowPage(1); //設(shè)置欲顯示的頁碼數(shù)。
handlePage.setPageCount(rowCount,handlePage.getPageSize()); //計(jì)算總頁數(shù)。
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();
//將游標(biāo)移到:
rs.absolute((n-1)*handlePage.getPageSize()+1);
showList(rs,out,handlePage.getPageSize(),handle); //顯示該頁的內(nèi)容
%>
</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>
<% //如果客戶直接進(jìn)入該頁面將被轉(zhuǎn)向登錄頁面。
if(session.isNew())
{response.sendRedirect("login.jsp");
}
//如果沒有成功登錄將被轉(zhuǎn)向登錄頁面
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> 公共留言列表:
<%! //聲明一個(gè)共享的連接對(duì)象:
Connection con=null;
//顯示數(shù)據(jù)庫記錄的方法:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -