简单BBS项目

项目的基本要求:  

  掌握递归
  掌握JavaScript+html+css+jsp+servlet初步应用
  掌握分页写法
  初步掌握前台/后台的概念

简单的功能需求:
  1.能够树形展现
  2.能够平板型展现
  3.能够回复帖子
  4.后台能够管理帖子,如:删除

<1.新建项目:右键new/project/Dynamic Web Project,项目名称为BBS,配置tomcat。

<2.设计数据库的表:保留建表的语句到项目中,在项目new/folder然后引入bbs.sql;

*****bbs.sql*****

create database bbs;

use bbs;

create table article
(
id int primary key
auto_increment, //auto_increment--为mysql中的自动递增
pid int,
rootid
int,
title varchar(255),
cont text,
pdate datetime,
isleaf int

);

insert into article values (null, 0, 1, ‘蚂蚁大战大象‘, ‘蚂蚁大战大象‘, now(),
1); //因为第一个字段自动递增,所以为null值
insert into article values (null, 1, 1, ‘大象被打趴下了‘,
‘大象被打趴下了‘,now(), 1);
insert into article values (null, 2, 1,
‘蚂蚁也不好过‘,‘蚂蚁也不好过‘, now(), 0);
insert into article values (null, 2, 1, ‘瞎说‘,
‘瞎说‘, now(), 1);
insert into article values (null, 4, 1, ‘没有瞎说‘, ‘没有瞎说‘,
now(), 0);
insert into article values (null, 1, 1, ‘怎么可能‘, ‘怎么可能‘, now(),
1);
insert into article values (null, 6, 1, ‘怎么没有可能‘, ‘怎么没有可能‘, now(),
0);
insert into article values (null, 6, 1, ‘可能性是很大的‘, ‘可能性是很大的‘, now(),
0);
insert into article values (null, 2, 1, ‘大象进医院了‘, ‘大象进医院了‘, now(),
1);
insert into article values (null, 9, 1, ‘护士是蚂蚁‘, ‘护士是蚂蚁‘, now(), 0);

批量输入以上语句:进入mysql后台,执行命令:source
*/bbs.sql //*代表相应的目录
mysql的账号/密码
还要在项目的WebContentde/WEB-INF/LIB中引入mysql-connector-java-5.1.29-bin.jar包

<3.在eclipse中直接查看数据库
在Data Source
Explorer中右键点击DataBase/new-->选择Generic JDBC
Connection-->随便输入名称然后next-->选择相应的数据库......

<4.新建JSP文件ShowArticleTree.jsp

-----ShowArticleTree.jsp-----

<%@ page language="java" contentType="text/html; charset=GBK"

pageEncoding="GBK"%>
<%@page import="java.sql.*"%>

<%
String admin=(String)session.getAttribute("admin");
//在Login.jsp中session.setAttribute("admin","true");-----由此判断是否在登录页面Login.jsp中成功登录
if(admin!=null&&admin.equals("true")){
login=true;
//登录成功则讲login设置为true
}
%>

<%!
String str="";
boolean login=false;
//设置变量login,判断是否登录
private void tree(Connection conn,int id,int
level){
Statement stmt=null;
ResultSet rs=null;
String
preStr="";
for(int
i=0;i<level;i++){
preStr+="----";
}
try{
stmt=conn.createStatement();
String
sql="select * from article where pid ="+id;
String
strLogin="";
rs=stmt.executeQuery(sql);
while(rs.next()){
if(login){
//判断是否成功登录
strLogin="<td><a
href=‘Delete.jsp?id="+rs.getInt("id")+"&pid="+rs.getInt("pid")+"‘>delete</a>";
//设置删除链接
}
str+="<tr><td>"+rs.getInt("id")+"</td><td>"+
"<a
href=‘ShowArticleDetail.jsp?id="+rs.getInt("id")+"‘>"+rs.getString("title")+"</a>"+strLogin+"</td></tr>";
//若成功登录,则加上删除链接
if(rs.getInt("isleaf")!=0){

tree(conn,rs.getInt("id"),level+1);
}
}
}catch(SQLException
e){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
}catch(SQLException
e){
e.printStackTrace();
}
}
}
%>

<%
Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);
Statement
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from
article where pid=0");
String
strLogin="";
while(rs.next()){
if(login){
strLogin="<td><a
href=‘Delete.jsp?id="+rs.getInt("id")+"&pid="+rs.getInt("pid")+"‘>delete</a>";
}
str+="<tr><td>"+rs.getInt("id")+"</td><td>"+"<a
href=‘ShowArticleDetail.jsp?id="+rs.getInt("id")+"‘>"+rs.getString("title")+"</a>"+"</a></td>"+strLogin+"</td></tr>";
if(rs.getInt("isleaf")!=0){
tree(conn,rs.getInt("id"),1);
}
}
rs.close();
stmt.close();
conn.close();
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=GBK">
<title>Insert title
here</title>
</head>
<body>
<table
border="1">
<%=str
%>
</table>
</body>
</html>

<5.用递归的方法输出树:

-----ShowArticleTree.jsp-----

<%@ page language="java" contentType="text/html; charset=GBK"

pageEncoding="GBK"%>
<%@page import="java.sql.*"%>

<%!  //定义地柜函数来显示树状的帖子
String str=""; 
private void tree(Connection
conn,int id,int level){
Statement stmt=null;
ResultSet
rs=null;
String preStr="";
for(int
i=0;i<level;i++){
preStr+="----";
}
try{
stmt=conn.createStatement();
String
sql="select * from article where pid
="+id;
rs=stmt.executeQuery(sql);
while(rs.next()){
str+="<tr><td>"+rs.getInt("id")+"</td><td>"+"<a
href=‘ShowArticleDetail.jsp?id="+rs.getInt("id")+"‘>"+rs.getString("title")+"</a>"+"</a></td>"+"<td><a
href=‘Delete.jsp?id="+rs.getInt("id")+"&pid="+rs.getInt("pid")+"‘>删除</a>"+"</td></tr>";
if(rs.getInt("isleaf")!=0){
tree(conn,rs.getInt("id"),level+1);
}
}
}catch(SQLException
e){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
}catch(SQLException
e){
e.printStackTrace();
}
}
}
%>

<%
Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);
Statement
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from
article where
pid=0");
while(rs.next()){
str+="<tr><td>"+rs.getInt("id")+"</td><td>"+"<a
href=‘ShowArticleDetail.jsp?id="+rs.getInt("id")+"‘>"+rs.getString("title")+"</a>"+"</a></td>"+"<td><a
href=‘Delete.jsp?id="+rs.getInt("id")+"&pid="+rs.getInt("pid")+"‘>删除</a>"+"</td></tr>";
if(rs.getInt("isleaf")!=0){
tree(conn,rs.getInt("id"),1);
}
}
rs.close();
stmt.close();
conn.close();
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=GBK">
<title>Insert title
here</title>
</head>
<body>
<table
border="1">
<%=str %>
<%str="";
%> //将字符串置为空,避免刷新时重复显示
</table>
</body>
</html>

<6.创建jsp文件显示帖子的具体内容(从数据库中取内容)

-----ShowArticleDetil.jsp-----

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE
html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<%
String
strid=request.getParameter("id"); //获得ShowArticleTree.jsp的表格链接过来的id
int
id=Integer.parseInt(strid); //将获得字符串转为Int

Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);
Statement
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from
article where id="+id);

%>

<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gbk">
<title>Insert title
here</title>
</head>
<body>
<%
if(rs.next()){
%>
<table
border="1">
<tr>
<td>Id</td>
<td><%=rs.getInt("id")
%></td>
</tr>
<tr>
<td>Title</td>
<td><%=rs.getString("id")
%></td>
</tr>
<tr>
<td>Context</td>
<td><%=rs.getString("cont")
%></td>
</tr>
</table>
<a
href="Reply.jsp?id=<%=rs.getInt("id")%>&rootid=<%=rs.getInt("rootid")%>">回复</a> //在帖子的细节中加入回复功能,链接到Reply.jsp,其中传入参数id和rootid
<%
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

<7.加入回复功能:

------Reply.jsp-----

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>

<%
int
id=Integer.parseInt(request.getParameter("id")); //接收ShowArticleDetil.jsp传过来的参数
int
rootid=Integer.parseInt(request.getParameter("rootid")); //接收ShowArticleDetil.jsp传过来的参数
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=gbk">
<title>Insert title here</title>

<script language="javascript">
<!--
//javascript去空格函数

function LTrim(str){ //去掉字符串 的头空格
var i;
for(i=0;i<str.length;
i++) {
if(str.charAt(i)!=" ") break;
}
str =
str.substring(i,str.length);
return str;
}

function
RTrim(str){
var
i;
for(i=str.length-1;i>=0;i--){
if(str.charAt(i)!="
"&&str.charAt(i)!=" ") break;
}
str =
str.substring(0,i+1);
return str;
}
function
Trim(str){

return LTrim(RTrim(str));

}

function
check() {
if(Trim(document.reply.title.value) == "") {
alert("please
intput the title!");
document.reply.title.focus();
return
false;
}

if(Trim(document.reply.cont.value) == "")
{
alert("plsease input the
content!");
document.reply.cont.focus();
return
false;
}

return true;

}
-->
</script>

</head>
<body>
<form action="ReplyOK.jsp" method="post"
onsubmit="return
check()"> //当点击提交时转到ReplyOK.jsp页面;提交前调用函数check()验证内容是否正确,正确则成功提交,否则无法提交
<input
type="hidden" name="id" value="<%=id %>"> //以隐藏域的方式传递参数
<input
type="hidden" name="rootid" value="<%=rootid
%>"> //以隐藏域的方式传递参数
<table
border="1">
<tr>
<td>
<input type="text"
name="title"
size="80">
</td>
</tr>
<tr>
<td>
<textarea
cols="80" rows=12
name="cont"></textarea>
</td>
</tr>
<tr>
<td>
<input
type="submit"
value="提交">
</td>
</tr>
</table>
</form>

</body>
</html>

-----ReplyOK.jsp-----

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>
<%@ page import="java.sql.*"%>

<%
request.setCharacterEncoding("gbk"); //解决中文字符问题,上一个页面默认按ISO-8859-1提交过来,将其改为GBK编码

int id=Integer.parseInt(request.getParameter("id"));
int
rootid=Integer.parseInt(request.getParameter("rootid"));
String
title=request.getParameter("title");

if(title==null){ //服务器验证是否正确
out.println("error!please use my bbs in the
right way!");
return;
}

title=title.trim();

if(title.equals("")){ //服务器验证是否正确
out.println("title could not be
empty!");
return;
}

String cont=request.getParameter("cont");
cont=cont.trim();

if(cont.equals("")){ //服务器验证是否正确
out.println("content could not be
empty!");
return;
}

String
cont=request.getParameter("cont");
cont=cont.replaceAll("\n","<br>"); //解决无法显示换行问题,将java中的换行"\n"替换为页面显示的换行"<br>"

Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);

conn.setAutoCommit(false); //避免不同步--插入帖子和更新被回复帖子为非叶子节点必须同步完成

String sql="insert into article
values(null,?,?,?,?,now(),0)"; //在数据库中插入刚刚回复的新帖子--**注意这一中输入数据库的技巧
PreparedStatement
pstmt=conn.prepareStatement(sql);
Statement
stmt=conn.createStatement();
pstmt.setInt(1,id);
pstmt.setInt(2,rootid);
pstmt.setString(3,title);
pstmt.setString(4,cont);
pstmt.executeUpdate();

stmt.executeUpdate("update article set isleaf=1 where
id="+id); //更新被回复帖子为非叶子节点

conn.commit(); //避免不同步,在完成上面两步之后才自己提交
conn.setAutoCommit(true); //恢复现场

stmt.close();
pstmt.close();
conn.close();

response.sendRedirect("ShowArticleTree.jsp"); //提交成功后转到ShowArticleTree.jsp页面
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=gbk">
<title>Insert title
here</title>
</head>
<body>

</body>
</html>

<7.增加删除功能:

-----Delete.jsp-----

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>
<%@ page import="java.sql.*"%>

<%!
private void del(Connection conn,int
id){ //定义递归函数删除节点及其子节点
Statement stmt=null;
ResultSet
rs=null;
try{
stmt=conn.createStatement();
String sql="select *
from article where pid
="+id;
rs=stmt.executeQuery(sql);
while(rs.next()){
del(conn,rs.getInt("id"));
}
stmt.executeUpdate("delete
from article where id="+id);
}catch(SQLException
e){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
}catch(SQLException
e){
e.printStackTrace();
}
}
}
%>

<%
String admin=(String)session.getAttribute("admin");
//增加验证功能,不登录则不可以浏览Delete.jsp页面(与前面的ShowArticleTree.jsp中的类似)
if(admin!=null&&admin.equals("false")){
out.println("小子,别想通过我这关!");
return;
//直接结束,后面的内容不显示
}
%>

<%
int id=Integer.parseInt(request.getParameter("id"));
int
pid=Integer.parseInt(request.getParameter("pid"));

Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);

conn.setAutoCommit(false); //避免不同步,设置trasaction

del(conn,id);

Statement stmt=conn.createStatement();
ResultSet
rs=stmt.executeQuery("select count(*) from article where
pid="+pid); //得到父节点为pid的所有子节点的数目
rs.next();
int
count=rs.getInt(1); //获得第1列的值
rs.close();
stmt.close();

if(count<=0){
Statement
stmtUpdate=conn.createStatement();
stmtUpdate.executeUpdate("update article
set isleaf=0 where id="+pid); //将父节点设为叶子节点
stmtUpdate.close();
}

conn.commit();
conn.setAutoCommit(true);
conn.close();

response.sendRedirect("ShowArticleTree.jsp");
%>

<8.增加只有管理员可以删除功能,还有增加主题的功能:

-----Post.jsp-----

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>
<%@page import="java.sql.*" %>

<%
String
action=request.getParameter("action");
if(action!=null&&action.equals("post")){
//判断是又发新帖(方式为get)转到的还是自身点提交(方式为post)转到这页面的

String
title=request.getParameter("title");
String
cont=request.getParameter("cont");

cont=cont.replaceAll("\n","<br>");

Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);

conn.setAutoCommit(false);

String
sql="insert into article values(null,0,?,?,?,now(),0)";
PreparedStatement
pstmt=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
//利用Statement.RETURN_GENERATED_KEYS告诉JDBC,这个sql语句中有自动增加的字段
Statement
stmt=conn.createStatement();

pstmt.setInt(1,-1);
pstmt.setString(2,title);
pstmt.setString(3,cont);
pstmt.executeUpdate();

ResultSet
rsKey=pstmt.getGeneratedKeys(); //获得这些自动增加的字段的值
rsKey.next();
int
key=rsKey.getInt(1);
//获得第一个自动增加的字段的值
rsKey.close();
stmt.executeUpdate("update article set
rootid="+key+"where id="+key);
//更新rootid的值

//stmt.executeUpdate("update article set isleaf=1 where
id="+id);

conn.commit();
conn.setAutoCommit(true);

stmt.close();
pstmt.close();
conn.close();

response.sendRedirect("ShowArticleTree.jsp");
}
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=gbk">
<title>Insert title
here</title>
</head>
<body>
<form
action="Post.jsp" method="post">
<input type="hidden" name="action"
value="post"> //设置隐藏域,跟上面的语句来配合区分是由哪个页面转到这里的
<table
border="1">
<tr>
<td>
<input type="text"
name="title"
size="80">
</td>
</tr>
<tr>
<td>
<textarea
cols="80" rows=12
name="cont"></textarea>
</td>
</tr>
<tr>
<td>
<input
type="submit"
value="提交">
</td>
</tr>
</table>
</form>

</body>
</html>

-----Login.jsp-----
在WebContent中新建文件夹images,引入所有图片;并引入login.jsp到WebContent。账号密码都是admin

<%@ page contentType="text/html; charset=gbk" pageEncoding="gbk" %>

<%
String action = request.getParameter("action");
if(action != null
&& action.equals("login")) {
String username =
request.getParameter("uname"); //获得账号
String password =
request.getParameter("pwd"); //获得密码
if(username == null ||
!username.equals("admin")) {
%>
<font color="white"
size=5>username not
correct!</font>
<%
//return;-----表示页面到此结束,后面不显示
}else
if(password == null || !password.equals("admin")) {
out.println("password
not correct!");
//return;-----表示页面到此结束,后面不显示
}else
{
session.setAttribute("admin",
"true");
response.sendRedirect("ShowArticleTree.jsp");
}
}
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<!-- saved from
url=(0054)http://www.simworld.com/client_access/client_login.asp
-->
<HTML><HEAD><TITLE>SIM - Client Access -
Login</TITLE>
<META http-equiv=Content-Type content="text/html;
charset=gbk" pageEncoding="gbk"><LINK
href="images/sim_stylesheet.css"
type=text/css
rel=styleSheet>
<SCRIPT language=JavaScript src=""
type=text/javascript></SCRIPT>

<SCRIPT language=JavaScript src=""
type=text/javascript></SCRIPT>

<SCRIPT language=JavaScript src=""
type=text/javascript></SCRIPT>

<META content="MSHTML 6.00.2900.2963" name=GENERATOR>
<style
type="text/css">
<!--
.STYLE1 {color:
#CCCCCC}
-->
</style>

</HEAD>
<BODY bgColor=#20355a leftMargin=0 topMargin=0
onload=init() marginheight="0"
marginwidth="0"><!--Begin all TOP
NAVIGATIOND ROPDOWN LAYERS ------------><!--Begin About Sim Dropdown 1
-->
<DIV id=about_sim_drop1>
<TABLE cellSpacing=0
cellPadding=0 width=140 border=0>
<TBODY>
<TR>

<TD bgColor=#ffffff>
<TABLE cellSpacing=2 cellPadding=2
width=140 border=0>
<TBODY>
<TR>

<TD vAlign=top align=left width=130><A class="topnav"

onmouseover="stopTime(); showLayer(‘about_sim_corporate_drop2‘);
hideLayer(‘about_sim_portfolio_drop2‘);"
onmouseout=startTime();


href="http://www.simworld.com/about_sim/corporate/index.asp">Corporate

Info</A></TD>
<TD vAlign=top
width=10><IMG height=10 alt=arrow

src="images/nav_arrows.gif"

width=10></TD></TR></TBODY></TABLE></TD></TR><!--

<tr>
<td bgcolor="#CACFDA">
<table
width="140" border="0" cellspacing="2" cellpadding="2">

<tr>
<td width="130" valign="top"
align="left"><a href="/about_sim/services/index.asp"
onMouseOver="stopTime(); hideLayer(‘about_sim_corporate_drop2‘);"
onMouseOut="startTime();" class="topnav">Services</a></td>

<td width="10" valign="top"><img src="/pics/spacer.gif"
width="10" height="10"></td>
</tr>

</table>
</td>
</tr>
-->

<TR>
<TD bgColor=#cacfda>
<TABLE cellSpacing=2
cellPadding=2 width=140 border=0>
<TBODY>

<TR>
<TD vAlign=top align=left width=130><A
class="topnav"
onmouseover="stopTime();
hideLayer(‘about_sim_corporate_drop2‘);"
onmouseout=startTime();


href="http://www.simworld.com/about_sim/products/index.asp">Products</A></TD>

<TD vAlign=top width=10><IMG height=10

src="images/spacer.gif"

width=10></TD></TR></TBODY></TABLE></TD></TR><!--<tr>

<td bgcolor="#CACFDA">
<table width="140"
border="0" cellspacing="2" cellpadding="2">
<tr>

<td width="130" valign="top" align="left"><a
href="/about_sim/portfolio/index1.asp" onMouseOver="stopTime();
showLayer(‘about_sim_portfolio_drop2‘); hideLayer(‘about_sim_corporate_drop2‘);"
onMouseOut="startTime();" class="topnav">Portfolio</a></td>

<td width="10" valign="top"><img src="/pics/nav_arrows.gif"
alt="arrow" width="10" height="10"></td>
</tr>

</table>
</td>
</tr>-->

<TR>
<TD bgColor=#ffffff>
<TABLE cellSpacing=2
cellPadding=2 width=140 border=0>
<TBODY>

<TR>
<TD vAlign=top align=left width=130><A
class="topnav"
onmouseover=stopTime();

onmouseout="startTime(); hideLayer(‘about_sim_corporate_drop2‘);"

href="http://www.simworld.com/about_sim/portfolio/index_temp.asp">Portfolio</A></TD>

<TD vAlign=top width=10><IMG height=10 alt=arrow

src="images/spacer.gif"

width=10></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV><!--
End About Sim Dropdown 1 --><!--Begin About Sim Corporate Dropdown 2
-->
<DIV id=about_sim_corporate_drop2>
<TABLE cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>
<TR>

<TD bgColor=#cacfda>
<TABLE cellSpacing=2 cellPadding=2
width="100%" border=0>
<TBODY>
<TR>

<TD vAlign=top align=left width="100%"><A class="topnav"

onmouseover=stopTime(); onmouseout=startTime();

href="http://www.simworld.com/about_sim/corporate/mission.asp">Mission</A></TD></TR></TBODY></TABLE></TD></TR>

<TR>
<TD bgColor=#ffffff>
<TABLE cellSpacing=2
cellPadding=2 width="100%" border=0>
<TBODY>

<TR>
<TD vAlign=top align=left width="100%"><A
class="topnav"
onmouseover=stopTime(); onmouseout=startTime();


href="http://www.simworld.com/about_sim/corporate/philosophy.asp">Philosophy</A></TD></TR></TBODY></TABLE></TD></TR>

<TR>
<TD bgColor=#cacfda>
<TABLE cellSpacing=2
cellPadding=2 width="100%" border=0>
<TBODY>

<TR>
<TD vAlign=top align=left width="100%"><A
class="topnav"
onmouseover=stopTime(); onmouseout=startTime();


href="http://www.simworld.com/about_sim/corporate/team.asp">Team</A></TD></TR></TBODY></TABLE></TD></TR>

<TR>
<TD bgColor=#ffffff>
<TABLE cellSpacing=2
cellPadding=2 width="100%" border=0>
<TBODY>

<TR>
<TD vAlign=top align=left width="100%"><A
class="topnav"
onmouseover=stopTime(); onmouseout=startTime();


href="http://www.simworld.com/about_sim/corporate/specialty.asp">Specialty

Markets
</A></TD></TR></TBODY></TABLE></TD></TR>

<TR>
<TD bgColor=#cacfda>
<TABLE cellSpacing=2
cellPadding=2 width="100%" border=0>
<TBODY>

<TR>
<TD vAlign=top align=left width="100%"><A
class="topnav"
onmouseover=stopTime(); onmouseout=startTime();


href="http://www.simworld.com/about_sim/corporate/news.asp">News

&amp;
Awards</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV><!--Begin
About Sim Corporate Dropdown 2 --><!--Begin About Sim Portfolio Dropdown 2
-->
<DIV id=about_sim_portfolio_drop2><!--<table width="100%"
border="0" cellspacing="0" cellpadding="0">
<tr>
<td
bgcolor="#CACFDA">
<table width="100%" border="0"
cellspacing="2" cellpadding="2">
<tr>
<td
width="100%" valign="top" align="left"><a
href="/about_sim/portfolio/websites.asp" onMouseOver="stopTime();"
onMouseOut="startTime();" class="topnav">Websites</a></td>

</tr>
</table>
</td>
</tr>

<tr>
<td bgcolor="#FFFFFF">
<table width="100%"
border="0" cellspacing="2" cellpadding="2">
<tr>

<td width="100%" valign="top" align="left"><a
href="/about_sim/portfolio/multimedia.asp" onMouseOver="stopTime();"
onMouseOut="startTime();" class="topnav">Multimedia
Presentations</a></td>
</tr>

</table>
</td>
</tr>
<tr>

<td bgcolor="#CACFDA">
<table width="100%" border="0"
cellspacing="2" cellpadding="2">
<tr>
<td
width="100%" valign="top" align="left"><a
href="/about_sim/portfolio/print_graphic_design.asp" onMouseOver="stopTime();"
onMouseOut="startTime();" class="topnav" target="_blank">Print / Graphic
Design</a></td>
</tr>
</table>

</td>
</tr>
<tr>
<td
bgcolor="#FFFFFF">
<table width="100%" border="0"
cellspacing="2" cellpadding="2">
<tr>
<td
width="100%" valign="top" align="left"><a
href="/about_sim/client_list.pdf" onMouseOver="stopTime();"
onMouseOut="startTime();" class="topnav" target=_"blank">Client List
(PDF)</a></td>
</tr>
</table>

</td>
</tr>
</table>--></DIV><!--Begin
About Sim Portfolio Dropdown 2 --><!--Begin Client Access Dropdown 1
-->
<DIV id=client_access_drop1><!--<table width="140"
border="0" cellspacing="0" cellpadding="0">
<tr>

<td bgcolor="#FFFFFF">
<table width="140" border="0"
cellspacing="2" cellpadding="2">
<tr>

<td width="130" valign="top" align="left"><a
href="/client_access/client_login.asp" onMouseOver="stopTime();
hideLayer(‘client_access_customer_drop2‘);" onMouseOut="startTime();"
class="topnav">Client Login</a></td>
<td
width="10" valign="top"><img src="/pics/spacer.gif" width="10"
height="10"></td>
</tr>

</table>
</td>
</tr>
<tr>

<td bgcolor="#CACFDA">
<table width="140" border="0"
cellspacing="2" cellpadding="2">
<tr>

<td width="130" valign="top" align="left"><a
href="/client_access/customerservice/index1.asp" onMouseOver="stopTime();
showLayer(‘client_access_customer_drop2‘);" onMouseOut="startTime();"
class="topnav">Customer Service</a></td>
<td
width="10" valign="top"><img src="/pics/nav_arrows.gif" alt="arrow"
width="10" height="10"></td>
</tr>

</table>
</td>
</tr>
<tr>

<td bgcolor="#FFFFFF">
<table width="140" border="0"
cellspacing="2" cellpadding="2">
<tr>

<td width="130" valign="top" align="left"><a
href="/under_construction.asp" onMouseOver="stopTime();
hideLayer(‘client_access_customer_drop2‘);" onMouseOut="startTime();"
class="topnav">Beyond Today</a></td>
<td
width="10" valign="top"><img src="/pics/spacer.gif" width="10"
height="10"></td>
</tr>

</table>
</td>
</tr>

</table>--></DIV><!-- End Client Access Dropdown 1
--><!--Begin Client Access Customer Service Dropdown 2 -->
<DIV
id=client_access_customer_drop2><!--<table width="100%" border="0"
cellspacing="0" cellpadding="0">
<tr>
<td
bgcolor="#CACFDA">
<table width="100%" border="0"
cellspacing="2" cellpadding="2">
<tr>
<td
width="100%" valign="top" align="left"><a
href="/client_access/customerservice/policy1.asp" onMouseOver="stopTime();"
onMouseOut="startTime();" class="topnav">Our Policy</a></td>

</tr>
</table>
</td>

</tr>
<tr>
<td bgcolor="#FFFFFF">

<table width="100%" border="0" cellspacing="2" cellpadding="2">

<tr>
<td width="100%" valign="top"
align="left"><a href="/client_access/customerservice/help1.asp"
onMouseOver="stopTime();" onMouseOut="startTime();"
class="topnav">Help</a></td>
</tr>

</table>
</td>
</tr>
<tr>

<td bgcolor="#CACFDA">
<table width="100%" border="0"
cellspacing="2" cellpadding="2">
<tr>
<td
width="100%" valign="top" align="left"><a
href="/client_access/customerservice/downloads1.asp" onMouseOver="stopTime();"
onMouseOut="startTime();" class="topnav">Downloads</a></td>

</tr>
</table>
</td>
</tr>

<tr>
<td bgcolor="#FFFFFF">
<table
width="100%" border="0" cellspacing="2" cellpadding="2">

<tr>
<td width="100%" valign="top"
align="left"><a href="/client_access/customerservice/tech_standards1.asp"
onMouseOver="stopTime();" onMouseOut="startTime();" class="topnav"
target=_"blank">Technical Standards</a></td>

</tr>
</table>
</td>

</tr>
</table>--></DIV><!-- End Client Access
Customer Service Dropdown 2 --><!--Begin Join our Team Dropdown 1
-->
<DIV id=join_our_team_drop1>
<TABLE cellSpacing=0
cellPadding=0 width=150 border=0>
<TBODY>
<TR>

<TD bgColor=#ffffff>
<TABLE cellSpacing=2 cellPadding=2
width=150 border=0>
<TBODY>
<TR>

<TD vAlign=top width=10><IMG height=10

src="images/client_access.htm"
width=10></TD>

<TD vAlign=top align=right width=140><A class="topnav"

onmouseover=stopTime(); onmouseout=startTime();

href="http://www.simworld.com/join_our_team/job_openings.asp">Job

Openings</A></TD></TR></TBODY></TABLE></TD></TR>

<TR>
<TD bgColor=#cacfda>
<TABLE cellSpacing=2
cellPadding=2 width=150 border=0>
<TBODY>

<TR>
<TD vAlign=top width=10><IMG height=10

src="images/spacer.gif" width=10></TD>

<TD vAlign=top align=right width=140><A class="topnav"

onmouseover=stopTime(); onmouseout=startTime();

href="http://www.simworld.com/join_our_team/apply_online.asp">Employee

Benefits</A></TD></TR></TBODY></TABLE></TD></TR>

<TR>
<TD bgColor=#ffffff>
<TABLE cellSpacing=2
cellPadding=2 width=150 border=0>
<TBODY>

<TR>
<TD vAlign=top width=10><IMG height=10

src="images/spacer.gif" width=10></TD>

<TD vAlign=top align=right width=140><A class="topnav"

onmouseover=stopTime(); onmouseout=startTime();

href="http://www.simworld.com/join_our_team/corp_culture.asp">Corporate

Culture</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV><!--
End Join Our Team Dropdown 1 --><!--End all TOP NAVIGATIOND ROPDOWN
LAYERS ------------><!--Begin Browser Spanning Table, this allows Main Web
Site Table to be centered in the middle of the browser -->
<TABLE
height="100%" cellSpacing=0 cellPadding=0 width="100%" align=center

border=0>
<TBODY>
<TR>

<TD><!--Begin Main Web Site Table All Website Design elements
below-->
<TABLE borderColor=#ffffff cellSpacing=0 cellPadding=0
width=760
align=center border=1>
<TBODY>

<TR>
<TD>
<TABLE cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>

<TR>
<TD><!-- Begin Top Logo,
Navigation and Message bar Table -->
<TABLE
cellSpacing=0 cellPadding=0 width="100%" border=0><!--Beign Global Nav
Buttons --->
<TBODY>

<TR>
<TD rowSpan=2><IMG height=53

alt="Screened Images Multimedia"

src="images/sim_logo_top.gif"
width=136
useMap=#top_logo_map border=0><MAP

name=top_logo_map><AREA shape=RECT

alt="Screened Images Multimedia [Back to Home]"

coords=11,4,120,54

href="http://www.simworld.com/index.asp"></MAP></TD>

<TD><span
class="STYLE1">欢迎来到

著名的BBS后台</span></TD>

</TR>
<TR><!--End
Global Nav Buttons --->
<TD><span
class="STYLE1">不输入用户名密码不许进
用户名: admin 密码: admin
</span></TD>

</TR></TBODY></TABLE><!-- End Top Logo, Navigation and
Message bar Table --></TD></TR>
<TR>

<TD><!-- Begin Inner Content Table: This portion will be
customizable throughout the website -->
<TABLE
cellSpacing=0 cellPadding=0 width="100%" border=0>

<TBODY>
<TR>

<TD><IMG height=324

src="images/client_login_left_arc.gif"
width=137
useMap=#bot_logo_map border=0><MAP

name=bot_logo_map><AREA shape=RECT

alt="Screened Images Multimedia [Back to Home]"

coords=11,0,120,24

href="http://www.simworld.com/index.asp"></MAP></TD>

<TD>
<TABLE cellSpacing=0
cellPadding=0 width="100%"
border=0>

<TBODY>
<TR>

<TD><IMG height=91 alt="CLIENT LOG-IN"

src="images/client_login_title.gif"

width=282></TD></TR>
<TR>

<TD>
<FORM
action=Login.jsp method=post>
<input
type=hidden name=action value=login>

<TABLE cellSpacing=0 cellPadding=0 width="100%"

background="images/client_login_text_bg.gif"

border=0>
<TBODY>

<TR>
<TD
rowSpan=4><IMG height=158

src="images/spacer.gif"
width=22
border=0></TD>
<TD
colSpan=2>
<P
class="bodydarkblue">Please enter your username

and password here to preview your designs, check

project status and/or submit new job

requests.</P></TD></TR>

<TR>
<TD>

<P class="bodyldarkblue"><LABEL

for=uname>用户名:</LABEL></P></TD>

<TD><INPUT id=uname
name=uname></TD></TR>

<TR>
<TD>

<P class="bodyldarkblue"><LABEL

for=pwd>密码:</LABEL></P></TD>

<TD><INPUT id=pwd type=password

name=pwd></TD></TR>

<TR>
<TD vAlign=top
colSpan=2><A class="bodydarkblue"

href="http://www.simworld.com/client_access/client_login.asp"><STRONG><!--Forget
your password?--></STRONG></A><IMG

height=1

src="images/spacer.gif"
width=132

border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<INPUT

type=image alt=Submit

src="images/client_login_submit.gif"

align=absMiddle value=Submit

name=Submit></TD></TR></TBODY></TABLE></TD></TR>

<TR>

<TD><IMG height=75

src="images/client_login_bot_arc.gif"

width=282></TD></TR></TBODY></TABLE></TD>

<TD><IMG height=324 alt="Log-in Image"

src="images/client_login_main_pic.jpg"

width=341></TD></TR></TBODY></TABLE><!-- End Inner
Content Table --------></TD></TR>
<TR>

<TD><!-- Begin Bottom Navigation: Contact Us, Request A-
Quote -->
<TABLE cellSpacing=0 cellPadding=0
width="100%" border=0>
<TBODY>

<TR>
<TD><A

onmouseover="Rollover(‘nav_homepage_a‘,‘nav_homepage‘);"

onmouseout="Rollover(‘nav_homepage‘,‘nav_homepage‘);"

href="http://www.simworld.com/index.asp"></A><IMG height=26



src="images/interior_bot_nav_bar.gif"

width=100%></TD>
</TR>

<TR>
<TD><IMG height=12

alt="Copyright 2003 Screened Images, Inc."

src="images/bot_footer_bar.gif"

width=760></TD></TR></TBODY></TABLE><!-- End
Bottom Navigation: Contact Us, Request A- Quote
--></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!--End
Main Web Site Table
--></TD></TR></TBODY></TABLE><!--End Browser
Spanning Table --></BODY></HTML>

<9.平板显示模式的BBS

-----ShowArticleFlat.jsp-----

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>
<%@page import="java.sql.*"%>

<% //实现分页功能
int pageSize=3; //设置每页显示条数为3

String strPageNo=request.getParameter("pageNo"); //获得想要显示的页数
int
pageNo;
if(strPageNo==null||strPageNo.equals("")){
pageNo=1;
}else{
pageNo=Integer.parseInt(strPageNo.trim());
if(pageNo<=0)
pageNo=1;
}
Class.forName("com.mysql.jdbc.Driver");
String
url="jdbc:mysql://localhost:3306/bbs?user=root&password=abc123";
Connection
conn=DriverManager.getConnection(url);

Statement stmtCount=conn.createStatement();
ResultSet
rsCount=stmtCount.executeQuery("select count(*) from article where
pid=0");
rsCount.next();
int totalRecords=rsCount.getInt(1);
//获得总共有多少条帖子

int
totalPages=(totalRecords%pageSize==0?totalRecords/pageSize:totalRecords/pageSize+1);
//获得总共多少页
if(pageNo>=totalPages) pageNo=totalPages;
//若当前页大于总共页数,将当前页数设置为总共页数
int startPos=(pageNo-1)*pageSize;
Statement
stmt=conn.createStatement();
ResultSet rsCount=stmtCount.executeQuery("select
count(*) from article where pid=0");
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=GBK">
<title>Insert title
here</title>
</head>
<body>
<a
href="Post.jsp">发表新帖</a> //点击发表新帖转到Post.jsp
<table
border="1">

<%
while(rs.next()){
%>

<tr>
<td>
<%=rs.getString("cont") %>
//获得cont的内容,以平板的形式显示(更改上面的Post.jsp-----重定向到ShowArticleFlat.jsp)
</td>
</tr>

<%
}
rs.close();
stmt.close();
conn.close();
%>

</table>
第<%=pageNo %>页 共<%=totalPages %>页&nbsp
//显示当前页码,与总共页数
<a href="ShowArticleFlat.jsp?pageNo=<%=pageNo-1
%>">上一页</a>&nbsp&nbsp&nbsp //实现功能上一页
<a
href="ShowArticleFlat.jsp?pageNo=<%=pageNo+1
%>">下一页</a>&nbsp&nbsp&nbsp //实现功能下一页

<form name="form1" action="ShowArticleFlat.jsp">
//增加用于选择显示第几页的功能
<select name="pageNo"
onchange="document.form1.submit()">
//当选项被改变提交时,这个pageNo选项的值被改为第几个选项的值
<%
for(int
i=0;i<=totalPages;i++){ //动态的确定有多少个选项
%>
<option value=<%=i
%> <%=(pageNo==i)?"selected":"" %>> 第<%=i %>页
//判断pageNo的值是否等于i,等于i就选中这一项,否则不选中。
<%
}
%>
</select>
</form>

<form name="form2" action="ShowArticleFlat.jsp">
//增加利用文本框输入想要选择的页数
<input type="text" size="4" name="pageNo"
value=<%=pageNo%> /> //文本框中的值初始为pageNo的值
<input type="submit"
value="go" />
</form>

</body>
</html>

简单BBS项目,码迷,mamicode.com

时间: 2024-10-27 07:26:41

简单BBS项目的相关文章

简单BBS项目开始(一)

1. 需要哪些表 1. UserInfo 1. username 2. password 3. avatar #头像图片 2. 文章表: title publish_date desc author 详细内容 一对一关联 文章详情表 3. 文章详情表 info 4. 评论表 1. user 2. 时间 3. 内容 4. 关联的文章 5. 是谁的子评论 5. 标签 标签名 和文章 多对多 6. 分类 分类名 和文章的关联关系 多对多/一对多 7. 点赞 是赞还是踩 文章 谁点的 关联user2.创

Maven实战(二)构建简单Maven项目

1.创建一个简单的项目 利用这个命令: mvn archetype:generate -DgroupId=cn.edu.app -DartifactId=simple -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-quickstart (这里稍微解释一下,archetype:generate  前面archetype说我们用了maven的archetype插件,后面的generate指的是该插件的一个目标,后面groupId,artifa

c# 自己制作一个简单的项目倒计时器

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace date { public partial class Form1 : Form { public Form1() { InitializeCompo

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 这篇博文我们通过spring与Mybatis集成,开发一个简单用户增删改查的Web项目. 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2.下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis/ 3.下载mybatis-spring-1.2.1版:https://repo1.maven.org/maven2/org/m

Ant——使用Ant构建简单Java项目(二)

博客<Ant--使用Ant构建简单Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个例子来进一步学习Ant: 上面例子执行build.xml文件脚本比较繁杂,能不能简化执行的脚本呢?答案是肯定的,可以将build.xml文件中的脚本改成下面的脚本: <?xml version="1.0" encoding="UTF-8"?> <project name="test" default="

美化的bbs项目

跟着教程做两天的bbs项目,终于好了,做了点笔记上传上来,哈哈(这里已经成了我的备忘录笔记本了啊). 开发工具-----MyEclipse6.0:基于插件结构的开发工具,定义了许多接口.Eclipse默认只支持J2SE,lomboz-Eclipse和MyEclipse在Eclipse的基础上装了许多插件. 项目需要注理解的一些地方: <%String path=request.getContextPath(); //相当用于访问这个文件的路径,默认下也相当于文件名(如我们的第一个文件就是Test

Ant——使用Ant构建简单Java项目(三)

博客<Ant--使用Ant构建简单Java项目(二)>我们简化了执行Test类中main方法需要执行的命令,本博客来介绍一下如何使build.xml文件和其中使用property标签定义的属性分离: 1.在test文件夹中新建名为build.properties的文件,文件中以"key=value"的形式输入原来在build.xml文件中定义的属性及其属性值如下: src=src lib=build/lib dest=build/classes np_jar=build/l

Ant—使用Ant构建简单Java项目(三)

博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属性分离: 1.在test目录中新建名为build.properties的文件,文件里以"key=value"的形式输入原来在build.xml文件里定义的属性及其属性值例如以下: src=src lib=build/lib dest=build/classes np_jar=build/l

GitHub搭建简单的项目“Hello HTML”

1.访问github:https://github.com 2.注册GitHub账号. 3.登陆GitHub.点击"Sign in"进入登陆界面,输入账号密码登录GitHub. 4.进入GitHub后创建存储库(New repository). 1)点击用户名处的"+",在点击"New repository". 2)创建Repository(存储库). 推荐Repository name与用户名一致,如:hgping918.github.com或