基于struts框架的bbs系统计算机技术与科学专业毕业设计3稿内容摘要:

所在城市iconVarchar2(200)用户图像路径phoneVarchar2(20)联系电话qqVarchar2(20)qq号码realnameVarchar2(25)真实姓名accessnumNumber访问次数lastlogindateDate上次上线时间statusNumberDefault=00正常 1注销 isonlineNumberDefault=00下线 1在线gradeNumber等级(版主或普通用户) 论坛版区信息表字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号bbsnameVarchar2(200)Not Null论坛名bbsownerVarchar2(25)版主createtimeDate创建时间useridNumberFK会员id 主题信息表字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号titleVarchar2(200)Not Null主题名themecontextVarchar2(4000)主题内容bbsidNumberFK论坛iduseridNumberFK会员idcreatetimeDate发表时间 回帖信息表字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号ReplyContextVarchar2(4000)Not Null回复内容themeidNumberFK主题iduseridNumberFK会员idreplytimeDate回复信息字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号adminnameVarchar2(25)Not Null管理员名称adminpasswdVarchar2(30)Not Null管理员密码字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号contextVarchar2(2000)Not Null留言内容sendtimeDate发送时间senderVarchar2(30)发留言者statusNumberDefault=00未阅读 1已阅读 网站公告表字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号contextVarchar2(2000)Not Null 公告内容之所以这样设计数据表间关系,主要是考虑论坛中各个对象的相互关系,帖子属于板块,回复帖从属于主题帖,帖子的作者属于用户,因此板块、主题帖、回复帖是一层层的从属依赖关系,帖子的作者必须是论坛的用户,帖子不能脱离板块、用户而单独存在。 5 系统的具体实现和测试本论坛系统完成之后,就必须设计许多的测试用例来验证本系统的正确性,容错能力和恢复能力,信息安全性,可靠性等,尽可能多地找出系统的错误所在。 用户验证性实现和测试本论坛是一个私有论坛,任何想进入论坛的用户都必须是论坛的会员,所以要想进入论坛就必须得先注册,成为论坛的会员后,才能享受论坛带来的服务。 用户在浏览器中输入地址:://localhost:8000/2009_BBS/,系统会自动跳到登陆页面,对于非注册用户,即可点击注册按钮进入注册界面。 如下图:图 用户注册页面当用户在此页面上输入用户信息后,点击注册按钮后会通过javascript验证输入的正确性,如判断用户名的长度,密码的长度等等。 然后进入RegisterAction,RegisterAction中的execute方法里的关键代码如下:public String execute(){IUserinfoService userinfoService = (IUserinfoService) (userinfoService)。 //获得Bean HttpServletRequest request=()。 //获得请求 HttpSession session=()。 //获得session BbsUserinfo userinfo=new BbsUserinfo()。 //创建用户对象 //设置属性 ()。 ()。 ()。 ()。 ()。 //设置性别 ()。 ()。 ()。 ()。 ()。 //判断年龄的长度 if(!=null||().length()!=0){ (new Long().longValue())。 } try { (userinfo)。 //调用register方法 (message, 注册成功)。 return success。 //返回success } catch (UserinfoServiceException e) { (message, ())。 }return failure。 }用户注册必须填写相关的用户信息,但是用户在填写这些信息时未必会按照系统所能接受的数据格式,比如填写年龄时可能会不小心输入一个字母,如果系统不对这些输入的表单进行验证,则会出现某些严重的错误。 以下代码为对用户注册时的必要表单验证:function validate(form){ var name =。 //获得注册表单用户名 var passwd =。 //获得注册表单密码 var passwordpr =。 //获得注册表单重复密码 var telephone =。 var age =。 var =。 var answer =。 if(name==null||==0||=6){//判断用户名 alert(请输入用户名。 )。 return false。 } else if(passwd==null||==0||6){ //判断密码 alert(请输入正确密码。 )。 return false。 }else if(passwordpr==null||==0){//重复密码 alert(请再次输入密码。 )。 return false。 }else if(passwd!=passwordpr){//判断密码和重复密码是否相同 alert(两次输入的密码不一致)。 return false。 }else if(answer==null||==0||6){//判断密码提示问题 alert(请按照要求填写,该答案有助于帮助你在忘记密码时,帮你找回。 )。 return false。 }else if(==null||==0){//判断邮箱是否为空 alert(请输入你的邮箱。 )。 return false。 }else if(isEmail()==false){//判断邮箱的格式是否符合标准 alert(请输入你正确的邮箱号码。 )。 return false。 }else if(age==null||==0||isNumber(age)==false){//判断年龄是否为空 alert(请输入你的正确年龄。 )。 return false。 }else if(isNumber(age)==false){//判断年龄是否符合要求 alert(年龄必须为数字)。 return false。 } else if(telephone==null||==0||10){//判断手机号码是否为空 alert(请输入你的手机号)。 return false。 }else if(isTel(telephone)==false){ alert(电话号码有误)。 return false。 }else{ return true。 }}Action中对传入的用户信息包装到pojo类,调用service层的register方法,在此方法中先对用户输入的用户名到数据库查找,如果此用户名已经被使用,则能在根据用户名能在数据库中找到,此时要提示用户该用户名已经被使用。 用户注册时要把用户的状态设置为非注销状态,用户的初始等级为普通用户,把用户保存到数据库中要在service层进行事务控制,但Hibernate的session不能在dao层关闭,因为service层的一个方法可能对应于dao层的多个方法,如果session在dao层关闭了,则同一个事务处理的session就不是同一个了。 所以session的关闭应该放在Filter中。 Service层的注册方法如下://注册方法public void register(BbsUserinfo userinfo) throws UserinfoServiceException { //事物控制 开始 Transaction tran = new HibernateTransaction()。 ()。 try { BbsUserinfo info = (())。 //查找用户名 if (info != null) { throw new UserinfoServiceException(用户名已经使用)。 } ((()))。 //给密码加密 (0l)。 //设置在线状态 (0l)。 (普通用户)。 //设置用户等级 (userinfo)。 //更新用户 ()。 //提交事务 } catch (Exception e) { ()。 //回滚 if (e instanceof UserinfoServiceException) throw (UserinfoServiceException) e。 ()。 }}如下图所示为登陆页面: 登陆页面当用户注册成功后返回提示注册成功并跳到登陆页面等待登陆,用户在登陆页面输入正确的用户名和密码后提交请求,跳到LoginAction中,调用service层的login方法,通过输入的用户名查找数据库中是否存在该用户,如果存在,则返回一个BbsUserinfo类型的对象,然后判断密码是否正确,如果用户名不存在,则登陆失败,并告诉用户输入的用户名不存在,如果用户在登陆界面选择了自动登陆,则用户在一天内可以直接进入系统而不用再输入用户名和密码,登陆的server层关键代码如下:public BbsUserinfo login(String username, String password) throws UserinfoServiceException {//登陆方法 BbsUserinfo userinfo = null。 try { userinfo = (username)。 //从数据中查找用户名 if (userinfo == null) { throw new UserinfoServiceException(用户名不存在)。 } String passwd = (password)。 if (!().equals(passwd)) { throw new UserinfoServiceException(密码错误)。 }//判断输入的密码和数据库中的密码是否一样 return userinfo。 //返回userinfo对象 } catch (Exception e) { if (e instanceof UserinfoServiceException) throw (UserinfoServiceException) e。 ()。 }return null。 //返回空} 论坛功能实现和测试当用户登陆验证成功后,进入AfterLoginAction中,在此action中,通过session取得登陆进来的用户对象,设置此用户的登陆次数,在线状态,上次登陆时间,并将相应信息保存到session中。 此action执行完后,进入bbsAction中。 bbsAction是用户登陆成功要经历的一个重要action,这个action要找出当前系统中的所有版区,所有主题,所有回复,并且要找出当日主题和当日的回复信息,并且找出管理员发表的网站公告。 得到这些信息后将其保存在web应用的session范围内,如下所示:/**找出今日主题*/List todayThemes = new ArrayList()。 if (themeList != null) { for (Object o : themeList) {//遍历themeList集合 BbsThemeinfo themeinfo = (BbsThemeinfo) o。 Calendar calendar = new GregorianCalendar()。 (())。 //创建的时间 int Day = ()。 int year = ()。 (new Date())。 //设置时间为系统的当前时间 int today = ()。 int thisYear = ()。 if (Day == today amp。 a。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。