跳转返回到主页。3.1.1.3删除主题模块分析
在主页中点击发表新主题,就会跳转到一个post.jsp页面,在标签中添加了两个表单,type为text类型,用于存放标题和内容。
在标题栏和内容栏中输入新帖子信息,点击submit提交,在JavaScript语句中接收到内容,连接到数据库将数据插入到数据库中,返回首页刷新,就可在首页看到新添加的主题。
3.1.1.4发表主题模块分析
在主页每个主题都有一个删除的链接,点击链接会跳转到delete.jsp页面,此链接会将主题的ID传给delete.jsp页面,在delete.jsp中连接数据库,根据传来的主题ID执行删除操作,将此主题的信息全部删除,若删除成功则显示“deletesuccess!
”并返回。
3.1.2后台管理
后台管理主要由管理员使用,可对论坛中相关信息进行管理、维护,普通用户无权使用。
后台管理主要包括用户管理、主题管理、管理员注销等功能模块。
BBS系统后台功能结构如图3.1.2所示。
后台功能模块
用户管理
主题管理
后台登录
删除用户
查询用户
主题删除
主题查询
管理员注销
主题添加
图3.1.2BBS系统后台功能结构图
3.1.3数据库分析
数据是系统的基础,数据库设计关系到系统开发的成败,因此这一环节在系统开发中显得尤为重要。
数据库设计就像一座建筑的地基一样,如果设计不合理,将会影响到整个系统开发的全过程,甚至会给后期维护带来极大的不便。
1、用户实体对象
用户实体包括用户编号(userid)、用户名(username)、密码(password)、性别(sex)、Email(email)、QQ号(qq)、签名(signature)、用户级别(grade)、地址(address)、头像(image)、用户真实姓名(reslname)等用户相关属性。
用户名是识别用户实体的唯一编号,也是数据表的主键,数据类型为int型;密码是用于用户登录验证;用户级别属性是标明用户在本系统的功能权限;其他属性都是描述此用户相关属性。
用户实体E-R图如图3.1.3.1所示。
图3.1.3.1用户实体E-R图
2、主题实体对象
主题实体包括主题ID(id)、父节点ID(pid)、根贴ID(rootid)、标题(title)、内容(cont)、发表时间(pdate)、是否有叶子节点(isleaf)等相关属性。
主题ID是识别主题实体的唯一编号,为主键,数据类型为int型;其他属性都是用于描述主题实体对象相关属性。
主题实体E-R图如图3.1.3.2所示。
图3.1.3.2主题贴E-R图
3.2主要类图
用户登录类,论坛类,主题类三者之前的关系如下类图所示:
图3.1后台模块类图
4具体代码实现(主要源代码)
//struts.xmlstruts配置文件定义了各种action和result
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN"
"">
/admin/{1}_{2}.jsp
/admin/{1}_{2}.jsp
/Category_list.jsp
//Category.java论坛实体类
packageorg.zz.bbs.model。
publicclassCategory{
privateStringcreatetime。
//创建时间
privateStringdescription。
//论坛描述
privateintid。
//论坛id
privateStringmanager。
//论坛版主
privateStringcategoryname。
//论坛名称
publicStringgetCreatetime(){
returncreatetime。
}
publicStringgetDescription(){
returndescription。
}
publicintgetId(){
returnid。
}
publicStringgetManager(){
returnmanager。
}
publicvoidsetCreatetime(Stringcreatetime){
this.createtime=createtime。
}
publicvoidsetDescription(Stringdescription){
this.description=description。
}
publicvoidsetId(intid){
this.id=id。
}
publicvoidsetManager(Stringmanager){
this.manager=manager。
}
publicvoidsetCategoryname(Stringcategoryname){
this.categoryname=categoryname。
}
publicStringgetCategoryname(){
returncategoryname。
}
}
//UserLogin.java用户实体类
packageorg.zz.bbs.model。
publicclassUserLogin{//用户登录
privateStringuserid。
//用户密码
privateStringusername。
//用户名
privateStringpassword。
//密码
publicStringgetUsername(){
returnusername。
}
publicvoidsetUsername(Stringusername){
this.username=username。
}
publicStringgetPassword(){
returnpassword。
}
publicvoidsetPassword(Stringpassword){
this.password=password。
}
publicvoidsetUserid(Stringuserid){
this.userid=userid。
}
publicStringgetUserid(){
returnuserid。
}
}
//CategoryAction.java论坛的增、删、改、查action
packageorg.zz.bbs.action。
importjava.util.List。
importorg.zz.bbs.model.Category。
importorg.zz.bbs.service.CategoryService。
importcom.opensymphony.xwork2.ActionSupport。
//Category的增、删、改、查并返回到具体视图
publicclassCategoryActionextendsActionSupport{
privateListcategories。
privateCategoryServicecategoryService=newCategoryService()。
//Spring框架中会进化
privateCategorycategory。
privateintid。
publicStringlist(){
categories=categoryService.list()。
returnSUCCESS。
}
publicStringadd(){
categoryService.add(category)。
returnSUCCESS。
}
publicStringupdate(){
categoryService.update(category)。
returnSUCCESS。
}
publicStringdelete(){
categoryService.deleteById(id)。
returnSUCCESS。
}
publicStringaddInput(){
returnINPUT。
}
publicStringupdateInput(){
this.category=this.categoryService.loadById(id)。
returnINPUT。
}
publicListgetCategories(){
returncategories。
}
publicvoidsetCategories(Listcategories){
this.categories=categories。
}
publicCategoryServicegetCategoryService(){
returncategoryService。
}
publicvoidsetCategoryService(CategoryServicecategoryService){
this.categoryService=categoryService。
}
publicCategorygetCategory(){
returncategory。
}
publicvoidsetCategory(Categorycategory){
this.category=category。
}
publicintgetId(){
returnid。
}
publicvoidsetId(intid){
this.id=id。
}
}
//UserLoginAction.java用户登录action
packageorg.zz.bbs.action。
importjava.sql.SQLException。
importorg.zz.bbs.model.UserLogin。
importorg.zz.bbs.service.UserLoginService。
importcom.opensymphony.xwork2.ActionSupport。
// 用户注册
publicclassUserLoginActionextendsActionSupport{
privateStringusername。
privateStringpassword。
privateUserLoginuserlogin。
privateUserLoginServiceuserloginservice=newUserLoginService()。
publicStringisValidate(){
try{
if(userloginservice.isValidate(userlogin,username,password)){
System.out.println("返回到成功页面")。
//调试是否进入此函数
returnSUCCESS。
}
}catch(SQLExceptione){
e.printStackTrace()。
}
System.out.println("返回到失败页面")。
//调试是否进入此函数
returnERROR。
}
publicUserLogingetLogin(){
returnuserlogin。
}
publicvoidsetLogin(UserLoginuserlogin){
this.userlogin=userlogin。
}
publicStringgetUsername(){
returnusername。
}
publicvoidsetUsername(Stringusername){
this.username=username。
}
//CategoryService.java论坛Service,用于连接数据库的基本操作
packageorg.zz.bbs.service。
importjava.sql.Connection。
importjava.sql.PreparedStatement。
importjava.sql.ResultSet。
importjava.sql.SQLException。
importjava.util.ArrayList。
importjava.util.List。
importorg.zz.bbs.model.Category。
importorg.zz.bbs.util.DatebaseConnection。
。
//DB'sCURD
publicclassCategoryService{
publicvoidadd(Categoryc){
Connectionconn=DatebaseConnection.createConn()。
Stringsql="Insertinto_categoryvalue(null,?
?
?
null)"。
PreparedStatementps=DatebaseConnection.prepare(conn,sql)。
try{
ps.setString(1,c.getCategoryname())。
ps.setString(2,c.getDescription())。
ps.setString(3,c.getManager())。
ps.executeUpdate()。
}catch(SQLExceptione){
e.printStackTrace()。
}
DatebaseConnection.close(ps)。
DatebaseConnection.close(conn)。
}
publicListlist(){
Connectionconn=DatebaseConnection.createConn()。
Stringsql="select*from_category"。
PreparedStatementps=DatebaseConnection.prepare(conn,sql)。
Listcategories=newArrayList()。
try{
ResultSetrs=ps.executeQuery()。
Categoryc=null。
while(rs.next()){
c=newCategory()。
c.setId(rs.getInt("id"))。
c.setCategoryname(rs.getString("categoryname"))。
c.setDescription(rs.getString("description"))。
c.setDescription(rs.getString("manager"))。
c.setDescription(rs.getString("createtime"))。
categories.add(c)。
}
}catch(SQLExceptione){
e.printStackTrace()。
}
DatebaseConnection.close(ps)。
DatebaseConnection.close(conn)。
returncategories。
}
publicvoiddelete(Categoryc){
deleteById(c.getId())。
}
publicvoiddeleteById(intid){
Connectionconn=DatebaseConnection.createConn()。
Stringsql="deletefrom_categorywhereid=?
"。
PreparedStatementps=DatebaseConnection.prepare(conn,sql)。
try{
ps.setInt(1,id)。
ps.executeUpdate()。
}catch(SQLExceptione){
e.printStackTrace()。
}
DatebaseConnection.close(ps)。
DatebaseConnection.close(conn)。
}
publicvoidupdate(Categoryc){
Connectionconn=DatebaseConnection.createConn()。
Stringsql="update_categorysetcetegoryname=?
description=?
manager=?
whereid=?
"。
PreparedStatementps=DatebaseConnection.prepare(conn,sql)。
try{
ps.set
展开阅读全文
相关搜索