1、 本科生课程实习课程名称 Web 开发技术课程实习课程编号 j1620108学号学生姓名所在专业 计算机科学与技术所在班级指导教师成绩教师签字课程实习时间:2012 年 5月 14日 至 5 月 18日评语:2目 录1、开发背景 32、需求分析 33、系统设计 33.1、系统目标 .33.2、系统功能结构 .33.3、系统浏览 .43.4、业务流程图 .83.5、程序运行环境 .84、数据库设计 84.1、数据库概要说明 .84.2、数据库概念设计 .84.3、数据库逻辑结构设计 .114.4、文件夹组织结构 .125、公共类设计 135.1、数据库公共类 .135.2、编码转换公共类 .15
2、6、登录模块 156.1、登录模块概述 .156.2、登录模块技术分析 .167、注册模块 167.1、注册模块概述 .167.2、注册模块的实现 .168、论坛的主页面设计 188.1、论坛主页面概述 .188.2、论坛主页面的实现 .199、主题 显示模块 219.1、主题显示模块概述 .219.2、主题显示模块的设计 .2110、主题内容显示与回复内容显示 2310.1、设计概念 .2310.2、主题内容显示和回复内容显示设计过程 .2311、主题回复 2411.1、主题回复模块概述 .2411.2、主题回复模块的设计 .2512、发表新主题 2512.1、发表新主题模块概述 .2512
3、.2、新主题模块设计 .2613、后台设计 2713.1、后台模块的概述 .2713.2、后台模块的设计 .2714、总结 2931、开发背景 在当今网络的时代,人与人之间的交流从原来的面对面交流,慢慢地借助于现代计算机软件技术和网络技术演变成一种远程的,存在于网络上的交流,这种远程交流其中一种方式是通过使用 BBS 论坛进行的,有了这样的交流,人与人之间的知识文化就可以很快地进行传播2、需求分析BBS 系统主要的功能是讨论各种话题的交流中心。需要有各种不同话题的板块。需要为用户分等级,版主(拥有删除该板块中帖子的能力) 、普通用户(拥有发帖和浏览不同板块的帖子的功能) 、管理员(拥有新建板块
4、,删除板块和删除用户等一些列后台管理功能)3、系统设计3.1、系统目标根据需求分析的要求,制定了 BBS 系统目标如下:1、系统界面友好、美观2、划分用户级别,将不同的权限划分给不同的人群3、合理管理论坛相关信息4、易于维护和扩展5、系统运行稳定可靠3.2、系统功能结构本 BBS 系统是一个典型的 Java Web 程序,由系统的前台和后台管理两部分组成1、系统前台系统前台模块提供给所有用户使用,用户包括注册用户和普通游客,两者所拥有的功能不同。系统前台主要包括用户登录、用户注册、发表主题、论坛浏览、主题浏4览等功能模块前台用户登录版块浏览 主题浏览 发表主题用户登录版块信息版块创建时间回帖用
5、户信息 发帖用户信息原文浏览回复内容浏览发表主题 主题回复图 3.2.12、系统后台后台管理主要由管理员使用,可对论坛中相关信息进行管理维护。普通用户无权使用。后台管理功能主要包括用户管理、板块管理、帖子管理、回复管理等。后台后台登陆用户查询 版块管理 帖子管理管理员注销删除用户 查询用户 编辑用户 更新版主 新增版块 删除版块 主题查询 主题删除图 3.2.23.3、系统浏览BBS 论坛主页,主要内容是导航条、用户登录、用户注册、板块信息。用户可以通过论坛主页获得相应的信息。5图 3.3.1(论坛主页)用户登录界面在主页面的上方(用户可以通过登录界面登录论坛,登录论坛后可以发帖,否则只能浏览
6、帖子内容,不能回复和发帖)图 3.3.2(用户登录界面)图 3.3.3(登录后的界面)游客通过用户注册页面注册为论坛用户6图 3.3.4(注册页面)板块里的主题(帖子)图 3.3.5(板块主题)主题内容和回复信息7图 3.3.6快速回复,在每个主题的最下方图 3.3.7后台管理页面(管理板块信息、用户信息、主题信息)图 3.3.883.4、业务流程图3.5、程序运行环境1、系统开发平台:MyEclipse92、系统开发语言:JSP3、数据库管理系统软件:Microsoft SQL Server 20054、运行环境:Windows 74、数据库设计在开发应用程序时,对数据库的操作是必不可少的,
7、数据库设计是根据程序的需求及其实现功能所制定的,数据库设计的合理性将直接影响到程序的开发过程。 4.1、数据库概要说明本系统采用 SQL Server 2005 数据库,相对于 Oracle 等大型数据库来讲,SQL Server2005 更加适合中小型系统,再者由于对 SQL Server2005 比较熟悉,因此选用了 SQL Server2005 作为数据库软件。4.2、数据库概念设计根据本系统的需求分析、流程设计及功能结构的确定,每个功能模块可以抽象出一个或多个实体对象,例如用户、论坛版块、主题、回复主题等实体对象。这些实体对象彼此相互联系,并且最终创建成数据库表结构。1、用户实体对象用
8、户实体包括用户编号、用户名、用户等级、用户头像等用户相关属性。用户编号是识别用户实体的唯一编号,也就是数据表的主键,它的数据类型为int 型,并具有自增的特性;用户级别属性是标明用户在本系统中的功能权限;其他属性都是描述用户相关信息的属性。9用户表( t b _ u s e r )u s e r n a m ep a s s w o r dg r z ye m a i lt xg r a d el x d zs e xi dq qs i g n a t u r er e a l n a m e图 4.2.12、论坛版块实体对象论坛版块实体对象包括论坛版块编号、论坛名称、版主、创建时间等相关属性
9、。版块实体对象中的板块编号属性与用户实体对象中的用户编号属性类型相同。都是具有自增的特性,板块实体的其他对象都是描述板块的相关信息的属性。板块表( t b _ f o r u m )i df o r u m n a m em a n a g e rc r e a t e t i m e图 4.2.23、主题实体对象主题实体包括主题编号、主题标题、主题内容、主题作者、提价时间、论坛板块编号(外键) 、论坛板块名称(外键) 、人气等相关属性。主题编号属性类型为 int 型,并具有自增特性;论坛板块编号标明此主题发表在哪个论坛板块中,人气属性用来记录主题的被访问信息。10主题表( t b _ t o
10、 p i c )i dt i t l es u b m i t t i m ec o n t e n ta u t h o rf o r u m n a m ef o r u m i dx qr q图 4.2.34、回复主题实体对象回复主题实体包括回复编号、回复标题、回复内容、回复时间、回复作者、主题编号、主题标题等相关回复属性。回复编号属性类型为 int 型,并具有自增特性。主体编号和主题标题是外键。回复表( t b _ r e s p o n s e )i dt i t l es u b m i t t i m ec o n t e n ta u t h o rt o p i c i dt
11、 o p i c n a m ex q图 4.2.45、各个表之间的关系t b _ u s e rP K i du s e r n a m ep a s s w o r ds e xe m a i lq qs i g n a t u r eg r a d el x d zt xg r z yr e a l n a m et b _ f o r u mP K i df o r u m n a m eF K 1 m a n a g e rc r e a t e t i m et b _ t o p i cP K i dc o n t e n ta u t h o rs u b m i t t i
12、m eF K 1 f o r u m i dt i t l ex qr qF K 1 f o r u m n a m et b _ r e s p o n s eP K i dt i t l ec o n t e n ta u t h o rs u b m i t t i m eF K 1 t o p i c i dF K 1 t o p i c n a m ex q11图 4.2.54.3、数据库逻辑结构设计根据上面设计好的 E-R 图,可以在数据库中创建相应的数据表, BBS 系统中各数据表的结构如下:1、tb_user(用户表)表 tb_user 用于保存注册用户的信息用户表(tb_us
13、er)字段名 数据类型 主键 描述username varchar(20) 否 用户名password varchar(20) 否 用户密码sex varchar(20) 否 性别email varchar(50) 否 邮箱qq varchar(20) 否 qq 号signature varchar(300) 否 个性签名grade varchar(20) 否 用户等级lxdz varchar(50) 否 联系地址tx varchar(50) 否 头像grzy varchar(50) 否 个人主页realname varchar(30) 否 真名id int 是 用户编号图 4.3.12、tb
14、_forum(板块表)表 tb_forum 用于保存论坛板块信息版块表(tb_forum)字段名 数据类型 主键 描述id int 是 版块号forumname varchar(20) 否 版块名manager varchar(100) 否 版块管理员createtime datetime 否 版块创建时间图 4.3.23、tb_topic(主题表)表 tb_topic 保存主题信息,其中 forumid 为板块号,通过检索板块号,可以12获得该板块下相应的主题。因此版块号为外键。主题表(tb_topic)字段名 数据类型 主键 描述id int 是 主题号content text 否 主题内
15、容author varchar(20) 否 作者submittime datetime 否 主题提交时间forumid int 否 所属版块号title varchar(300) 否 题目xq varchar(30) 否 心情rq int 否 人气forumname varchar(20) 否 所属版块名图 4.3.34、tb_response(回复表)表 tb_response 用于保存回复信息,其中 topicid 为主题号,通过检索主题号可以获得该主题相对应的回复信息,主题好为外键回复表(tb_response)字段名 数据类型 主键 描述id Int 是 回复编号title varch
16、ar(300) 否 题目content text 否 内容author varchar(20) 否 作者submittime timestamp 否 提交时间topicid int 否 主题号topicname varchar(100) 否 主题名xq varchar(20) 否 心情图 4.3.44.4、文件夹组织结构每个项目都会有相应的文件夹组织结构。当项目文件过多时,会划分相应的包来存放文件。其中 javabean 包放 javabean,servlet 包放 servlet,tag 包放自定义标签,util 放一些通用工具方法,如数据库连接、编码转换等。13图 4.4.15、公共类设计
17、在开放应用程序时,可以将数据库等相关操作封装在自定义类中,以便于在开发程序时调用,这样,可以提高代码的重用性。本系统创建了 DB 类、HandleString 类等公共类5.1、数据库公共类本系统采用 SQL Server2005 数据库,系统通过数据源来连接数据库。创建数据库时应该在系统上创建数据源(创建数据源的方法详见百度) 。DB 类为数据库类,它里面封装了数据库操作的常用方法、如数据的插入、数据的更新、事务等一些列常用方法。DB 类的构造函数负责加载 Java 提供的数据库连接驱动,并且与数据库连接14每次调用 DB 类时都会与数据库相连。而每次调用完数据库时应该释放连接和结果集对象,
18、因此需要一个 close 方法DB 类还应该有 SQL 语句的执行等方法15除了数据库正常的连接、释放、执行 SQL 方法外,还有数据库所对应的执行方法。在这里就不一一列出,DB 类的详细方法可以浏览该类的源代码。5.2、编码转换公共类本系统是一个 Java Web 程序,很多不同的页面与数据库的操作都需要通过转码才能正确显示。因此,有必要建立一个编码转码的公共类。通过这个方法能把 gb2312 的编码转为正确,不会出现乱码。但是还考虑到以后的拓展性,页面可能采用的是 UTF-8 的编码,这里上述的方法就不适用,因此在转码类中还定义了其他方法,以为以后的拓展左准备。6、登录模块6.1、登录模块
19、概述登录模块嵌套在主页面上,用户通过登录模块登录论坛。只要用户输入正确的用户名和密码就能通过登录按钮进行登录。图 6.1.1166.2、登录模块技术分析由于本次设计我采用的是 MVC 模式,因此有视图、模型和控制三个层次,其中视图就是图 6.1.1 所示。而模型就是在 javabean 包中 Login.java 它里面的成员包含了用户的所有信息,当然登录并不需要用到里面的所有成员,只需要用到用户名和密码这两项就可以了。而 servlet 就是负责处理用户名和密码是否存在数据库,如果存在就允许登录,如果不是的话就提示登录失败。1、在视图中获取用户名和密码用户名:密码:2、获取用户名和密码后,把
20、这两项内容提交到 servlet 中,然后在 servlet 中连接数据库,把用户名和密码与数据库进行 select。最后把结果放到一个 session 中。最后跳转页面。 (代码略)3、跳转页面显示是否登录成功(视图 jsp 页面代码略)7、注册模块7.1、注册模块概述用户通过注册模块进行注册注册模块在图 3.3.4 中7.2、注册模块的实现本系统一致采用 MVC 模式。注册页面是视图、Servlet 为控制器、JavaBean为模型。用户通过在注册页面填写注册信息。通过提交后,信息被提交到Servlet 中。然后通过 Servlet 写入数据库中。最后跳转页面返回信息。17Servlet
21、核心代码:try con = DriverManager.getConnection(uri, “sa“, “709394“);if (boo) String insertUser = “insert into tb_user(username,password,sex,email,qq,signature,grade,lxdz,tx,grzy,realname)“+ “ values(?,?,?,?,?,?,?,?,?,?,?)“;pre = con.prepareStatement(insertUser);pre.setString(1, username);pre.setString(2
22、, password);pre.setString(3, sex);pre.setString(4, email);pre.setString(5, qq);pre.setString(6, signature);pre.setString(7, grade.trim();pre.setString(8, lxdz);pre.setString(9, tx);pre.setString(10, grzy);pre.setString(11, realname);int m = pre.executeUpdate();if (m != 0) backNews = “注册成功“;reg.setBa
23、ckNews(backNews); else backNews = “信息填写不完整,请填写带星号的信息“ ;reg.setBackNews(backNews);con.close(); catch (SQLException exp) backNews = “该会员名已被使用,请更换名字“ + exp;18reg.setBackNews(backNews);String register = “register“;session.setAttribute(“changeMes“, backNews);session.setAttribute(“reg“, register);RequestD
24、ispatcher dispatcher = request.getRequestDispatcher(“showCBMes.jsp“);dispatcher.forward(request, response);8、论坛的主页面设计8.1、论坛主页面概述论坛主页面包括 3 部分,第一部分是导航条、第二部分是用户登录与注册、第三部分是论坛板块的显示。其中论坛主页有两个页面,一个是用户登录前的页面,一个是用户登录后的页面(两个页面的主要区别是导航条游客一栏变回该登录的用户名、用户登陆框和注册按钮消失,其他的不变)图 8.11 为登录前的页面、图 8.1.2 为登录后的页面图 8.1.119图 8
25、.1.28.2、论坛主页面的实现论坛主页面的 JSP 代码(部分) ,它通过判断用户是否登录,登录的话打开afterlogin.jsp 这个页面,否者的话打开 beforelogin.jsp 这个页面登录前页面 beforelogin.jsp 与 afterlogin.jsp 的结构大致相同,不同的是用户登录注册模块,登录前页面有用户登录模块,而登录后页面没有用户登录模块。除此以外,两者的结构都有论坛板块显示 DisplayTag,java 文件(这个文件是自20定应标签) 。这个标签文件用于显示论坛板块的详细信息。Beforelogin.jsp 的代码(部分)用户登录与注册:用户名:密码:注
26、册采用的是图片热点跳转:调用自定义标签:自定义标签 DisplayTag.java 部分代码:try List l = new ArrayList();if (session.getAttribute(“list“) != null) l = (List) session.getAttribute(“list“);for (int i = 0; i “);out.println(“);out.println(“);21out.println(“);out.println(“);out.println(“+ “ + forumBean.getForumname()+ “ “);out.print
27、ln(“afterlogin.jsp 页面也 beforelogin.jsp 页面大致相同,除了没有用户登录模块以外。9、主题显示模块9.1、主题显示模块概述主题显示模块同样使用了自定义标签来设计。通过点击论坛板块,把论坛板块的 id 号,传到 servlet 中,通过 servlet 处理,把获得的内容存放到 javabean中,然后通过跳转到主题显示模块,把获得的内容通过一定的方式显示在页面上。图 9.1.19.2、主题显示模块的设计调用自定义标签 DisplayTopic.java 文件显示DisplayTopic.java(代码)public class DisplayTopic ex
28、tends TagSupport public int doEndTag() throws JspException 22JspWriter out = pageContext.getOut();HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();HttpSession session = pageContext.getSession();HandleString s = new HandleString();try if (session.getAttribute(“List“) != null
29、) List l = (List) session.getAttribute(“List“);for (int i = 0; i “);out.println(“);out.println(“);out.println(“);out.println(“);out.println(“+ (t.getTitle() + “);out.println(“+ t.getAuthor() + “);out.println(“+ t.getReCount() + “/“ + t.getRq() + “);out.println(“+ t.getSubmittime() + “);out.println(“
30、);out.println(“);out.println(“);out.println(“);23 catch (Exception e) e.printStackTrace();return super.doEndTag(); 10、主题内容显示与回复内容显示10.1、设计概念同样通过自定义标签来显示主题内容和回复内容。DisplayResponse.java 为自定义标签。图 10.1.110.2、主题内容显示和回复内容显示设计过程DisplayResponse.java 自定义标签的设计和上述论坛板块的自定义标签的设计方法大致相同。不同的是页面的布局和内容的不同。代码不详细放出。Hand
31、leResponse.java 是负责获取主题的信息和回复信息,并且把这些显示反馈给视图(即这里的自定义标签 DisplayResponse.java,负责显示主题内容和回复内容的 Jsp 页面嵌套了 DisplayResponse.java 这个自定义标签)HandleResponse.java 部分代码:/ 获取发表人的发表内容和信息24Topic topicBean = new Topic();try List listContent = topicBean.getRecordTopic(String) session.getAttribute(“topicId“);session.se
32、tAttribute(“listContent“, listContent);List listAuthor = topicBean.getTopicAuthorInfo(String) session.getAttribute(“topicId“);session.setAttribute(“listAuthor“, listAuthor); catch (SQLException e1) e1.printStackTrace();/ 获取回复人回复内容和信息Topic topicBean2 = new Topic();try List listResponse = topicBean2.g
33、etRecordResponse(String) session.getAttribute(“topicId“);session.setAttribute(“listResponse“, listResponse); catch (SQLException e) e.printStackTrace();11、主题回复11.1、主题回复模块概述主题回复模块放在主题内容显现的最下方。主题的回复用户必须要先登录才能回复。25图 11.1.111.2、主题回复模块的设计通过回复按钮,把回复得内容提交到主题回复的 servlet 中,然后通过servlet 把内容存放到数据库中。最后再次跳转到主题内容显
34、示这个页面,把最新的回复信息显示到视图上。Servlet 部分代码:try /快速回复不用 tilteString resTitle = “response“;m = topicBean.InsertDataResponse(resTitle, content, xq, author, topicId, topicName);if (m = 1) try RequestDispatcher dispatcher = request.getRequestDispatcher(“responseList“);dispatcher.forward(request, response); catch
35、(Exception ex) ex.printStackTrace(); catch(Exception e) e.printStackTrace();2612、发表新主题12.1、发表新主题模块概述发表新主题和回复模块的设计大致相同。图 12.1.1通过在视图上输入新主题的信息,然后通过提交到 servlet 中并把信息存放到数据库中,最后跳转到主题显示页面,把新主题显示出来。12.2、新主题模块设计新主题模块的设计与回复模块大致相同。新主题模块的 servlet 部分代码:Topic topicBean = new Topic();int i = 0;try i = topicBean.I
36、nsertData(title, content, xq, author, forumId,forumName); catch (Exception e) e.printStackTrace();if (i = 1) try 27List l = topicBean.search(0, forumId);session.setAttribute(“List“, l);RequestDispatcher dispatcher = request.getRequestDispatcher(“topiclist.jsp“);dispatcher.forward(request, response);
37、 catch (Exception e) e.printStackTrace();13、后台设计13.1、后台模块的概述后台模块负责管理整个 BBS,它的功能有删除用户、增添新的板块、删除板块、更改版主等一些功能。后台页面采用框架设计,在后台主页面上创建三个框架。上方的是导航条、左方的后台板块的导航条、右方是主要显示内容。后台管理模块的图为图 3.3.8后台主页面框架代码(部分)2813.2、后台模块的设计1、板块管理图 13.2.1板块管理的功能有版主的更换,板块的添加和板块的删除。由于本系统是基于 MVC 设计的,他们所有功能都是通过 servlet 来对数据库进行操作的。板块删除 ser
38、vlet(部分代码)try / 方法集成在 Topic 类中Topic topicBean = new Topic();i = topicBean.DelRecordforForumn(forumid); catch (SQLException e) e.printStackTrace();if (i = 1) changeMes = “删除成功“; else changeMes = “删除失败“;session.setAttribute(“changeMes“, changeMes);RequestDispatcher dispatcher = request.getRequestDispa
39、tcher(“showCBMes.jsp“);dispatcher.forward(request, response);29其他功能的实现大致相同(可以查看源代码)2、用户管理图 13.2.2用户管理功能有用户查询和用户编辑(编辑和删除)这些功能的实现大致与上述功能的实现大致相同,这里不作过多赘述。14、总结通过了这次 JSP 程序设计的课程设计,我对 BBS 设计与实现有了更深刻的体会,同时也加速了 JSP 程序设计的认识,了解到实验中的基本要求。这次课程设计我最大的收获并不是对书本知识的巩固,而是通过实验,我的自学能力得到了很好的锻炼,实践能力也提高了不少。尽管实验时,对 BBS 的认识和某些源代码的使用等方面都很陌生,导致开始阶段进展得很慢。但是经过我和组员的努力,不厌其烦地不断实验,做了又做,错了又做,终于把实验成功地做出来,而且对实验内容和步骤也相当的了解,这也使我明白到相互学习是能让自己渐渐掌握一定的知识的,而且能双赢。30Hsdf89dshfh iosdhrg 8ufd89 gud890sfu 9u h09