?? 第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 + -