摘要
随着经济社会的发展,人们的生活质量水平日益不断提高。汽车作为一种便捷的交通工具,开始进入人们的生活,给人们带来了极大的便捷,使人们越来越喜欢汽车。汽车论坛作为车主交流的方式之一,他们可以说说自己的观点,对别人的观点进行分析,看看是否符合自己的观点。系统是基于JSP+Servelet+MySQL实现的,它具有操作灵活,使用方便,运行稳定,安全可靠等特点,开发了界面友好、操作简单易懂的汽车论坛。本次研究设计的汽车论坛系统需要拥有这些功能:正常的用户可以登录注册,工作者可以进行登录,观看帖子,发帖回帖,工作者可以删除用户。
关键词:JSP技术;MySQL技术;汽车论坛
前言
在当今社会快速发展下,互联网也非常快速的发展,随之各种互联网产物随之出现,论坛就是在这样的背景下产生的。这种新兴的交流方式随着越来越多人的使用,逐渐的受到欢迎起来。而在产品服务、技术支持、用户培训等领域,论坛更是常用的在线支持工具[1]。
中国汽车工业发展迅速,车型不断更新,汽车越来越多,在这样的背景下,汽车论坛出现了。它是一块空白的模板,非常的灵活,非常合适人们的使用等特点[2]。论坛作为一种非常看中内容的,内容只要是可以引起人们的兴趣就可以,使用论坛交流的人不少,论坛就会一直受欢迎下去,论坛就会很有发展力,比如汽车论坛将会继续存在并且活跃下去。人们也习惯了在论坛上交流,可以在汽车论坛上讨论各种和汽车相关的问题,足不出户就可以了解各种各样的汽车问题,方便了人们。
本设计主要是对汽车论坛进行各种各样的分析,首先就是确定我们的需要,确定需要后就可以进行设计。JAVA和MySQL就可以满足我们的需要,并且是免费的,在网上很容易找到。在一个网页的设计过程中,我们最基本会考虑到呈现给用户看到的界面部分和用户和系统进行交互的部分,前者我们称之为页面的”静态部分”,后者我们称之为页面的”动态部分”[3]。JSP则负责页面的动态部分,MySQL作为后台数据库来开发,利用JSP和Servlet组合方案展示了Web页面开发中的三层架构体系,即前端、后端和后台[4]。并且在后台的设计上,能够简单,需要建立几个表,想办法把这几个表连接在一起,同时也必须将网页和这几个表连接在一起。在此之上,借助于MVC模式的关注点,可以使系统的开发更加的清晰,更加的简单[5]。
功能部分的设计,可以分为两大功能部分,它们分别是前台和后台,我们要确定前台和后台分别得具体功能和前台和后台之间具有怎样的联系,怎样使他们的功能联系在一起。在MySQL数据库的设计中,要考虑建立表。然后将我们开发的系统进行了实现,根据前面我们的准备和研究,接下来就可以进行下一步设计了。最后对系统各种模块进行功能测试和性能测试[6]。
第1章可行性分析及需求分析
1.1可行性分析
1.1.1经济可行性
本汽车论坛系统采用结构体系非常的简单,本系统使用开发的软件都是通用的,可以很容易在网上找得到,可以免费使用,可以免费得到的,所以说没有多少花费的费用,是可行的。
1.1.2技术可行性
本系统采用JSP技术,开发调试比较简单,MySQL技术也是一个大众的技术,不会和大多数系统冲突。所以是可行的。
1.1.3运行可行性
各个模块之间的操作是非常简单的,没有什么复杂的地方,所以是可行的。
1.2功能需求
(1)注册
想要正常的使用,需要提前进行注册。
(2)登录
正常的账号注册完之后,就可以进行登录。
(3)查看帖子
正常使用的用户可以观看别人发的帖子。
(4)发布帖子
使用论坛的人可以自由的发表自己的想法。
(5)评论帖子
别人发过的帖子,可以去帖子下面进行打字,说说自己的意见。
(6)工作者登录
可以被工作者登录。
(7)帖子管理
帖子可以被工作者修改。
(8)用户管理
用户账号可以被工作者修改。
1.3非功能需求
一个好的界面设计,足以影响用户的第一印象,所以友好的界面对系统也是必不可少的。
第2章系统开发环境及技术介绍
2.1开发环境
操作系统:windows 10
服务器:tomcat 6.0
数据库:MySQL
开发语言:Java、JSP等
2.2相关技术介绍
2.2.1 JSP技术
JSP是一种动态网页语言,它是通用性好的语言,可以在大多数的操作系统上运行,可以对内容生成和显示进行分离[7]。主要负责描述信息的显示样式是HTML[8]。
2.2.2 MySQL
MySQL是现代常用的一项后台信息库。在此次研发经过中,关键用的是MySQL信息库来完成对平台的有关数据的储存。在MySQL信息库中能够构建多个表,可以支持多用户同一时间连接一个MySQL数据库服务器[9]。还具有简单有效的用户特权使用[10]。
2.2.3 JDBC技术
JDBC是一种数据库连接技术,最大的好处是复用性[11]。
2.2.4 Servlet
Servlet是为了服务器端服务的应用程序,它担当请求与服务器响应的中间层。由汽车论坛系统的服务器进行还原。Servlet请求如图2-1所示。
图2.6 servlet请求走向图
第3章总体设计
3.1系统目标
1、界面要看起来整洁干净。
2、帖子可以按照查看量的顺序显示出来。
3、帖子可以被正常的用户所发布。
4、用户能够看自己发表过的帖子。
5、可以对系统进行维护。
6、对用户输入的数据进行做对比。
7、系统运行必须要稳定。
MVC架构
MVC是一种将数据表示与业务逻辑分离的设计模式,使系统更易于维护和拓展。MVC层结构:
(1)验证层:它是被用来做数据验证的。
(2)处理层:处理层是被用来处理业务的。
(3)简化层:将复杂的SQL语句变成简单的语句。
框架使用MVC模式设计,首先发出请求,处理器处理,将文件的上传变得简单,简化业务项目在初层层次的开发任务。其主要的目的是使发出的请求具有统一的入口,对不符合要求的拦截。如图3-1所示。
图3-1总体请求走向图
3.2系统功能结构
本系统一共分为三个模块,分为游客模块,会员模块,管理员模块如图3-2所示。
图3-2功能结构图
3.2.1前台功能结构
面向大众的,不隐藏的,普通人可以使用的的功能就是前台功能。如图3-3所示。
图3-3前台功能结构图
3.2.2后台功能结构
后台功能如图3-4所示。
图3-4后台功能结构图
3.2.3系统流程
用户发布想要登录此汽车论坛的请求,系统接受到后,进行验证,用户登录数据以后,系统内存在的数据会和登录者的数据进行做对比,如果不一样,会给提示,不会进行下一步,会不同意用户的请求,如果一样,就可以直接进行下一步,登录成功,详细分析信息模型如图3-5所示。
图3-5系统流程图
第4章数据库设计
4.1数据库概述
我们将系统比作一栋很高的楼房,楼房想要建的很高,很结实,很安全,最重要的就是要把地基打好,地基打好了,才能进行下一步,楼房才能往高了建,如果地基没打好就着急往高了建,这样的楼房就是质量不过关,不安全,就是危楼,这样的楼房就会经常出现问题,而数据库就是系统这栋楼房的地基。
4.2数据库设计分析
模型是对复杂化的东西进行简单化。它的主要成分是实体、关联和属性。使用它们我们可以以他们为基础建立自己想要建立的各种各样的模型。本系统的实体图如图4-1所示,如图4-2所示,如图4-3所示。
图4-3用户实体图
第5章模块/功能设计
5.1注册模块
5.1.1需求描述
注册对于每一个当今的软件而言,都是必不可少的,只有用户注册了,才能实现与系统之间更多的交互,才能体验更多的功能,用户期望注册越简单越好。
5.1.2逻辑设计
由于目前系统只是一个简单的BBS,没有涉及一些非常重要的个人信息,比如支付信息,个人隐私等,所以为了用户更加便捷的操作,用户注册时只需要填写用户名,密码、安全码即可。注册成功后,在登录用户名,密码即可[12]。
5.1.3相关代码
注册的时候,在输入用户名的同时,采用Ajax技术异步刷新。
function Ajax(method,URL,data,callback){
var XHR;
if(window.XMLHTTPREQUEST){
XHR=new XMLHTTPREQUEST();
}else{
XHR=new TARGET(“MICROSOFTXMLHTTP”);
}
XHR.open(method,URL,true);
XHRONREADYSTATECHANGE=function(){
if(XHR.READYSTATE==4&&XHR.status==200){
var MSG=XHR.RESPONSETEXT;
callback(MSG);
}
};
if(method==”post”){
XHR.SETREQUSTHEADER(“Content-Type”,”application”)
}
XHR.send(data);
}
function ck_name(v){
ajax(“post”,”USERSERVLET”,”flag=CKNAME&name=”+v,function(data){
data=MYTRIM(data);
if(data==1){
$(“v_RNAME”).INNERHTML=”KEYIYONG”;
}else{
$(“v_RNAME”).INNERHTML=”BUKEYIYONG”;
}
});
5.2登录模块
5.2.1需求描述
用户可选择用户名、密码登录,自动登录。
5.2.2逻辑设计
用户发起登录的请求,系统先校验信息是否正确,若正确,登陆成功,如果用户名不存在或者用户名与密码不符,登录失败。
在用户登陆后,鼠标放在用户的名字上回显示用户的个人等级信息,放在帖子作者或者帖子评论者的名字上也会有同样的效果。
图5-1登录流程图
5.2.3相关代码
这个主要通过JS实现:
function login(){
$(“CELLING”).style.line=”a”;
$(“login_form”).style.line=”a”;
}
function VALIDATELOGIN(){
var name=$(“login_form”).UNAME;
var p=$(“login_form”).UPASS;
VNAME=name.value;
if(MYTRIM(VNAME).length<1){
name.style.COLOR=’1874655′;
$(“v_name”).INNERHTML=”名字”;
return false;
}else{
name.style.COLOR=’1594618;
$(“v_name”).INNERHTML=””;
}
if(MYTRIM(VPASS).length<1){
pass.style.COLOR=’1874655;
$(“v_pass”).INNERHTML=”密码”;
return false;
}else{
phone.style.COLOR=’1594618′;
$(“v_pass”).INNERHTML=””;
}
return true;
}
function user_info(v){
var top=document.body.scrollTop;
mousex=event.clientX;
mousey=event.clientY;
//alert(mousex+”===”+mousey);
var f=document.getElementById(“info_form”);
f.style.top=top+mousey+15;
f.style.left=mousex;
//alert(v);
//var name=”${sessionScope.name}”;
ajax(“get”,”UserServlet?flag=user_info&uname=”+v,null,function(data){
var obj=eval(“(“+data+”)”);
var r=obj.roleflag;
if(r==0){
$(“role”).innerHTML=”c”;
}else if(r==1){
$(“role”).innerHTML=”b”;
}else{
$(“role”).innerHTML=”a”;}
$(“grade”).innerHTML=parseInt(obj.score/100);
$(“rank”).innerHTML=obj.score;});
$(“info_form”).style.display=”block”;}
private void user_info(HttpServletRequest request,
HttpServletResponse response)throws ServletException,IOException{
String uname=request.getParameter(“uname”);
UserDAOImpl udao=new UserDAOImpl();
User u=udao.login(uname);
JSONObject obj=JSONObject.fromObject(u);
String json=obj.toString();
PrintWriter pw=response.getWriter();
pw.println(json);
pw.flush();
pw.close();}
5.3发帖模块
5.3.1需求描述
BBS论坛是一个以帖子为中心的系统,而论坛中存在的大量相关的帖子,都是通过用户自己已经发表的。人多口杂,而互联网的特性又使人们能够发表任何他们想表达的,这其中就不乏一些比较极端的言论,或者恶意的言论。这就要求系统设置一定的措施,尽可能的杜绝这种现象。用户可以根据自己的需要发帖,但必须要达到一定的等级积分来能发表帖子。
5.3.2逻辑设计
发帖过程:用户进行发帖操作;系统会查看用户的个人信息;进行判断,用户是否到达发布帖子的要求;如果达到,可以进行发帖;若没达到则提示用户未达到发帖等级,实现效果如图5-2所示;
图5-2发帖流程图
5.3.3相关代码
String NEWSID=String.VALUEOF(System.CURRENTTIMEMILLIS()).SUBSTRING(5);
Date d=new Date();
SIMPLEDATEFORMAT SDF=
new SIMPLEDATEFORMAT(“AAAA_BB_CC HH:mm:MM”);
String date=SDF.format(d);
String DIR=request.GETSESSION()GETSERVLETCONTEXT()
.GETREALPATH(“files”)+java.IO.File.separator+date1+java.IO
.File.separator+NEWSID;try{
SMARTUPLOAD SU=new SMARTUPLOAD();
SU.initialize(there,request,response);
SU.SETLIST(“A,B,P,J,G,d,X”);
SU.SETMAXSIZE(1920*1080*10);
SU.SETMAXFILESIZE(1920*1080*50);
SU.upload();
Files files=SU.GETFILES();
int count=files.GETCOUNT();
System.out.PRINTLN(count);
for(int i=0;i<count;i++){
COMJSPSMART.upload.File file=S.file.GETFILE(i);
String FILEN=file.GETFILEN();}
News news=new
News(N.SID,N.title,N.content,N.date,N.author,N.type,N.Integer.PARSEINT(ISCOM));
NSDAOIMPL CDAO=N NEWSDAOIMPL();
BOOLEAN b=CDAO.add(news);if(b){
PW.PRINTLN(“<script>alert(‘未达到发帖等级
‘);window.location.HREF=’fail.JSP’</script>”);}else{
PW.PRINTLN(“<script>alert(‘发帖成功
‘);window.location.HREF=’fail.JSP’</script>”);
}catch(SMARTUPIOADEXCEPTION e){
e.PRINTSTACKTRACE();}}
5.4读帖评论模块
5.4.1需求描述
用户看自己感兴趣的帖,也可是在观看的帖子下面留下自己的观点。但是我们只有通过登录系统用户,并且主题帖作者自己没有禁止该贴评论时才能评论。
5.4.2逻辑设计
用户评论的时候,需要判断用户是否登录,帖子是否禁言,用户是否被管理员禁言,如有一项,则用户不能发表评论。
读帖流程为:
(1)用户发起读帖请求,记录点击日志
(2)进入读帖页面,用户可在读帖页面看到帖子的内容,作者,发布时间以及其他用户的评论
投票流程
(3)用户可在有投票主题的帖子内选择投票
(4)判断用户是否登录,若没则提示登录
(5)判断用户是否已经对该投票主题投过票,若投过则提示用户已投
(6)进行投票操作,投票成功,并将投票结果显示
评论流程
(7)用户发起投票请求,判断用户是否已经登录,若没则提示用户登录
(8)判断该帖是否被作者禁止评论,若是则提示该贴已被禁止
(9)判断该用户是否已被管理员禁言,若是提示用户已被禁言
(10)进行评论操作,提示评论成功
5.4.3相关代码
代码如下:
private void vote(HTTPSERVLETREQUEST request,HTTPSERVLETRESPONSE)
throws SERVLETEXCEPTIONIOEXCEPTION{
String N.SID=r.GETPARAMETER(“N.SID”);
String show_flag=r.GETPARAMETER(“show_flag”);
List<String>IPS=null;
String ADDR=r.GETREMOTEADDR();
SERVLETCONTEST application=
request.GETSESSION().GETSERVLETCONTEXT();
Obj obj=app.GETATTRIBUTE(N.SID);
if(obj==null){
IPS=new ARRAYLIST<String>();
}else{
IPS=(List<String>)obj;}
BOOLEAN ISVOTE=false;
for(String IP:IPS){
if(UNAME.equals(IP)){
ISVOTE=true;
break;}}
if(show_flag!=null){
if(show_flag.equals(“show”)){
ISVOTE=true;}}
if(ISVOTE){
INEWSDAO NBAO=new INEWSBAOIMPL();
News news=NBAO.FINDBYNEWSID(N.SID);
int count=0
List<Options>ops=news.GET.S();
List<Options>ops=news.GET.S();
List<Options>ops=news.GET.S();
for(Options op:ops){
count+=op.GETCOUNTVOTE();}
String[]colors=
{“#ffe4c4″,”#6495ed”,”#ff80cc”,”#ff00ff”,”#d3d3d3″,”#20b2ba”,”#ffa07a”,”#708090″,”
#AFFEEE};
request.M(“ISVOTE”,”vote”);
request.M(“R”,N);
request.M(“C”,C);
request.F(“Y”,Y);
request.GETREQUESTDISPATCHER(“NEWSSERVLET?flag=news_info&NEWSID
=”+NEWSID);
}else{
String UNAME=(String)request.GETSESSION().GETATTRIBUTE(“name”);
IPS.add(UNAME);
application.SETATTRIBUTE(NEWSID,IPS);
String[]ids=request.GETPARAMETERVALUES(“option”);
String SQL=”update options set COUNTVOTE=COUNTVOTE+1 where id in(“;
if(ids!=null){
for(String s:ids){
SQL+=s+”,”;}}
SQL=SQL.SUBSEQUENCE(0,SQL.length()-1)+”)”;
IOPTIONSDBO ODBO=new OPTIONSDAOIMPL();
BOOLEAN b=ODBO.UPDATEBYID(SQL);if(b){
INEWSDAO NDBO=new NEWSDAOIMPL();
News news=NDBO.FINDBYNEWSID(NEWSID);
int count=0;
List<Options>ops=news.S();
for(Options op:ops){
count+=op.GETCOUNTVOTE();}
String[]colors=
{“#ffe4c4″,”#6495ed”,”#ff80cc”,”#ff00ff”,”#d3d3d3″,”#20b2ba”,”#ffa07a”,”#708090″,”
#AFEEEE”};
request.M(“ISVOTE”,”vote”);request.M(“C”,C);request.F(“Y”,Y);
request.GETREQUESTDISPATCHER(“NEWSSERVLET?flag=news_info&NEWSID=”
+NEWSID);}}
5.5搜索模块
5.5.1需求描述
当用户想要搜索某些帖子时,用户可以在搜索框中输入信息来搜索帖子。
5.5.2逻辑设计
用户在搜索框内搜索自己感兴趣的信息,进行搜索,就会跳转到搜索的页面。如果有与搜索内容相关信息,将显示搜索出来的信息,若没有,在页面上显示没有找到相关信息,具体过程如图5-3所示。
图5-3搜索流程图
5.5.3相关代码
主要代码如下:
private VOIDSERCH(HTTPSERVLETREQUEST request)
throws SERVLETEXCEPTION,IOEXCEPTION
{
String cp=request.GETPARAMETER(“cp”);
String SERCHMSG=request.GETPARAMETER(“SERCH”);
int CURRENTPAGE=cp==null?1:Integer.PARSEINT(cp);
int PAGESIZE=20;
PAGEUTIL P=N PAGEUTIL(PAJESIZE,CURRENTPAGE);
IN.SDAO NBAO=new N.BAOIMPL();
PU=NDAO.FINDBYPAGE(PU,”title like’%”+SERCHMSG+”%’or
N.SCONTENT like'”+SERCHMSG+”‘”);
if(PU.GETDATA().size()==0){
Request.SETATTRIBUTE(“NOTFOUND”,”未找到与'”+SERCHMSG+”‘”);
}
request.SETATTRIBUTE(“PAGEUTIL”,P);
request.SETATTRIBUTE(“SERCHMSG”,SERCHMSG);
request.SETATTRIBUTE(SERCH_list.JSP”).forward(request,response);
}
5.6后台管理模块
5.6.1需求描述
后台管理主要是对论坛秩序和功能维护,使论坛具有一个安全稳定的环境,可以对帖子进行管理,可以将一些不好的内容进行删除,可以对用户进行管理,对一些破坏论坛稳定,不良信息内容的用户进行禁用,最后可以对系统进行管理,主要是发布一些公告。
5.6.2逻辑设计
管理员在对帖子进行管理的时候,管理员或者版主可以将很重要的帖子置顶,将恶意的帖子删除。帖子上的操作可以单独或者批量处理。
用户管理只能有管理员来完成,管理员可以将活跃用户升级为版主,也可以将一些素质低下,说不良言论的用户禁言。
结论
此次研究开发的项目基本完成了自己最初的设计和需求,在开发的过程中也遇到了一些的困难。在通过网上求助,问老师,问同学等方式后,大部分困难都被一一解决,自身在知识上也得到了很大的提升。
这个项目基本通过自己手写许多底层代码实现完成,虽是使自身对基础知识的了解获得了提升,但是在企业实际开发中,并不是这样做的。目前最底层的像JDBC等技术都已经经过很成熟的封装形成了稳定的框架,企业大多使用框架开发。这样程序的开发流程会更快捷,而且系统会有更好的可维护性和可拓展性。像现在的主流框架Struts、Spring等,这些技术在课堂我们无法学习到,需要自身自学。但这并不意味着我们再课堂上学到的技术没有用,那些框架正是对我们学到的底层技术的封装,如果不理解底层技术,就是只知其然不知其所以然了。所以,做毕业设计使我能够对大学所学到了技术知识做一次总体的回顾,还是蛮有意义的。
大学就要结束了。最后我要感谢过去四年所有的老师,是你们的努力让我们能够顺利的步入社会,成为对社会有用的人!
参考文献
[1]张正.一个通用论坛系统的设计与实现[D].山东:山东大学,2019.
[2]郭雅婷.网上论坛系统的设计与实现[D].辽宁:东北大学2014.
[3]韩思凡.Web开发中的JSP与HTML的基础应用[J].科学技术创新,2020(14):76-77.
[4]刘小飞,李明杰.基于JSP和Servlet架构的新闻频道系统[J].电脑知识与技术,2020,v.16(12):88-89.
[5]廖西.基于SSH2框架的Web系统综合研究[J].计算机产品与流通,2020(4).
[6]范黎明.基于WEBRTC的车载指挥调度系统的研究与实现[D].西安科技大学,2020.
[7]焦丽华,胡元闯.基于Java Web的共享体育器材网站的设计与实现[J].今日财富(中国知识产权),2020(12):63-64.
[8]朱振文.基于Web的教学管理平台的设计与实现[J].甘肃科技纵横,2020(8).
[9]张猛.MySQL融合式空间数据库扩展研究与应用[D].中国地质大学(北京),2020.
[10]郑智方.MySQL的重要性以及步入云的应用实例[J].计算机产品与流通,2020(01):151.
[11]Suleiman I.Sharif.Elements Of JDBC And Database Application[M].Tritech Digital Media:2018-08-23.
[12]James Laudon,Lawrence Spracklen.The Comong Wave of Multithreaded ChipMultiprocessors[J].International Journal of Parallel Programming,2018(3).
致谢
指缝很宽,时间太瘦,悄悄从指缝间溜走,想想自己刚刚迈入大门的青涩,现在大学生活要离开我们了,有很多的想法,很幸运,应该说是非常的幸运,遇到了能够在一起学习,在一起玩耍的朋友,也遇见了老师们,学习时老师是严格认真负责的,私下里是慈祥的,温柔的,本人被老师从各个方面出发教导着,锻炼着。
此次论文的选择,是自己感兴趣的方面,也是接下来现在很有发展的方面,此次论文的完成将所学的知识,和实际的应用很好的结合在了一起,也是对大学学习的一个总结,一个考验,在此次论文的完成的过程中,遇到了各式各样的问题,给本人造成了很大的困难,为了解决这些困难,查阅相关文献,更加深入的学习与此系统设计相关的知识,使本人有了很大的提高。
此论文的成功需要感谢同学们的热情帮助,而最感谢的是指导老师,没有指导老师就没有这篇论文的成功,在遇到问题时,是老师一遍又一遍的不厌其烦的进行指导,进行详细的注解,感谢老师严谨的和认真的态度帮助本人将这篇论文完成。
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:1158,如若转载,请注明出处:https://www.447766.cn/chachong/173807.html,