《Java高级编程》课程设计报告
题目 悠闲论坛
学生姓名 周您想
教 师 **
教 学 系 信息管理工程系
专 业 软件
班 级 10软件A班
完成日期 20## 年 12 月 26 日
摘要
随着经济文化的日益发展,信息之间的文化与娱乐交互越来越紧密,为了满足客户之间流畅的交流,论坛就发挥了交流与互动的功能,此论坛汲取了一些相关论坛的模式,设计出一款为学校的同学们之间交流心得与学习方法论坛,有助于同学们之间的信息交流与解决问题,有利于同学之间分享喜悦和解决矛盾。
关键字:jsp、SQLserver、myeclipse、悠闲论坛
目 录
中英文摘要、关键词……………………………………(2)
1.设计目的…………………………………………(3)
2、设计步骤…………………………………………(3)
2.1数据库设计……………………………………………(4)
2.2jsp设计步骤…………………………………………(5)
2.3web项目结构…………………………………………(8)
2.4编写web项目代码……………………………………(9)
3、运行项目…………………………………………(19)
3.1部署web项目…………………………………………(19)
3.2运行web项目…………………………………………(19)
4、总结……………………………………………………(19)
一.设计目的
为以后同学间学习与交流提供良好的平台,协助同学之间提供更好的管理与服务,充分发挥论坛的工作职能,增加同学之间的互动,方便同学之间调侃等等。
论坛建设的目的确定,有助于接下来就要确定按照什么标准来建论坛。
我认为论坛建设标准根据同学话题不同,所做出的设计也截然不同,在整个论坛的创意、风格、整体框架布局、文字编排、图片的合理利用,空间的合理安排上面等…诸多的要求,需要考虑的地方也很多,我们总结后觉得大致包括以下几点: 1.通过论坛,宣传同学之间的文化理念;让浏览者了解学校文化,提供学生之间最新信息资讯和悄悄话。
二.设计步骤
(一) 数据库的设计
要设计论坛首先要设计数据库,才能存储前台的所有的功能,为前台提供保障,首先要设计数据库,具体步骤如下。
1收集信息
软件的需求分析需要调查大量的用户,从中规划出用户的需求,了解他们所关注的,这是在设计数据库时需要做的工作,在常见数据库时必须要了解数据库需要完成的任务和功能,刚开始要明白论坛与数据库之间关系,才能进一步实现具体要实现的功能用户注册和登录,后台数据库需要存放用户注册信息和在线状态信息。用户发帖后,后台数据库需要存放帖子的相关信息,论坛版块管理,后台数据库需要存放各个版块的相互信息。
2标识对象
在收集需求信息后必须标识数据库要管理的关键对象或实体:
1) 论坛用户:发帖,回帖和各个版主
2) 帖子:用户发的帖子或回的帖子
3) 版块:论坛的各个版块信息
3标识对象的信息
1)论坛用户(uId,uName,uPass,head,regTime,gander)uId
2)版块(boardId,boardName,parentName)boardId
3)主题(topicId,title,content,publishTime,modifyTime,uId,boardId)topicId
4)回复(reply, title,content,publishTime,modifyTime,uId,boardId)replyId
4标识对象之间的关系
设计了表后要建立表与表之间的联系,要把每张表给联系起来,通过设置它们的主外键之间的关系,才能通过主外键之间的约束将这些表联系起来,这有利于将来数据库维护和修改。
(二)jsp设计步骤
1jsp总体流程
首先要安装具体的运行软件,此次需要安装myeclipse+tomcat+SQLserver2000+Dreamweaver等软件,首先要在Dreamweaver上编写好自己要编写的静态网页,接着将html网页移植到myeclipse中转化成jsp页面,我们的前台的运用要调用后台数据库的支持,所以要在SQLserver2000中编写好数据库,最后通过myeclipse将web项目部署到tomcat服务器上
2编写数据库
将前面设计的数据库设计的SQLserver中,首先设计每一张表,
User表的字段
User表
Board表的字段
Board表
Topic表字段
Topic表
Reply表字段
Reply表
设计每张表的主外键关系来制约数据结构的完整性
3设计web项目的目录结构
src:用来存放java源文件。
WebRoot:是web的顶层目录,也称为文档根目录,在此下拥有META-INF是系统自动生成,存放系统描述信息。静态页文件包括html,css,图像image。Jsp文件:利用jsp很容易在页面生成动态内容。WEB-INF存在于根目录下,在此下有lib文件,里面存放.Jar和.zap.
这个目录下还有一个web.xml,这是一个配置文件,非常重要。
创建图形如下
4编写web项目代码
1)首先应该编写html文件,在Dreamweaver下创建一个站点,在此站点下设计我的论坛的页面,整体布局是用div+css来布局,此论坛包括论坛主页index.html,列表页面list.html,登录页面login.html,注册页面reg.html,提交post.html,回复reply.html,修改update.html页面。
2)在myeclipse里新建一个web项目,在将前面制作好的html页面转化成jsp动态页面,首先新建一个jsp文件,编码格式在myeclipse里改写成UTF-8格式,这是现在页面的主流编码格式,它的兼容性最好,而且在以后的页面内可以自动生成,把自己编写好的html页面的首部去掉,将html页面和jsp页面相同的部分复制到myeclipse中,按照同样的方式将所有的页面都进行设置,这样就把html页面转化称为jsp页面了。
3)编写java控制代码,在整个jsp论坛网站中,控制前台页面的具体功能就是通过java来控制的,在这里运用java集合框架来编写具体的方发,为什么要运用java集合框架技术呢?当需要容纳一定量的数据时,我们会选择数组,但在实际编程中,会遇到很多更复杂的情形,由于无法确定初始化的元素的个数,因此无法运用数组进行保存,java语言为我们提供了一套集合框架,专门对付这类复杂的数据存储问题,java集合框架为我们提供了比较完善的接口和类,完整的java集合框架位于java.util包中,java集合框架由以下三部分组成,接口,具体类,具体方法 如下List接口和ArrayList类实现动态数组如下
Map接口和HashMap类
Map提供键到值的映射,具体的实现类是HashMap
HashMap的实现如下
小结:Collection是最基本的集合接口。List接口继承Collection接口,List是有序集合,允许有相同的元素,Map提供键到值的映射,ArrayList是List接口的实现类,它实现可变大小的数组,在实现随机访问和便利元素时提供更好的性能,LinkList是List接口的实现类,它额外的添加有addFirst()、addLast()、removeFirst()、removeLast()等方法,在实现插入删除操作时LinkList实现更好的性能,HashMap是Map的实现类,它实现键到值的映射的哈希表。
对应数据库里的四张表,分别设计他们的方法将它们封装起来,然后通过设计set和get方法来调用里面的参数ReplyDao接口如下
ReplyDao接口的具体实现类
部分方法省略
Reply类
以同样的方式将User类UserDao接口UserDaoImpl接口,Topic类,相应的接口和实现类以及Board类BoardDaoImpl接口以及方法用路上同样的方法都加入进去。这样具体的方法就已经写好。
接着编写如何连接数据库,这里使用的是SQLserver数据库,连接数据库用到是JDBC驱动。首先使用Class.forName()方法将JDBC加载入java虚拟机,接着加载驱动,并连接数据库,然后发送sql语句,并返回一个结果集,醉后处理结果,具体实现的方法如下
每次用完后要释放资源
通过自己设置一个方法
现在开始编写jsp页面,jsp就是将htnl页面转换成了jsp页面后再在需要的地方加入脚本语言,由于前面都已经编写好了java程序,所以在这里编写就只要在相应的页面加入相应的包在用对象调用里面的方法,在每个页面都导入一样的包,如图
这样做就不用每次都要反复调用相应的包
用户登录:前台就是一张html页面,通过js控制用户名和密码输入,两者都不为空是跳转到验证用户登陆页面:具体代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" import="com.lbc.bbs.dao.*,com.lbc.bbs.dao.impl.*,com.lbc.bbs.entity.*,java.util.List" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String userName=request.getParameter("userName");//request获取页面表单提交的数据
String userPass=request.getParameter("userPass");
UserDao userDao=new UserDaoImpl();
User user=userDao.findUser(userName);
if(user!=null&&user.getUPass().equals(userPass)){
session.setAttribute("users",user);//设置hu会话 存入session中 键与值的对应 session
response.sendRedirect("../index.jsp");//使用内置对象跳转到首页
}else{
response.sendRedirect("../login.jsp");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
</body>
</html>
如果是没有注册的用户得必须注册,注册页面:
注册页面有用户名,密码,再次输入密码,选择头像,通过表单提交到action=”admin/doReg.jsp”页面进行注册,代码如下:
<%@ page language="java" import="com.lbc.bbs.dao.*,com.lbc.bbs.dao.impl.*,com.lbc.bbs.entity.*,java.util.List" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String userName=request.getParameter("userName");
String userPass=request.getParameter("userPass");
String head=request.getParameter("head");
int sex=Integer.parseInt(request.getParameter("sex"));
//实例对象
int flag=0;
User user=new User();
user.setUName(userName);
user.setUPass(userPass);
user.setHead(head);
user.setGender(sex);
//实例接口
UserDao userDao=new UserDaoImpl();
flag=userDao.addUser(user);
if(flag>0){
response.sendRedirect("../index.jsp");
}else{
response.sendRedirect("../reg.jsp");
}
%>
在注册成功后就跳转到index.jsp页面,在此页面有每个用户最后发表的内容,作者和最后发表时间,在主页先写好四张表的接口和方法以及具体实现类,然后通过get方法调用里面的参数,比如发表作者reply.getUName(),发表时间reply.getPublishTime(),发表的标题reply.getTitle(),发表的版块board.getTitle(),在主页由于要分不同版块下有不同的内容,就使用了循环和Map接口来实现具体如下:
List list=newArrayList();
list=(ArrayList)map.get(0+"");//通过map的get方法获取0的键,把对应的值赋值给list对象
for(int i=0;i<list.size();i++){
Board board=(Board)list.get(i);
int count=0;
List<BoardDao> listSon=new ArrayList<BoardDao>();
listSon=(ArrayList)map.get(board.getBoardId()+"");//通过map的get方法获取键,把对应的值赋值给list对象
if(listSon!=null){
for(int j=0;j<listSon.size();j++){
Board boardSon=(Board)listSon.get(j);
//循环输出主题信息
int boardId=boardSon.getBoardId();
List listTopic=topicDao.findListTopic(1,boardId);
Topic topic=new Topic();
User user=new User();
if(listTopic!=null&&listTopic.size()>0){
topic=(Topic)listTopic.get(0);//取第一个
user=userDao.findUser(topic.getUId());// 通过主题的uId在使用userDao接口里的findUser方法调用User里的所有方法
然后是帖子列表页面list页面
在列表页面也获取了四张表的接口与方法
UserDao userDao=new UserDaoImpl();
ReplyDao replyDao=new ReplyDaoImpl();
BoardDao boardDao=new BoardDaoImpl();
Board board=boardDao.findBoard(boardId);
User user2=null;
if(session.getAttribute("users")!=null)
{
user2=(User)session.getAttribute("users");
}else{
user2=new User();
}
Topic topic=(Topic)listTopic.get(i);
User user5=userDao.findUser(topic.getUId());
然后就可以通过具体的类的对象调用里面的方法:
board.getTitle(),topic.getUName()等方法
点击发表的内容后就进入detail.jsp页面,这是每个用户发表的页面,这里几乎包括了所有的java接口和包,在这里调用
UserDao userDao=new UserDaoImpl();
TopicDao topicDao=new TopicDaoImpl();
ReplyDao replyDao=new ReplyDaoImpl();
BoardDao boardDao=new BoardDaoImpl();
通过list.jsp传过来的参数然后在detail.jsp页面获取
if(request.getParameter("page")!=null&&request.getParameter("topicId")!=null&&request.getParameter("uId")!=null&&request.getParameter("boardId")!=null)
{
p=Integer.parseInt(request.getParameter("page"));
topicId=Integer.parseInt(request.getParameter("topicId"));
uId=Integer.parseInt(request.getParameter("uId"));
boardId=Integer.parseInt(request.getParameter("boardId"));
}
在这个页面的脚本可以通过get方法获取里面的参数,然后每个用户只能修改自己的帖子,权限设置是通过每个用户传到写该和删除页面里,通过比较每个用户数据库里的uId和页面传过来的uId进行比较,如果一样就可以进行修改,否则就跳转回登陆页面要求用户登录,其他页面都是与上雷同,就不在此介绍了。
三.运行项目
3.1部署web项目
项目编写完以后,在myeclipse中打开Manage Deployment,然后选择index项目,点击add选择服务器tomcat6.0,然后点击ok,在控制台启动先前添加的服务器,启动服务器,编译项目,就ok了
3.2运行web项目
打开浏览器,在地址栏中输入http://localhost:8080/index.jsp就进入了编写的jsp页面,然后通过注册登录就可以发表了.
四.总结
该系统基于web论坛的登录、注册、删除、回复、等功能,本系统基于B/S模式,其后台完全实现其功能,供前台调用,该软件简单易用,易上手,供同学们使用,该系统多样化,多元化,具有一定的扩展性。