用jsp语言开发的留言板.docx
- 文档编号:13627055
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:22
- 大小:3.02MB
用jsp语言开发的留言板.docx
《用jsp语言开发的留言板.docx》由会员分享,可在线阅读,更多相关《用jsp语言开发的留言板.docx(22页珍藏版)》请在冰点文库上搜索。
用jsp语言开发的留言板
留言簿设计报告
班级09软件
姓名***
学号22号
一部分:
描述留言簿的模块划分
二部分:
用流程图的形式描述留言簿的执行流程
三部分:
各部分界面效果图及代码的具体实现
四部分:
设计过程中的错误及纠正
五部分:
设计感受
六部分:
附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库
第一部分:
留言簿的模块划分
1.管理员管理模块
身为管理员,有查看所有用户的资料信息,和所有用户的留言,并有修改和删除的权利,进入index.jsp首页后,先像其它用户一样访问主页,及留言板,若想留言或查看信息,则先登陆.点击留言请先登陆超链接,进入denglu.jsp的登陆页面.输入管理员的用户名及密码,即admin,进入success.jsp页面,在此页面里,管理员可以查看全部留言信息shuchu.jsp,并可以更改和删除.也可以查看所有用户的注册信息chakan.jsp.也可以查看个人信息gerenxinxi.jsp.在个人信息中可以修改用户名和密码即登录xiugai.jsp页面,但不可以注销用户,因为不能没有管理员.
2.普通用户使用模块
普通用户进入网站,也要先浏览主页,及留言板,若有意留言,则请先登录,登陆成功后进入success.jsp页面,在此页面中用户可以查看自己已经留言过的信息,即shuchu3.jsp页面,在此页面中可以对自己的留言进行更新和删除,即update.jsp页面和delete.jsp页面,若有意留言,则点击我要留言超链接,进入liuyanyemian.jsp页面,进行留言,再此页面中,可以更新自己的头像.在success.jsp中还可以查看个人信息,并对自己的用户名和密码进行修改,对自己的账号注销.即xiugai.jsp和cancel.jsp页面
3.过客浏览模块
身份为过客,进入网站后,先浏览主页,若有意留言,则点击留言请先登录,若没有账号,则在denglu.jsp的页面中,点击注册链接,进行注册,即insertuser.jsp页面,若用户名不曾被人注册过,则转到zhucechenggong.jsp的页面.点击此页面的登陆即可重新登陆,也可以退出网站.重新登陆后,就可以想普通会员一样进行操作了.
4.退出系统
退出,即tuichu.jsp页面.
第二部分:
流程图
第三部分:
各部分界面效果图及代码的具体实现
index.jsp页面,主要用了一个qq表情,然后用marquee标签实现字体的运动,接下来是两个超级链接.
访问主页后,进入留言板主页,标题有主人寄语,然后调用以下方法,
publicListQureyAll(Stringsql){
Listlist=newArrayList();
this.getConnection();
try{
stat=con.createStatement();
rs=stat.executeQuery(sql);
while(rs.next()){
Messagemessage=newMessage();
message.setBorderID(rs.getInt("borderId"));
message.setContent(rs.getString("content"));
message.setImage(rs.getString("image"));
message.setMsgtime(rs.getString("msgtime"));
message.setReplyID(rs.getString("replyID"));
message.setSubject(rs.getString("subject"));
message.setUsername(rs.getString("username"));
list.add(message);
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
System.out.println("数据库异常");
e.printStackTrace();
}
CloseAll();
returnlist;
}
输出所有人的留言,界面如下:
若想要留言,则进入denglu.jsp页面,即用一个form表单即可,界面如下:
登陆成功后,进入success.jsp,设置了几个超链接如下:
若点击查看自己的留言,则进入shuchu3.jsp页面,在此页面,可以更新和删除,都是现获取自己的id号,然后操作,如下:
输出方法如下:
publicMessageQueryByID(intid){
Messagemessage=newMessage();
Stringsql="select*fromt_boardwhereborderID="+id;
this.getConnection();
try{
stat=con.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
message.setBorderID(rs.getInt("borderID"));
message.setContent(rs.getString("content"));
message.setImage(rs.getString("image"));
message.setMsgtime(rs.getString("msgtime"));
message.setReplyID(rs.getString("replyID"));
message.setSubject(rs.getString("subject"));
message.setUsername(rs.getString("username"));
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
System.out.println("数据库异常");
e.printStackTrace();
}
CloseAll();
}
在jsp页面调用:
Stringid=request.getParameter("id");
intborderid=Integer.parseInt(id);
DBConndb=newDBConn();
Messagemessage=db.QueryByID(borderid);
更新主要实现就是:
Stringid=request.getParameter("id");
Stringsubject=request.getParameter("subject");
Stringcontent=request.getParameter("content");
Stringupdatetime=newDate().toLocaleString();
Stringsql="updatet_boardsetsubject='"+subject+"',content='"
+content+"',msgtime='"+updatetime+"',image='"+image+"'whereborderID="+id;
DBConndb=newDBConn();
intflag=db.executeUpdate(sql);
if(flag>0){
response.sendRedirect("shuchu3.jsp");
}
else{
out.print("出现异常,重新留言!
");
}
删除主要实现就是将sql语句进行修改一下:
Stringsql="deletefromt_boardwhereborderID="+borderid;
当然参数也没必要获得那么多.
更新和删除的主要方法为:
publicintexecuteUpdate(Stringsql){
intflag=0;
try{
this.getConnection();
stat=con.createStatement();
flag=stat.executeUpdate(sql);
}
catch(SQLExceptione){
e.printStackTrace();
}
CloseAll();
returnflag;
}
界面如下:
若点击查看自己的个人信息,则进入gerenxinxi.jsp页面,sql语句用username追踪,
调用如下的方法:
publicGenggaiQureyAll2(Stringsql){
Genggaixinxi=newGenggai();
this.getConnection();
try{
stat=con.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
xinxi.setId(rs.getInt("id"));
xinxi.setUsername(rs.getString("username"));
xinxi.setPwd(rs.getString("pwd"));
xinxi.setSex(rs.getString("sex"));
xinxi.setBirthday(rs.getString("birthday"));
xinxi.setEmail(rs.getString("email"));
xinxi.setAddress(rs.getString("address"));
xinxi.setTelephone(rs.getString("telephone"));}
}catch(SQLExceptione){
System.out.println("数据库异常");
e.printStackTrace();}
CloseAll();
returnxinxi;}
在jsp页面这样输出:
out.print("
out.print("
out.print("
out.print("您的id号是:
");
out.print("");
out.print("");
out.print("
out.print(xinxi.getId());
out.print("");
out.print("
其他列名输出跟上面的id一样,界面如下:
若点击如上的”修改用户名或密码”进入如下页面,即xiugaiyemian.jsp,也是定义一
个form表单
若修改成功,则进入xiugaichenggong.jsp页面,界面如下:
若点击success.jsp页面的”注销用户”,则进入如下页面,同样也是定义form表单,成功后进入cancelsuccess.jsp页面,两个界面如下:
注销用户方法是:
publicintTestCancel(Stringusername,Stringpwd){
intflag=0;
DBConndb=newDBConn();
con=db.getConnection();
Stringsql="deletefromt_userwhereusername=?
andpwd=?
";
try{
prests=con.prepareStatement(sql);
prests.setString(1,username);
prests.setString(2,pwd);
flag=prests.executeUpdate();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnflag;
}
若在登陆页面,点击”注册”,进入regist.jsp页面如下,也是一个复杂的form表单,添加了背景和qq表情:
注册插入到数据库的方法主要有两个,一个用来判断用户名是否已经存在,一个用来插入:
如下
判断:
publicintTestpanduan(Stringusername){
ints=0;
DBConndb=newDBConn();
con=db.getConnection();
Stringsql="select*fromt_userwhereusername=?
";
try{
prests=con.prepareStatement(sql);
prests.setString(1,username);
rs=prests.executeQuery();
if(rs.next()){
s=1;
rs.close();
prests.close();
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returns;
}
插入:
publicintTestinsert(Stringusername,Stringpwd,Stringrepwd,Stringsex,Stringbirthday,Stringemail,Stringaddress,Stringtelephone){
DBConndb=newDBConn();
con=db.getConnection();
intflag=0;
Stringsql="insertintot_uservalues(?
?
?
?
?
?
?
)";
try{
if(pwd.equals(repwd))
{
prests=con.prepareStatement(sql);
prests.setString(1,username);
prests.setString(2,pwd);
prests.setString(3,sex);
prests.setString(4,birthday);
prests.setString(5,email);
prests.setString(6,address);
prests.setString(7,telephone);
flag=prests.executeUpdate();
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnflag;
}
注册成功后,进入zhucechenggong.jsp页面,也添加了背景图片和qq表情,使之美观,界面如下:
若访问的是管理员,则进入如下界面,他可以查看所有用户的所有留言和所有信息:
若查看所有用户的全部资料,则进入chakan.jsp页面,在此页面可以管理员进行删除,输出方法是:
publicResultSetQureyAll3(Stringsql){
Genggaixinxi=newGenggai();
this.getConnection();
try{
stat=con.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
xinxi.setId(rs.getInt("id"));
xinxi.setUsername(rs.getString("username"));
xinxi.setPwd(rs.getString("pwd"));
xinxi.setSex(rs.getString("sex"));
xinxi.setBirthday(rs.getString("birthday"));
xinxi.setEmail(rs.getString("email"));
xinxi.setAddress(rs.getString("address"));
xinxi.setTelephone(rs.getString("telephone"));
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
System.out.println("数据库异常");
e.printStackTrace();
}
returnrs;
}
在jsp页面调用方法后用<%out.print(rs.getString("email"));%>
删除链接是:
id=<%=rs.getInt("id")%>">删除 界面如下: 管理员还可以有权利对所有用户的留言进行删除: 主要方法同上面提到的. 界面如下: 点击我要留言链接后,进入我要留言页面: 添加笑脸和更新头像的方法如下: <%intcount=0; for(inti=0;i<40;i++){%> <%count++; if(count%8==0) out.print(" 更新头像: <%for(inti=1;i<=30;i++){%> <%}%> 但要用到JavaScript语言: 选择头像: functionaddimg(obj){ vars=obj.value; varcon=document.form1.content.value; con=con+" document.form1.content.value=con;} 更换头像: functionchange(){ varimage=document.form1.image1.value; document.head.src="photo/"+image+".jpg";} 留言界面如下: 最后是退出页面,主要是图片和qq表情的设置.使页面更生动,界面如下: 第四部分: 设计过程中的错误及纠正 在做动态网页的时候,遇到的小错误有很多,每次都是经过反复的调试得出的,有时候写错某个方法中的某个字母,就会调试很长时间,当然同时也加深了印象.例如在用JavaScript语句中,不能弹出alert对话框,仔细分析代码,发现表单form名字写成了from.主要的错误有以下几个方面: 1.在编写查看所有人的信息 遇到传递参数时的空指针,而且在方法体中用了db.CloseAll();方法,出现连接对象已经关闭的错误. 应该用out.print(rs.getString(username));而不是用out.print(xinxi.getUsername()); 2.在删除留言时,超链接中的id一直传递不过去使得intborderid=Integer.parseInt(id);一直出现错误,出现空指针.,仔细检查发现是超链接中的id=<%=message.getBorderID()%>写错 3.在插入新留言的时候,一直出现中文乱码,插入如下两条语句,即可解决 byteaa[]=subject.getBytes("ISO-8859-1");subject=newString(aa); bytebb[]=content.getBytes("ISO-8859-1");content=newString(bb); 更新头像的时候,头像不能同时显示出来 4.在注册新用户时,由于既要用sql语句判断用户名是否已经存在,又用到要在不存在的时候插入的sql语句,导致逻辑混乱,仔细推敲后,才运行得到. 5.因为要在多个页面用到传递的username等等,所以一定要用session获取参数 6.在更新留言时,要用到 第五部分: 设计感受 1.这次的留言板设计感受很多,有时某一个很小的错误,比如丢一个括号,写错一个字母,就会浪费很长的时间.所以做完就用了很长的时间.当然对程序里的某些方法的应用,也不是太清楚,如过滤信息的设置等.我觉得还是孜孜不倦的从一点点的做起,比如每个网页的背景图片,就设计了不少时间,因为我觉得一个网站的美观效果也是很重要的.每当睡觉的时候,只要一想起,啊,我的留言板还没有做完,就会带着思考入梦了. 老实说,这个留言板不是很难,可能是刚接触数据库与jsp的链接吧,当时出了很多例如数据库异常的错误,到后期的时候就好多了…在对用户信息或用户的留言进行更新,删除,插入,查找等等时,这些方法都从jsp的页面,提到java类里面,方法都是大同小异,无非是数据库的链接,执行sql语句的对象的创建和应用,以及接受结果的存放等等.主要是预处理对象和执行对像的flag=stat.executeUpdate(sql);rs=stat.executeQuery(sql);这两个方法的调用. 2.在这期间离不开同学与同学,舍友与舍友之间互相学习和交流,所以收益也很大,也感受到了集体的力量.经过这次的留言板制作,收获很多.不仅对连接数据库方面的知识懂了很多,对sql语句的书写记忆深刻,而且还回忆了以前的很多函数的调用,方法的编写等等.相信在以后的学习中会更进一步,掌握更多的知识和应用. 第六部分: 附用户使用说明(包括安装环境部署环境,及使用),和设计时的数
");}%>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jsp 语言 开发 留言板