《毕业设计论文基于JSP的BBS论坛管理系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于JSP的BBS论坛管理系统设计.doc(42页珍藏版)》请在三一办公上搜索。
1、内蒙古科技大学毕业设计说明书(毕业论文)基于JSP论坛系统摘 要论坛,即常说的BBS(Bulletin Board System电子公告板)随着互联网的大范围高速普及,论坛在人们的网络生活中正变得越来越重要。目前,通过BBS系统可随时取得各种最新的信息;也可以通过BBS系统来和别人讨论计算机软件、程序设计、个人爱好、汽车、音乐等等各种有趣的话题。和大多数论坛系统一样,实现了注册、登录、密码找回、修改密码、发表主题、回复主题及后台管理等功能,旨在为人们提供更为安全便捷的汽车信息交流平台。线上线下,大家聊天聊车聊生活。本系统采用了J2EE企业级技术解决方案,涉及了目前Java世界中的多个主流技术,
2、主要有JSP,servlet,MVC模式等。使用了Eclipse,Tomcat,MySQL等工具。关键词:论坛;J2EE;MySQL;Tomcat容器;MVC模IKey words:Forum; J2EE; MySQL; JSP; Servlet; JavaBean;Tomcat; MVC pattern目录摘 要IAbstract错误!未定义书签。第一章 绪论31.1 研究背景31.2 J2EE的技术优势3第二章 J2EE技术简介与开发工具介绍62.1 MySQL62.1.1 MySQL简介62.1.2 MySQL系统特点62.1.3 数据库的基本概念72.1.4 数据库系统结构72.2 T
3、omcat简介82.3 J2EE技术82.3.1 J2EE简介82.3.2 JSP技术介绍92.3.3 Servlet技术介绍102.3.4 JavaBean技术介绍10第三章 汽车之家论坛系统分析113.1 需求分析总述113.2 功能需求详细描述113.2.1 个人中心子系统功能需求113.2.2 后台管理子系统功能需求113.3 系统运行环境12第四章 汽车之家论坛系统设计134.1 总体设计134.1.1 系统功能模块介绍134.1.2 实体关系图134.2 详细设计154.2.1 个人中心子系统详细设计154.2.2 后台管理子系统详细设计154.3 数据库设计164.4 系统业务流
4、程描述17第五章 汽车之家系统实现195.1 概述195.2 个人中心子系统实现195.2.1 数据库操作代码195.2.2 会员注册页面235.2.3 会员登录页面245.2.4 找回密码页面255.2.5 修改密码页面275.2.6 个人信息页面285.2.7 管理贴页面295.2.8 查看所有主贴及搜索页面305.2.9 发表主题页面325.2.10 查看主题页面345.2.11 回复主题页面345.3 后台管理子系统实现355.3.1 管理员登录页面355.3.2 后台管理页面36第六章 汽车之家系统设计总结38致谢.37参考文献.38第一章 绪论1.1 研究背景人类正在进入一个信息化
5、时代。这个时代以计算机技术的发展为基础以互联网为主要工具与手段在政治、经济、传播等诸多方面日益展现出与过往一切时代皆不同的面貌。目前中国的网民人数略低于美国的2.15亿,位于世界第二位,并且该数字还一直在上升。Tom Online对中国网民上网习惯的统计显示:热衷于即时通信的网民所占比例最多,为39.7%之多;次之,网民热衷于网络新闻,占总比例的20.0%。专家指出,从汽车行业到互联网行业,任何一个行业都有价值回归的过程。只是这个过程的长短而已,为吸引更多的人上网,当前需要做的工作是要利用利用好现有资源,利用软件技术持之以恒的实现互联网的附加服务。1.2 J2EE的技术优势J2EE是一种利用J
6、ava 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。J2EE体系结构提供中间层集成框架用来满
7、足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:1).保留现存的IT资产: 由于企业必须适应新的商业需求,利用已有的企业信息系统方面的投资,而不是重新制定全盘方案就变得很重要。这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有系统之上的服务器端平台机制是公司所需求的。J2
8、EE架构可以充分利用用户原有的投资,如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker以及Netscape Application Server。这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的“企业计算”领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。2).高效的开发:J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集
9、中精力在如何创建商业逻辑上,相应地缩短了开发时间。3).支持异构环境:J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。4).可伸缩性:企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。5).稳定的可用性:一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失。若是意外停机,
10、那会有灾难性后果。J2EE部署到可靠的操作环境中,他们支持长期的可用性。第二章 J2EE技术简介与开发工具介绍2.1 MySQL2.1.1 MySQL简介MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。2.1.2 MySQL系统特点1).使用C和C+编写,并使用了多种编译器进行测试,保证源代码的可移植性。2).支持AIX、FreeBS
11、D、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。3).为多种编程语言提供了API。这些编程语言包括C、C+、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。4).支持多线程,充分利用CPU资源。5).优化的SQL查询算法,有效地提高查询速度。6).既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。7).提
12、供TCP/IP、ODBC和JDBC等多种数据库连接途径。8).提供用于管理、检查、优化数据库操作的管理工具。9).可以处理拥有上千万条记录的大型数据库。2.1.3 数据库的基本概念数据库系统DBS(Data Base System,简称DBS)是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效
13、使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。2.1.4 数据库系统结构如图示:图2.1 数据库系统结构2.2 Tomcat简介Tomcat是Apache软件基金下的一个开源项目,是在SUN的JSWDK的基础上发展起来的另一个优秀的JSP服务器,它不但支持Servlet,而且还提供了Web服务器的功能。Tomcat是一个基于HTTP协议的web appclcation server ,能够接收Http请求和返回Http应答。Tomcat内置了一个web容器catalina,主要就是实例化web组件(servlet,jsp)和创建一些java对象(HttpServletResque
14、st、HttpServletResponse),启动一个线程去调用web组件,并且将前面创建的这些对象传给servlet,HttpServletRequest里面包含了Browser这一端传过来的数据信息,我们在servlet里面就可以去获取到这些信息。HttpServletResponse对象提供了一些方法,可以往Browser这一端发送数据。2.3 J2EE技术2.3.1 J2EE简介在SUN公司制定的J2EE规范中,JSP,Servlet,EJB构成了整个J2EE的核心,但由于开源软件的发展,由许多商业性或者非商业性的厂商或组织对整个J2EE规范做了增强。目前,整个J2EE框架的开发模型
15、如下:1).运行在客户端机器上的客户层组件。2).运行在J2EE服务器上的Web层组件。3).运行在J2EE服务器上的业务逻辑层组件。4).运行在EIS服务器上的企业信息系统(Enterprise information system)层软件。图2.2 J2EE框架的开发模型其中在各层使用的主要技术如下:1).客户层:HTML,Javascript,Ajax2).表现层:JSP,Servlet,Struts3).业务逻辑层:JavaBean,EJB,Spring4).集成层(持久化层):JDBC, Hibernate,JCA本系统采用的主要技术如下:HTML+Javascript+JSP+Se
16、rvlet+ JavaBean2.3.2 JSP技术介绍1).JSP是由SUN公司倡导、许多公司参与一起建立的一种动态网页技术标准。2).JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。3).JSP的本质就是Servlet,它是Servlet技术的扩展。4).在整个J2EE体系中,JSP的主要技术优势在于显示数据。2.3.3 Servlet技术介绍1).Servlet由Sun公司倡导,许多公司参与一起建立的一种服务器端技术标准。2).如果把HTML代码中嵌入Java代码称作为JSP,那么在Java代码中嵌入HTML代码
17、就是Servlet。3).在整个J2EE体系中,Servlet的主要技术优势在于流程控制。2.3.4 JavaBean技术介绍1).JavaBean也是一种开发标准,只是这个标准不要求严格的执行。2).JavaBean是一种Java类,它遵从一定的设计模式,使它们易于和其他开发工具和组件一起使用。3).主要特点包括:提供一个无参构造器,一组setXxx和getXxx方法,还可能存在一些业务逻辑方法。4).JavaBean的技术优势:简单,与任何Web容器无耦合,善长于处理业务逻辑。第三章 汽车之家论坛系统分析3.1 需求分析总述汽车之家论坛系统是为了给那些爱好汽车的人提供一个网上交流的平台,在
18、网上提供现实论坛所需的各种交流手段,以服务广大汽车爱好者为主,强调互动性、知识性、趣味性,是结交车友,了解信息好去处。整个系统主要包括会员个人中心、论坛后台管理系统。3.2 功能需求详细描述本系统分为两个子系统,现分别描述如下:3.2.1 个人中心子系统功能需求此子系统将实现一下功能:1).注册:填写个人信息与登录用户名和密码成为汽车之家论坛用户。2).登录:用注册过的用户名及密码进入汽车之家论坛。3).找回密码:系统会将用户忘记的登录密码发回用户的注册电子邮箱中。4).修改密码:用户修改被泄露或不在安全的登录密码。5).发表新主题:发表新的话题。6).回复:回复评论话题。7).搜索:用户可以
19、利用此功能,方便的找到所希望得到的信息、资料。8).帖子管理:用户对自己发表的帖子进行删除操作,同时删除回复。3.2.2 后台管理子系统功能需求此后台管理子系统将实现一下功能:1).查看:查看所有注册用户信息。2).操作:对某些用户进行删除操作。3.3 系统运行环境采用B/S架构,使用j2se1.5.0_06运行环境服务器操作系统:Windows数据库服务器:MySQLWeb服务器:Apache Tomcat第四章 汽车之家论坛系统设计4.1 总体设计本系统共分为4层,分别为客户层,表现层,业务逻辑层,持久化层。在各层采用的主要技术如下所示:客户层:HTML,Javascript表现层:JSP
20、,Servlet,Struts业务逻辑层:JavaBean持久化层:JDBC4.1.1 系统功能模块介绍1).注册模块:提交并处理用户信息,完成注册。2).登录模块:监测数据库中用户信息是否存在及匹配,提供给用户相应的权限。3).找回密码模块:将用户忘记的密码发回到用户的注册邮箱。4).发新主题及回复主题模块:将用户发表的新主题和回复主题提交并处理。5).搜索主题模块:在数据库中按主题和发帖时间搜索主题。6).个人信息管理模块:在数据库中删除用户本人发表的主题、修改用户登录密码。7).后台管理模块:持有管理员权限的人可以对长期未登录的用户进行删除操作。4.1.2 实体关系图本系统开发过程中,划
21、分了两个子系统。ER图如下所示:个人中心子系统:图4.1 个人中心子系统ER图后台管理子系统:图4.2 后台管理子系统ER图4.2 详细设计4.2.1 个人中心子系统详细设计1).注册模块:在register.jsp页面中,需要用户填写用户名(在本数据库中唯一)、密码、邮箱(以备找回密码时需要)、昵称,然后提交到相应的处理类,最后写入数据库。2).登录模块:让用户在login.jsp页面中输入用户名和相对应的登录密码,提交到相应的处理类后从数据库中查找用户名是否存在,用户名和密码是否匹配,如是,则跳转到登录成功页面,否则跳转到login.jsp并提示错误信息。3).找回密码模块:在findba
22、ckpassword.jsp页面中,用户输入忘记了密码的用户名并提交,相应的处理类接收到用户名后,在数据库中查找该用户名对应的密码和邮箱并返回到相应的处理类,该处理类将密码发送到返回的邮箱中(即该用户对应的注册邮箱)。4).发新主题、回复模块:发新主题和回复在处理过程上很相似,只是最后写入两张数据库表中。从页面获取用户输入的主题和文本,提交到相应的处理类,最后写入数据库。5).搜索主题模块:搜索分为按主题搜索和按发表时间搜索。从页面获取将要搜索的主题或者时间,在数据库中搜索并返回满足条件的主题。6).个人信息管理模块:包括删除用户本人发表的主题和修改用户本人登录密码。当用户登录成功后,进入管理
23、帖子页面,该页面显示了用户发表的所有主题,选中将要操作的主题后,点击删除,将从数据库中删除该用户名所对应的并被选中的ID的所有的帖子,该操作不可恢复。修改密码时,得到用户提交的用户名、旧密码、新密码后,在数据库中查找用户名和旧密码是否匹配,若匹配则用新密码覆盖旧密码,否则提示错误信息。4.2.2 后台管理子系统详细设计该模块是系统管理员管理用户信息的页面。持有管理员权限的人可以对长期未登录的用户进行删除操作。管理员通过提交删除请求对数据库users表进行操作。4.3 数据库设计该论坛系统共涉及三张表,分别是:用户表 (该表记录了用户的注册信息)、 主贴表 (该表记录了用户发表的新主题)、 回帖
24、表 (该表记录了用户对主题的回复)。本系统采用MySQL数据库,表的结构如下所示:表4.1 用户表字段名字段类型约束或者索引描述usernovarcharnot nul用户名passwordvarcharnot nul登录密码usernamevarcharnot nul昵称emailvarcharnot nul注册邮箱createtimedatetimenot nul用户名创建时间beforetimedatetimenot nul上次登录时间表4.2 主贴表字段名字段类型约束或者索引描述idintauto_increment主题IDusernovarcharnot nul发表该主题的用户use
25、rnamevarcharnot nul发表该主题的用户昵称titlevarcharnot nul主题的标题contexttextnot nul主题的文本createtimedatetime发表时间表4.3 回帖表字段名字段类型约束或索引描述idtieintnot null该贴所回复的主贴的IDusernovarcharnot null发表该回复的用户名usernamevarcharnot null发表该回复的用户昵称contexttextnot null回复的文本createtimedatetime回复时间4.4 系统业务流程描述业务流程简要说明了系统提供的功能和对应权限所能执行的操作。分为两
26、部分:用户业务流程和管理员业务流程。4.4.1用户业务流程图如下:图4.3用户业务流程说明:用户业务流程所提供的管理贴功能中删除贴具有不可恢复性,请用户慎重操作。修改密码功能在未登录前提下也可使用,但同样需要密码验证。4.4.2管理员业务流程图如下:图4.4 管理员业务流程说明:管理员业务流程所提供的删除用户功能也具有不可恢复性,请慎重操作。第五章 汽车之家系统实现5.1 概述本文为了方便描述,以JSP页面设计为中介进行系统实现说明,一般的说明步骤为:1). JSP页面所代表的功能描述2).显示界面3.显示相关核心代码5.2 个人中心子系统实现5.2.1 数据库操作代码本系统的几乎所有操作都是
27、与数据库通信且交换数据,下面是数据库连接及操作代码:/一下代码定义与数据库建立连接的方法public Connection getCon() Connection con = null; try Class.forName(com.mysql.jdbc.Driver);/获取mysql驱动 catch (ClassNotFoundException e1) System.out.println(驱动加载错误!); e1.printStackTrace(); String url=jdbc:mysql:/localhost/bbs?user=root&password=mysql; try co
28、n= DriverManager.getConnection(url);/拿到链接 catch (SQLException e) System.out.println(数据连接错误!);e.printStackTrace(); return con; /以下代码定义执行sql语句方法并返回结果集 public ResultSet getQuery(String sql) Connection conn=getCon(); Statement stt=null; ResultSet rs = null; trystt=conn.createStatement();rs=stt.executeQu
29、ery(sql); catch(Exception e)e.printStackTrace(); return rs; /以下代码定义插入数据库方法 public int insert(String sql) Connection conn=getCon(); Statement stt=null; int n=0; try conn.setAutoCommit(false); stt=conn.createStatement(); n=stt.executeUpdate(sql); mit(); catch (SQLException e) try conn.rollback(); catc
30、h (SQLException e1) e1.printStackTrace(); e.printStackTrace(); finallytry stt.close(); conn.close(); catch (SQLException e) e.printStackTrace(); return n; /以下代码定义从数据库中删除记录方法 public void delete(String sql) Connection conn=getCon(); Statement stt=null; try conn.setAutoCommit(false); stt=conn.createSta
31、tement(); for(int i=0;isql.length;i+) stt.executeUpdate(sqli); mit(); catch (SQLException e) try conn.rollback(); catch (SQLException e1) e1.printStackTrace(); e.printStackTrace(); finally try stt.close(); conn.close(); catch (SQLException e) e.printStackTrace(); /以下代码定义数据库逐条删除记录方法 public void delet
32、e(String sql) Connection conn=getCon(); Statement stt=null; try conn.setAutoCommit(false);stt=conn.createStatement();stt.executeUpdate(sql);mit(); catch (SQLException e) try conn.rollback(); catch (SQLException e1) e1.printStackTrace(); e.printStackTrace(); finally try conn.setAutoCommit(true); stt.
33、close(); conn.close(); catch (SQLException e) e.printStackTrace(); /以下代码定义更新数据库操作方法 public int update(String sql) Connection conn=getCon(); Statement stt=null; int n=0; try conn.setAutoCommit(false);stt=conn.createStatement();n=stt.executeUpdate(sql);mit(); catch (SQLException e) try conn.rollback()
34、; catch (SQLException e1) e1.printStackTrace(); e.printStackTrace(); finallytry stt.close();conn.close(); catch (SQLException e) e.printStackTrace(); return n; 5.2.2 会员注册页面此页面实现会员注册功能。注册界面如下:图5.1注册界面注册页面核心代码如下:user.setUserno(request.getParameter(“userno”);user.setPassword(request.getParameter(“passw
35、ord”);user.setUsername(request.getParameter(“username”);user.setEmail(request.getParameter(“email”);/接受JSP传过来的参数,设置到/userbeanpublic boolean add(UserBean user) /定义添加用户方法String sql=”insert into users values (”+user.getUserno()+”,”+user.getPassword()+”, ”+user.getUsername()+”,”+user.getEmail()+”,”+user
36、.getDate()+”,”+user.getDate()+”)”;/将注册信息插入数据库语句String sql2=”select * from users where userno=”+user.getUserno()+”;/查询数据库中是否已存在用户名5.2.3 会员登录页面此页面实现会员登录功能。登录界面如下: 图5.2 登录界面登录页面核心代码如下:user.setUserno(request.getParameter(“userno”);user.setPassword(request.getParameter(“password”);/将登录页面提交的用户名和密码设置在userb
37、enpublic UserBean findUser(UserBean user) /定义方法在数据库中查找用户String sql=”select * from users where userno=”+user.getUserno()+” and password=”+user.getPassword()+”; / 构造查询语句5.2.4 找回密码页面此页面实现找回密码功能,当用户忘记密码时,可以通过此页面所提供的功能重新设置密码。只需输入用户名,系统将会把密码发送到该用户名对应的注册邮箱中。找回密码页面界面如下:图5.3 找回密码界面找回密码页面核心代码如下:public UserBea
38、n findbackPassword(UserBean user)/从数据库中返回用户名所/对应的用户的信息String sql=”select * from users where userno=”+user.getUserno()+”;UserBean user1=new UserBean(); 实例化一个users ResultSet rs; /定义一个结果集 try rs=db.getQuery(sql);/执行数据库查询语句if(!rs.next() /用户不存在则返回空return null;else /否则将用户信息设置在接受的users中user1.setPassword(rs
39、.getString(“password”);user1.setEmail(rs.getString(“email”); catch (Exception e) e.printStackTrace(); return user1; /最后返回接受了用户信息的users String address = null; /jsp页面地址初始化为nullUserBean user = new UserBean(); /user用来接受jsp页面发送的请求参数UserBean user2 = new UserBean(); /user2用来接受userManager返回的带用户信息的usersUserM
40、anager userManager = new UserManager();try user.setUserno(request.getParameter(“userno”);/接受jsp请求 catch (Exception e) e.printStackTrace(); user2 = userManager.findbackPassword(user); /接受userManager信息if(user2=null)request.setAttribute(“message”, “该用户不存在”);address=”findpassword.jsp”;elseString passwor
41、d = user2.getPassword(); /取回密码String emailaddress = user2.getEmail(); /取回邮箱地址request.setCharacterEncoding(“utf-8”);/设置jsp页面编码SimpleEmail email = new SimpleEmail();email.setHostName(“”);/设置邮件服务器email.setAuthentication(“wanghl765”, “592641”);/用户名密码验证email.setCharset(“utf-8”);/设置邮件编码try email.setFrom(“
42、wanghl765”);/设置发件人email.addTo(emailaddress);/添加收件人email.setSubject(“汽车之家登录密码”);/设置主题email.setMsg(“你的登录密码是:”+password);/ 设置邮件内容email.send();/发送邮件 catch (EmailException e) e.printStackTrace();request.setAttribute(“message”, “你的密码已经发送到你的注册邮箱中”);address=”passwordsendout.jsp”;5.2.5 修改密码页面此页面实现修改密码功能。当用户觉
43、得密码泄露时,通过该页面提供的功能修改密码。当用户名和旧密码相匹配时,系统会将新密码写入数据库作为该用户的新密码,下次登录时就该用新密码登录了。修改密码页面界面如下:图5.4 修改密码界面修改密码页面核心代码如下:user.setUserno(request.getParameter(“userno”);user.setPassword(request.getParameter(“oldpassword”);/接受用户名和旧密码public void updatePassword(String userno,String newpassword)/定义修改密码方法String sql=”update users set password=”+newp