web项目之BBS流程解析(无servlet、filter)

最近课程穿插了微信开发,bbs的项目也是断断续续地,难得地趁着自习时间写点博客记录。这个bbs版本比较简单,主要是显示版块、版块下的话题,发表话题、针对话题发表回复等等。主要的就是理解整个的流程。 我们按照最初进入bbs的顺序来讲解。
1、进入reg.jsp。 一个简单的注册页面,表单提交用户名和密码,页面加入验证码,这个是借鉴网上的js验证码,有纯数字、中文、混合的验证码,具体不介绍。 将用户名和密码传给doReg.jsp,调用封装好的 RequestUtil工具包,将request 的参数转换为User 对象。【RequestUtil类使用了反射机制,取得request中的参数和传进来的class,激活setter方法,得到一个User 对象。】不存在该用户,将用户名和加密后的密码存储至数据库。然后,response.sendRedirect("login.jsp");重定向至login.jsp.
2、进入登陆页面,输入用户名、密码、验证码,转至doLogin.jsp处理。同样是RequestUtil处理请求参数,获得用户名密码,通过DBHelper取得用户名和密码,判断是否正确,正确,将用户添加至session中,session.setAttribute("user", user);登录:response.sendRedirect("doIndex.jsp");
3、doIndex.jsp,调用业务层**BoardBizImpl**中的toFindAllBoard()方法,查询出所有的版块信息,以Map<Integer,List<Board>>键值对《父版块id,list版块》的形式存储,session添加属性boardmap,将得到的所有版块信息存入。重定向至indexjsp页面。
4、从session获取到所有的版块信息,容错处理,然后循环map取值,将所有的版块和所属的子版块信息,显示在页面上。改写了bean:board,添加了一些属性,方便界面显示需要取参。
技术分享
点击子版块,传过去该子版块的boardid,根据id 查询出所有的话题信息,跳转至子版块话题处理页面(doList.jsp),然后转发至展示页面,分页显示所有话题,这里将分页数据进行了封装处理,建了一个pageModel,
5、处理页面(doList.jsp)的主要功能:
1:取出boardid
2:查出这个boardid版块下的所有的话题的集合topicList,存到request-->注意:跳转的方式 转发=>list.jsp
3:查找这个版块信息Board对象,将这个存到session中,以备detail.jsp页面 4:request.getRequestDispatcher("list.jsp").forward(request, response);代码如下:
public class PageModel<T> implements Serializable {


<span style="white-space:pre">	</span>private List<T> list;<span style="white-space:pre">			</span>//泛型分页数据
<span style="white-space:pre">	</span>private Integer total=0;<span style="white-space:pre">		</span>//总的记录数
<span style="white-space:pre">	</span>private Integer currentpage=1;<span style="white-space:pre">	</span>//当前第几页
<span style="white-space:pre">	</span>private Integer pageSize=3;<span style="white-space:pre">		</span>//每页几条记录
<span style="white-space:pre">	</span>private Integer prepage=0;<span style="white-space:pre">		</span>//上一页
<span style="white-space:pre">	</span>private Integer nextpage=1;<span style="white-space:pre">		</span>//下一页
<span style="white-space:pre">	</span>private Integer totalPage=3;<span style="white-space:pre">	</span>//总页数
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public void setList(List<T> list) {
<span style="white-space:pre">		</span>this.list = list;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public List<T> getList() {
<span style="white-space:pre">		</span>return list;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setTotal(Integer total) {
<span style="white-space:pre">		</span>this.total = total;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Integer getTotal() {
<span style="white-space:pre">		</span>return total;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setCurrentpage(Integer currentpage) {
<span style="white-space:pre">		</span>this.currentpage = currentpage;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Integer getCurrentpage() {
<span style="white-space:pre">		</span>return currentpage;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setPagesize(Integer pageSize) {
<span style="white-space:pre">		</span>if(pageSize<0){
<span style="white-space:pre">			</span>this.pageSize=1;
<span style="white-space:pre">		</span>}else{
<span style="white-space:pre">			</span>this.pageSize = pageSize;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Integer getPagesize() {
<span style="white-space:pre">		</span>return pageSize;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Integer getPrepage() {
<span style="white-space:pre">		</span>return prepage<=1?1:prepage-1;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Integer getNextpage() {
<span style="white-space:pre">		</span>return nextpage<=totalPage?totalPage:nextpage+1;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Integer getTotalpage() {
<span style="white-space:pre">		</span>this.totalPage=this.total%this.pageSize==0?this.total/this.pageSize:this.total/this.pageSize+1;
<span style="white-space:pre">		</span>return totalPage;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
}

通过业务层,按照页面的分页需要来设置好pageModel的各个参数。页面按照时间的降序显示最新的话题,点击话题,传过去topicid,跳转至话题主页的处理页面(doDetail.jsp)

6、话题主页的处理页面(doDetail.jsp)
从session中取出所有的topic,循环这个topiclist,根据request传过来的topicid,查找这个话题的主贴和所有的回帖。同样是分页的处理。还有一点需要注意的是,不论是主贴还是回复贴的删除、修改按钮,都需要权限控制,只有当当前登录的用户是该帖子的发表人,才会显示删除、修改。
7、点击发表话题,传过去boardid,转至post发帖页面,form表单隐藏域boardid,跟随其他参数一起提交给doTopicAdd.jsp,调用业务层方法,将新增话题添加至数据库,然后,传参boardid给doList.jsp,刷新该board版块下的所有话题。
8、点击回复帖子按钮,传过去topicid至 postReply.jsp,填写好需要回复的标题和内容,提交至doReplyAdd.jsp,将取到的数据,调用业务层对回复贴对应的操作方法进行处理,然后,将topicid再次传回dodetail.jsp,刷新一次话题展示界面。
9、对于发帖人才有的删除、修改权限,删除回复,比较简单,根据replayid,即可删除数据,主帖的删除,需要删除其所属的所有的回复帖才可删除,这里的主外键关系一定要明确。

下面是截图bbs一些版面的介绍
技术分享

用户登录效果:
技术分享

list分页显示页面的分析:
技术分享


主贴和回复贴的显示:
技术分享


隐藏域:
技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。