《2022年BBS论坛详细设计文档 .pdf》由会员分享,可在线阅读,更多相关《2022年BBS论坛详细设计文档 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、BBS 论坛开发详细设计前言:在 2011 年 10 月 28 日,16:24:15 我开始开发BBS 论坛。开始时准备了很多所需的图片素材。项目是2012-02-13 完成的。记下这个开发中学到的东西。正文:系统分为前台功能和后台管理。代码分析:首页 index.jsp。下图是首页的组成图:BBS 系统前台功能后台管理用户登入用户注册发帖浏览帖回帖栏目管理专区管理回帖管理用户管理名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -页面头上的欢迎信息和页面底部的开发商信息在前台每个网页上都是一样的。所以后面不再介绍了。后面基本页面发生改都是在中间部分发生变化。首页欢迎,使
2、用JavaScript 获取当前的时间,且每200ms更新一次。JavaScript 代码如下:首页Inde.jsp 首页欢迎用户已登入top2.jsp 用户没有登入 top.jsp 标 签 论 坛 专 区 信 息底部,论坛开发商信息footer.jsp名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 16 页 -在网页加载时就执行该JavaScript 函数用户登入是典型的Sturct2 的应用。用户登入信息请求通过表单发送的dologin.action。dologin.action。根据 struts.xml配置文件跳转页面。请求如下:function clockon(bgcl
3、ock)var now=new Date();var year=now.getYear();var month=now.getMonth();var date=now.getDate();var day=now.getDay();var hour=now.getHours();var minu=now.getMinutes();var sec=now.getSeconds();var week;month=month+1;if(month 10)month=0+month;if(date10)date=0+date;if(hour 10)hour=0+hour;if(minu 10)minu=
4、0+minu;if(sec 10)sec=0+sec;var arr_week=newArray(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);week=arr_week day;var time=;time=year+-+month+-+date+-+week+hour+:+minu+:+sec;if(document.all)bgclock.innerHTML=time var timer=setTimeout(clockon(bgclock),200);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 16
5、 页 -dologin.action。如下:publicclass DoLogin extends ActionSupport private Login login=new Login();Overridepublic String execute()if(LoginDAO.login(login.getUsername(),login.getPassword()ActionContext.getContext().getSession().put(name,login.getUsername();ActionContext.getContext().getSession().put(isl
6、ogin,1);returnSUCCESS;else ActionContext.getContext().getSession().put(islogin,0);this.addFieldError(userlogin,你输入的用户名或密码错误,请重新输入 );returnERROR;public Login getLogin()returnlogin;publicvoid setLogin(Login login)this.login=login;提交 重置 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 16 页 -struts.xml 配置如下:这是使用 struts2
7、最基本也是最经典的方式。后面的差不多是这种。在写 Index.jsp 页面的时候还学到2 点,1 学会了使用 标签。2 学会了如何从Struct 栈中取值。怎么取的session 中的值:代码如下:3:自定义标签发现了自定义标签的好处,使用自定义标签,可以很多需要在JSP 页面写的代码都在标签文件中写好,这样就很好的把代码和标签分离。我想这也是struts2 定义那么多标签的原因吧。自定义标签的方法如下:DisplayTag.java标签文件index.jspindex.jsp名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 16 页 -app.tld 标签配置文件publiccl
8、ass DisplayTag extends TagSupport publicint doEndTag()throws JspException JspWriter out=pageContext.getOut();try List l=ForumDao.getRecord();for(int i=0;il.size();i+)Forum f=(Forum)l.get(i);out.println();out.println();if(i%2=0)out.println();elseout.println();out.println();out.println();out.println(科
9、技公司出版的+(f.getForumnname()+语言类专区);out.println(+f.getCreatetime()+);out.println();out.println();out.println( );out.println(版主:);if(f.getManager()!=null)out.println(+(f.getManager()+);else 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 16 页 -在 web.xml 文件中配置A tag library exercising SimpleTag handlers.1.0 SimpleTag
10、BBShttp:/displaycom.ssoft.bbs.tag.DisplayTagempty!-论坛版块 -displayCountcom.ssoft.bbs.tag.DisplayCountempty!-统计论坛信息 -名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 16 页 -用户注册register.jsp 模式和 index.jsp 类似不过在这里使用了 和标签发帖:newtopic.jsp 使用的还是Sturct2 的经典模式,不再重复。使用 JavaScript 改变字体的颜色,字体等。自己写的JavaScript 文件http:/ change_B()var
11、text=$(#text);var v=text.val();if(v!=)text.css(font-weight:bold);document.getElementsByName(rp.xq).getAttribute();名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 16 页 -回帖:response.jsp 浏览帖子的回复和回帖显示在一个页面上。使用标签组合成一个页面。基本实现在当前页回复的显示,在当前的帖子能显示。使用了 Struct+json+AJAX。使用 AJAX 的异步交互,使用JSON显示返回的数据。DoResponse.jsp处理请求的代码如下:名师资料总
12、结-精品资料欢迎下载-名师精心整理-第 9 页,共 16 页 -AJAX 的JavaScript函数如下:publicclass ResponseAction extends ActionSupport /*/privatestaticfinallongserialVersionUID=-8926939651812392198L;private Response rp =new Response();private String result;public Response getRp()returnrp;publicvoid setRp(Response rp)this.rp =rp;pub
13、lic String getResult()returnresult;publicvoid setResult(String result)this.result=result;public String execute()ResponseDao responsedao=new ResponseDao();LoginDao logindao=new LoginDao();String name=(String)ActionContext.getContext().getSession().get(name);rp.setAuthor(name);responsedao.InsertRespon
14、seRecord(rp);Login user=null;user=logindao.getRecordForUser(name);Map map=new HashMap();map.put(content,rp.getContent();map.put(xq,rp.getXq();map.put(author,rp.getAuthor();map.put(submittime,Time.getCurrentTime();if(name=null)map.put(email,);map.put(tx,0.gif);map.put(qq,);else map.put(email,user.get
15、Email();map.put(tx,user.getTx();map.put(qq,user.getOicq();JSONObject jo=JSONObject.fromObject(map);result=jo.toString();returnSUCCESS;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 16 页 -function subm()/提交请求var title=$(#title).val();var xq=getRadioBoxValue(xq);/获取单选按钮的值var content=$(#text).val();var topicname=$(#t
16、opicname).val();var topicid=$(#topicid).val();$.post(doResponse.action,rp.title:title,rp.xq:xq,rp.content:content,rp.topicname:topicname,rp.topicid:topicid,function(data)var rs=eval(data);/包数据解析为json 格式var rp2=rs.result;var rp=eval(+rp2+)/把数据解析为 JSON 格式$(#02).append(+ +rp.email+rp.qq+rp.s
17、ubmittime+rp.content+作者:+rp.author+ + );,json);function getRadioBoxValue(radioName)var obj=document.getElementsByName(radioName);/这个是以标签的name 来取控件for(i =0;i obj.length;i+)if(obji.checked)return obji.value;returnundefined;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 16 页 -struct.xml中的配置如下:后台管理admi
18、nindex.jsp 使用 HTML 的 frameset。组成管理页面。这是一种比较常用的方式。左边框架显示功能,右边框架显示主要内容。但是存在一个很大的问题。Struct2的 struct.xml 不支持 HTMl 的框架。页面请求的信息如果直接跳转Frameset 的框架页面里面的子页面接收不到参数,如果直接跳转到子页面页面就没有那个效果,如何解决这个问题呢?看了网上不少解决方法,发现只有一种解决方法,就是把需要传送的变量存在Session 里面。个人觉得存在把值存在session 中是一种非常浪费服务器资源的。特别如果要显示的数据是批量的数据,是ArrayList,更是非常浪费资源。而
19、且ArrayList 也不能存在 cookie 里面。所以在这时我放弃了Struct2 很多遍历。栏目管理:main.jsp 因为 main.jsp 的版块少。所以这里我没有做分页处理。但是这样也有一个亮点点击弹出对话框。基本实现原理是,在页面载入的是时候将某 层影藏,在点击某按钮或超链接触发事件的时候显示。主要通过CSS+div+JavaScript div 源码如下:初始时隐藏状态。result 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 16 页 -JavaScript代码如下:新增论坛?论坛名称:版主:保存 撤销 名师资料总结-精品资料欢迎下载-名师精心整理-第 1
20、3 页,共 16 页 -修改和提交的形式使用的是Struct经典模式,不再介绍。专区管理:topicmanager.jsp Struct2的 struct.xml 不支持 HTMl 的框架。我放弃了Struct2 的优越性,在遍历显 示 版 块 主 题 的 时 候。我 没 有 使 用 标 签。而 是 自 己 开 发 了标签。开发方式已介绍。不再重复。回帖管理:responsetopic.jsp 和 topicList.jsp 基本类似,不再介绍。用户管理:userManager.jsp 有个特别之处,查找用户。var Obj=document.onmouseup=MUp document.on
21、mousemove=MMove function MDown(Object)Obj=Object.id;document.all(Obj).setCapture();pX=event.x-document.all(Obj).style.pixelLeft;pY=event.y-document.all(Obj).style.pixelTop;function MMove()if(Obj!=)document.all(Obj).style.left=event.x-pX;document.all(Obj).style.top=event.y-pY;function MUp()if(Obj!=)d
22、ocument.all(Obj).releaseCapture();Obj=;/显示窗口的方法function showwin()var winNode=$(#massage_box);winNode.css(visibility,visible);/隐藏窗口的方法function hide()var winNode=$(#massage_box);winNode.css(visibility,hidden);名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 16 页 -显示查找出来的会员不需要分页,更好的处理逻辑关系。查找用户还另外写了一个页面searchuser.jsp处理。
23、需注意的是:使用Strcut 的方式提交在本页面显示。URL 地址是 XXX.action 如果 则会链接到XXX.action#中。调用不了本地JSP页面的 JavaScript 函数.解决方法是:超链接直接提交。不通过AJAX 异步提交了。代码如下:最后用了下拦截器知识。在后台管理模块中。管理员所有的操作都必须是已经登入的条件下。所有配置拦截器很必要。附上一个讲好的拦截器控制登入的struct.xml 的配置结束:以 上 是BBS论 坛 开 发 的 全 过 程 和 主 要 学 到 和 用 到 的 知 识 点。主 要 是 使 用 删除 /配置拦截器/配置拦截器栈 /保护默认拦截器/将配置的拦截器设置为默认拦截器/设置全局的结果。/index.jsp 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 16 页 -Struct+AJAX+JSON+CSS 通过这次的开发,开始明白了模式的意义了。以后的代码会更多的注意模式。更多的注意低耦合高内聚。依赖抽象。论坛比较简单。开发过程也比较简单。以后要养成这种总结的习惯。下一步Spring3.0+Struct2.0+Hribetate3.5+AJAX(Jquery)。名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 16 页 -
限制150内