自己动手做论坛(二)

编程爱好者

本期,我们为大家介绍外部和用户接口的程序设计。示例中的所有代码可在http://download.cpcw.com/下载。

所有的论坛程序,都有一些必备的功能,比如:用户注册、修改个人信息、发帖、回帖......至于其他特色功能,不是本文介绍的范围。下面,我们就详细为大家介绍每个论坛程序都必备的功能模块程序设计。

1.用户的注册、登录

用户的注册、登录及个人信息的修改页面都属于用户接口部分,这里用到的主要是表单,界面截图和对应的文件如下:

38-f19-1.jpg
用户登陆界面:login.jsp
38-f19-2.jpg
用户注册界面:reg.jsp

对表单的处理,也就是要编写表单所要提交到的页面,该页面能协同数据库对表单中的数据进行处理。

登录界面login.jsp提交的页面check.jsp的主要代码如下,具体参看下载的源代码:

<jsp:useBean id="one" class="bbs.DbConnect" scope="request" />

<%

//得到用户提交的用户名

String name=request.getParameter("name");

//得到用户提交的用户密码

String pass=request.getParameter("pass");

//查询的SQL语句

String sql="select * from bbs_user where user_id='"+name+"'";

String sql1="select * from bbs_user where user_id='"+name+"' and user_pass='"+pass+"'";

try{

java.sql.ResultSet rst=one.getRs(sql);

//先判断用户名是否存在

if(rst.next())

{ java.sql.ResultSet rst1=one.getRs(sql1);

//如果用户名与密码匹配,则登录成功

......

//如果不成功,转到失败页面

......

//如果用户名不存在,给出提示并跳转到注册页面

......

注册界面reg.jsp提交的页面regist.jsp的主要代码如下:

<jsp:useBean id="one" class="bbs.DbConnect" scope="session" />//调用javaBean

<%

String a1=request.getParameter("username");//得到表单提交的用户名

String a2=request.getParameter("userpass");//得到表单提交的用户密码

String a3=request.getParameter("useremail");//得到表单提交的用户email

String a4=request.getParameter("userquestion");//得到表单提交的用户安全问题

String a5=request.getParameter("useranswer");//得到表单提交的用户问题答案

/* 下面所要执行的SQL语句*/

String sql1="insert into bbs_user(user_id,user_pass,user_email,user_question,user_answer) values('"+a1+"','"+a2+"','"+a3+"','"+a4+"','"+a5+"')";

String sql2="select * from bbs_user where user_id='"+a1+"'";

try

{ ResultSet rst=one.getRs(sql2);

/*先判断用户名是否存在,如果存在则弹出信息,否则添加到数据库中*/

......

注意:在对表单数据提交时为了防止用户的失误而导致不合法的数据插入到数据库中,最好的方案是在提交时在本页面先对数据进行校验。通常是采用javaScript来完成此项任务,节选reg.jsp中的校验代码如下:

reg.jsp

<html>

<script language="javascript">

function on_submit() //定义on_submit()方法

{/*验证用户名是否为空*/

if(reg.username.value=="")

{ alert("用户名不能为空!");//弹出对话框

reg.username.focus();//将光标定位到用户名输入框中

return false;

}

/*验证两次输入的密码是否相同*/

if(reg.userpass.value!=reg.userpass1.value)

{ alert("两次输入的密码不同!");

reg.userpass.focus();

return false;

}

……

</form>

</body>

</html>

2.发表帖子

发表帖子即向数据库中的主题帖表中插入数据,它对应的文件为addtopic.jsp

回复帖子即向数据库中的回复帖表中插入数据,它对应的文件为addhf.jsp。

浏览帖子时,我们需要先列出所有的主题帖,然后通过点击可以查看它的所有回复帖子;我们的做法是当点击主题帖时将主题帖的ID传到下一页面中,通过select语句查询它的回复帖,部分代码如下:

index.jsp

//声明使用javaBean

<jsp:useBean id="one" class="bbs.DbConnect" scope="request" />

<jsp:useBean id="two" class="bbs.DbConnect" scope="request" />

<body>

<div align="center">

<table width="200" border="0">

<tr>

<td height="40">< div align="center" class="style1">论坛首页< /div>< /td>

</tr>

</table>

</div>

<div align="center">

//包含头部文件

<jsp:include page="view/top.jsp" flush="true" />

<p> < /p>

</div>

<div align="center">< /div>

<div align="center">< /div>

<div align="center">

<%

//查询出所有的版块

String bk="select * from bbs_bk";

try

{ ResultSet rs=one.getRs(bk);

while(rs.next())

{

%>

<table width="800" border="1">

<tr>

<td><div align="center"><%=rs.getString("bk_info")%></div></td>

</tr>

<%

//查询每个版块中的版面

......

%>

</body>

3.用户信息的修改

用户只有在登录后才能对自己的信息进行修改,我们的实现方法为通过session传递登录用户的ID给处理页面,来完成对用户的信息修改。用户的信息修改表单界面如下,对应的文件为update_user.jsp。

38-f19-6.jpg

主要代码为:

//表单提交处理的页面为update.jsp

<form id="form1" name="form1" method="post" action="update.jsp">

<tr>

<%

String username=request.getParameter("username");//得到前面页面传过来的username

//查询出user_id为username的用户的所有信息

String sql_user="select * from bbs_user where user_id='"+username+"'";

try

{

ResultSet rs_user=one.getRs(sql_user);//调用javaBean来执行查询数据库操作

while(rs_user.next())

{

//将用户的各项信息分别放到相应的位置

%>

......

</form>

处理页面update.jsp

<html>

<jsp:useBean id="one" class="bbs.DbConnect" scope="request" />

<%

//得到表单的各个参数

String user_id=request.getParameter("user_id");

String user_pass=request.getParameter("user_pass");

String user_email=request.getParameter("user_email");

String user_question=request.getParameter("user_question");

String user_answer=request.getParameter("user_answer");

//配置更新用户信息的SQL语句

String update_sql="update bbs_user set user_pass='"+user_pass+"',user_email='"+user_email+"',user_question='"+user_question+"',user_answer='"+user_answer+"' where user_id='"+user_id+"'";

try

{//调用javaBean更新数据

......

</html>