毕业设计论文_基于struts2和hibernate框架的bbs论坛系统内容摘要:

state,pdate,, Userqusetion,useranswer等等,然后设置主键和自增长。 这两个实体 JAVA类对应在数据库中就是两张表一张 uers一张 article,通过 annotation的 @Entity来识别其中类中的每个私有属性都代表了数据库中相 应表格下的一个字段通过 @Id来确认主 @GeneratedValue来生成自动增长的字段。 ( 1)登录功能 登录功能是注册用户,游客和管理员都有可能会用到的功能,本项目的登录界面如下图 图 10登陆界面示意图) 展示。 图 10 登 陆界面示意图 登录界面相当简单主要就是一个表单 form method=post id=loginForm action=UserAction!login focus=这个表单是提交到 UserAction这个类的 login方法,通过login这个方法来接受表单 提交的用户名和密码是否合法。 页面跳转提交数据我是利用 Struts2来实现的,主要就是一个 UserAction类中的 login这个方法的实现需要设计下,我设计的方法是这样的: public String login() { if(LOGIN_MANAGER.equals((user))) { HttpServletRequest request = ()。 HttpSession session = ()。 (LOGINUSER, user)。 (MANAGER, user)。 return login_manager_success。 } else if(LOGIN_USER.equals((user))) { 13 HttpServletRequest request = ()。 HttpSession session = ()。 (LOGINUSER, user)。 return login_user_success。 } else { return login_false。 } } 通过这个 login方法可以验证表单传过来的到底是注册用户还是管理员或者是还没注册过的用户,若是管理员就在 session中将管 理员的信息保存进去,并且返回一条管理员登录成功的信息login_manager_success。 如果是注册用户也在 session中保存信息,并且也返回一条用户登录成功的信息 login_user_success;如果是未注册过的用户那么也会返回登录失败信息“ login_false” 然后通过Struts2的配置文件。 相应的 下: action name=UserAction class= result name=login_user_success type=redirectAction param name=actionNameArticleAction/param param name=methodindex/param param name=page0/param /result result name=login_manager_success/result result name=login_manager_successadmin//result result name=login_false/result 这个配置文件的作用相当于一个调度着,他根据返回信息的不同将页面跳转到相应的页面,若接受到得信息是“ login_false”便将页面跳转到 ,也就是说如果密码不正确或者非注册 用户便会返回到登录页面,让用户再次输入或者选择注册。 (2)主题帖的展现 作为论坛来说,展示主题帖子是个必须的功能,这是用户来了解大概内容的途径,如下图 图 11主题帖的展示图示。 主题帖子罗列出来的都是主题帖,用户点击这些主题帖能够进入详细的内容,能看见对主题帖的回复或者是对回复的回复,主题帖的分页显示是这个项目里面比较有难度的一段,我的完成代码如下: % ArticleDao ad = new ArticleDaoImpl()。 int maxRecords = 10。 int getPage = (Integer)(PAGEOFROOT)。 ListArticle rootarticles = new ArrayList()。 rootarticles = ()。 int sumRecords = ()。 int maxPage = (sumRecords%maxRecords==0)?(sumRecords/maxRecords):((sumRecords/maxRecords)+1)。 14 rootarticles = (maxRecords*getPage,(getPagemaxPage1)?maxRecords:sumRecordsmaxRecords*getPage)。 String name = null。 % 图 11 主题帖的展示图示 这 段代码 中 rootarticles 是将要 显示的 分页后 的帖子 ,通过调 用 ArticleDaoImpl类的getRootArticle(int startIndex, int maxResults)这个方 法来得到需要展示的帖子,返回的值是一个装了 Article类型的 List只要遍历这个 List我们就能取出每一条帖子了。 这个方法的代码如下: public List getRootArticle(int startIndex, int maxResults) { ListArticle list = new ArrayList()。 SessionFactory sf = ()。 Session session = ()。 ()。 Query q = (from Article article where =0 order by desc)。 list = (startIndex).setMaxResults(maxResults).list()。 ().mit()。 ()。 ()。 return list。 } 15 其中使用到了 Hibernate的 HSQL语言来取得数据库中的数据,返回装满信息的 List。 然后在 通过 遍历 %if(rootarticles!=null) { for(Article a : rootarticles) { % 来取得每条帖子的内容将他们展示在 trtd之中就能完美的解决分页的问题。 ( 3)详细内容的展现 当点击主题帖中的任意一条帖子是,就需要弹出他和他回复贴的详细内容,这就需要设计展示详细内容的页面来完成功能了 如下图 图 12详细信息展示帖示意图 图 12 详细信息展示帖示意图 这个页面的重要的地方也在于它的分页显示,但是详细页面的展示和主题帖的展示是有区别,主题帖展示的所有的主题信息的标题,而详细信息不仅要展示点击的主题帖子的内容和标题还要展示所有的它的子帖的所有内容,这就需要我们通过递归调用来得到所有的主题帖的子贴了。 递归这个思想是很奇妙的思想,他虽然有时候只有几段短短的代码,却能完成很多很难完成的任务,编写递归最重要的是找到程序的入口和停止递归的条件,我采用了如下设计 : public List getTreeArticles(Article article) { ArticleTree at = new ArticleTree()。 List list = new ArrayList()。 SessionFactory sf = ()。 Session session = ()。 ()。 Query q = (from Article article where 16 =+()+ order by asc)。 for(Article a:(ListArticle)()) { (a)。 } (list, article)。 ().mit()。 ()。 ()。 return list。 } getTreeArticles(Article article)这个方法传进去的是主题帖的对象,返回的是所有这个主题帖的子帖的 List,当然这个方法本身并没有递归的思想在里面但是需要注意的是这个方法所调用的一个方法 tree( list, article)这个方法是个递归的方法代码如下 public void tree(List list,Article article) { SessionFactory sf = ()。 Session session = ()。 ()。 Query q = (from Article article where =+()+order by asc)。 for(Article a :(ListArticle)()) { (a)。 if(()==0) { tree(list,a)。 } } ().mit()。 ()。 (sf)。 } 他通过一个判断语句 if判断 所得到的帖子的 isleaf字段是否为 0,如果是 0说明他还有子帖,就递归调用自身这个方法,循环往复,从而能把所有主题帖子的所有回复,甚至是针对回复的回复都给查找出来并且都存放在一个 List里面这样就能让调用这个方法的主体能够得到一个装满回复帖子的容器 List。 得到了 装满回复帖对象的容器的话下面就好办了 % UserDao ud = new UserDaoImpl()。 ArticleDao ad = new ArticleDaoImpl()。 Article art = new Article()。 ArticleTree at = new ArticleTree()。 art = (Article)(ARTICLE)。 int getPage = (Integer)(PAGEOFTREE)。 List treeArticle = (art)。 17 int maxRecord =()。 int recordOfPage = 6。 int totalPage = maxRecord%recordOfPage==0?maxRecord/recordOfPage:maxRecord/recordOfPage+1。 List articles = (treeArticle,getPage*recordOfPage,getPagetotalPage1?recordOfPage:maxRecordgetPage*recordOfPage)。 (getPagetotalPage1?recordOfPage:maxRecordgetPage*recordOfPage)。 String name =null。 User user =(User)(LOGINUSER)。 name = ()。 int homepage = 0。 homepage = (Integer)(HOMEPAGE)。 % getPage这个 int类型的变量在这个页面中有着举足轻重的作用,他是用来在各个页面间转换的关键变量,当前如果在第一页的话,若选择第二页就必须得到第二页的内容,点击第三也当然必须得到第三页的内容,这个 getPage就是完成这个功能的 int totalPage = maxRecord%recordOfPage==0?maxRecord/recordOfPage:maxRecord/recordOfPage+1。 List articles = (treeArticle,getPage*recordOfPage,getPagetotalPage1?recordOfPage:maxRecordgetPage*recordOfPage)。 通过双目运算符用 getPage来计算出各个页面所要取得的对应数据库中的信息,能够充分的达到功 能。 ( 4)注册功能的实现 注册是论坛里面不能缺少的功能,他的主要注意的方面就是表单的验证,有的程序用服务器端的表单验证,但是我缺更倾向于客户端的表单验证,因为这样可以大大的减少错误访问数据库的时间,这样也能更增加了论坛的性能。 在注册页面里面加上一段 js的验证代码这样就能完成表单的验证了: script language=javascript function checkreg() { var flag = true。 if (==) {alert(请输入用户名 )。 ()。 flag = false。 } if (3 || 20) {alert(用户名长度限制为 3 20 位 )。 ()。 18 flag = false。 } if (==) {alert(请输入密码 )。 ()。 flag = false。 } if (==) {alert(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。