交友系统论文设计报告.docx
《交友系统论文设计报告.docx》由会员分享,可在线阅读,更多相关《交友系统论文设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
交友系统论文设计报告
大型软件项目实训报告
题目:
交友网站系统
选题来源:
校外
指导教师:
姓名:
班级:
学号:
辽宁工程技术大学软件学院
1.序言
1.1选题背景
目前在电子商务大行其道的大情况下,越来越多的人选择上交友网站选择交友,网站上交友可以在家“交友〞,交友不受时间,地点的限制,同时,获得较大的人物信息,可以交到不在当地的朋友。
更重要的是网上交友比传统的交友更加的放便。
但同时网上交友也有很大的风险,遇到钓鱼网站,可能会泄露个人资料。
在现代社会里,网上交友作为一种网络的效劳形式得到了越来越多的人的认可,也已经成为近两年广泛受到用户欢送和商家请来的网络效劳工程。
网络技术的开展为交友的模式的革新带来了新的机遇,现代网络交友将结合现代网络技术,多媒体与传统沟通与学习的优势,改变传统名对面形式的交友方式。
1.2选题目的及意义
本文通过JAVA编程技术,使用主流的面向对象开发工具进行开发,这里我们主要用到myeclipse8.5,tomcat6.0,mysql等,因为要求交友的网站具有可视美观的操作界面,所以我们用基于c/s的myeclipse的作为开发的环境。
同时,本程序对系统要求配置较低,运行速度快,而却对数据库管理要求较低。
本程序数据库采用mysql进行数据存储,该数据库可实现关系较为简单的数据管理。
1.3选题完成情况
2021年12月25日选题后一个月内完成。
2.工程需求分析
2.1工程功能需求
1用户登录验证功能
2用户注册功能
3查看用户列表功能
4添加用户图片显示功能
5删除修改用户信息功能
2.2工程性能需求
该系统是专门用于异地的交友的群,实现了用户的登录和注册功能,可以在本地上传图片以及后续的添加删除操作等,不同用户可以查看全部的用户信息但不可以修改,只有当前登录用户才可以修改自己的根本信息。
它应该具有开放性、方便性和灵活性。
在本文中主要分析了用户交友网站的界面设计,功能介绍,使用说明以及系统需求,为用户提供可靠地交友平台。
用户可以是学校等单位的教师及学生和企事业单位的培训部门,有助于增加同时,学生之间的沟通和了解,有利于企业的团结和学校的交友。
3.工程概要设计
3.1系统功能结构设计
要实现一个软件系统,首先应该进行需求分析,这样才能令设计出的软件满足用户的各项功能。
用户注册登录,如果密码正确,那么进入菜单界面,进入在交友系统,结构图如下:
图3-1在线交友系统统结构图
4.工程详细设计
4.1模块1描述
4.1.1功能描述
〔一〕必备功能说明:
用户登录设置:
查询数据库,匹配密码,验证码。
用户注册设置:
插入用户根本信息,设置验证码。
根本信息库管理:
根本信息分为,用户的根本信息,和图片信息。
验证用户的平安性:
对非登录用户,不能修改用户信息。
〔二〕开发语言与开发环境:
MyEclipse、Java、MySql数据库
4.1.2性能描述
要实现一个软件系统,首先应该进行需求分析,这样才能令设计出的软件满足用户的各项功能。
该系统可以实现多个用户同时登录并参看全部用户的信息。
实现在本地上传图片功能。
登录和注册时进行平安验证使网友能够平安和真实的交到朋友。
4.2界面构建
1、应用了4个根本的静态的页面,分别是login,list。
Regist,listdetial。
2、登陆界面的主要功能是查询数据库信息,并进行判断,返回错误或者跳转到用户类表界面。
3、注册界的主要功能是向数据库插入数据,并进行平安验证,注册成功跳转到登录界面,并创立保存用户图片的文件夹。
4、当用户在进行个别录入、删除或错误输入操作时,会弹出相应对话框提示用户。
如当录入成功或删除成功会跳转到登陆界面中,当录入、删除失败以及输入不当时,弹出错误以及简单的错误原因提示用户重新操作。
5、页面布局尽量合理,各组件位置分布均匀美观。
6、用户列表界面,可以查看所有用户的根本信息,对当前用户的根本信息进行修改和查看。
7、用户详细界面,可以对当前用户的信息进行修改和删除,并向数据库进行修改,同时添加或删除当前用户图片。
4.3详细设计
4.3.1利用工厂化模型
如果dao中不只是一个接口的话,我们在service调用实现类就有一定的麻烦,不知道那个实现类完成那个接口。
所以就有了工厂模型,factory定义一个工厂工具类,再定一个,configutil工具类,用configutil读config.properties配置文件,并且提供相应的方法,来方便获得该配置文件的内容。
当中ClassLoader类类加载器负责查找.class文件,并且将该文件的内容读入到,方法区,然后依据这些内容构造一个对应的class对象。
〔ClassLoaderloaderConfigUtil.class.getClassLoader();〕类加载器的getResourceAsStream方法,会依据classpath搜索资源文件,并且转换成一个输入流。
这样就可以通过接口找出实现类的名称,在通过factroy类,利用反射创立出一个实例。
反射可以应用一个类的名字创立一个实例。
4.3.2servlet跳转界面优化设计
我们现在在web.xml文件中用到了太多的跳转,代码太多。
如何让一个servlet处理多种不同的请求,首先获取到地址页面的名称,Stringaction=uri.substring(uri.indexOf("/"),uri.lastIndexOf("."));在service方法里面,分析请求资源路径。
然后用ifelse判断页面的action名称就可以了。
在web.xml文件中*.action,匹配所有以.action结尾的请求。
这样就实现了让一个servlet处理多种不同的请求。
4.3.3用户登录时session验证设计
在进行登录操作中,如果直接输入list.jsp访问,会直接进入到列表界面,登录就失去意义了,所以要在登录时增加一个验证,session验证,浏览器在访问效劳器的时候,效劳器会先创立一个
session对象(该对象有一个id,其值是唯一的,一般称之为sessionId),接下来效劳器默认会使用cookie机制将sessionId发送给浏览器,浏览器会将这个sessionId保存在内存里面;当浏览器再次访问效劳器的时候,会将sessionId发送给效劳器,效劳器会依据sessionId找到之前创立的session对象。
具体的步骤,首先获得一个session,Sessions=request.getSession(booleanflag);flag=true时,效劳器会检查请求当中是否包含sessionId,如果没有,那么创立一个session对象;如果有,效劳器会依据sessionId查找对应的session对象,如果找到了,那么返回,找不到,会创立一个新的session对象。
当flag=false时,找不到,返回null。
进行session验证,在登录成功以后,在session对象上绑订相关的数据。
session.setAttribute("user",user);绑定一个user,然后对list页面进行session验证,
Objectobj=session.getAttribute("user");
if(obj==null){
//没有登录,那么跳转到登录页面response.sendRedirect("login.jsp");
return;
}
4.3.4文件上传设计
首先些个上传所要用到的jsp。
其中用到浏览框,设置时要注意对于表单,设置enctype="multipart/form-data",并且,表单的提交方式必须是"post"。
这是html里面的规定。
写好jsp后在效劳器端注意,不能够直接使用requset.getParameter(Stringname)获取参数值。
需要用InputStreamips=request.getInputStream//获得一个2进制字节码。
具体步骤,首先创立一个解释器,提供解析是的缺省配置。
FileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadsfu=newServletFileUpload(factory);这样对象sfu.parseRequest(request〕将每一个jsp中表单的数据封装到一个对应的FileItem对象当中。
我们这里集合中就有两个类型的数据,一个是普通的文本框,另一个要上传文件的浏览框。
判断是否是普通的表单域item.isFormField()。
item是个集合,在判断时需要对它进行遍历。
根据逻辑路径获得实际部署的物理路径ServletContextsctx=getServletContext();获得实际部署时的物理路径Stringpath=sctx.getRealPath("upload");获得文件名,Stringfilename=item.getName();生成文件写入到硬盘当中Filefile=newFile(path+"//"+filename);item.write(file);这样就不用生硬的写出绝对路径,形成了动态的生成。
4.3.4用户登录设计
应用以前些的findbyusername()方法,根据username查询所有的user属性,在service方法中获得username和pwd,调用findbyusername()看看所得到的密码是否相同,如果相同那么成功登录跳转到list界面,不同报错,写个转发,用request绑定一句话,转发到login。
jsp页面,在用户登录文本框后面转发error-jsp,输出写好的话,加上<%=(msg==null?
"用户名不能为空":
msg)%>解决用户为空的问题。
本系统采用java编程,主要编程类与页面信息的设计如下:
表1:
包与类定义
包名
类名
功能
dao
PicDAO.java
图片功能实现类
UserDAO.java
用户功能实现类
Entitiy
Pic.java
图片实体类
User.java
用户实体类
Tag
DateTag.java
时间标签类
SessionValidate.java
Session验证标签
Util
DBUtil.java
数据库连接工具类
Web
ActionServlet.java
Servlet实现类
CheckCodeServlet.java
验证码类
表2:
页面定义
包名
类名
功能
Jsp页面
head.jsp
页面的表头
Index.jsp
页面索引
Login.jsp
登录页面
Regist.jsp
注册界面
User_list.jsp
用户列表界面
userDetail.jsp
用户详细界面
4.3.5模块设计
(1)用户注册模块
此模块是添加新的用户,填写用户个人根本信息,包括、性别、、密码、年龄、对方根本要求,并添加到用户数据库中。
(2)用户登录模块
如果用户要使用为注册用户提供的功能,那么在使用之前必须登录。
用户只要输入用户名、密码就可以了。
假设用户输入的以上两项与数据库中保存的相符,那么说明用户登录成功,可以开放全部前台子系统;如果不符,那么登录失败。
(3)用户,图片文件实现类模块
在此模块中包含通过用户名,用户id查找用户全部信息,保存用户信息。
用户登录时通过用户名查找用户密码,并进行验证,注册用户时调用save〔〕方法,保存数据信息。
在上传文件中通过PicDAO中保存图片文件到注册时指定的文件夹。
(4)用户详细资料模块
用户详细资料模块对用户的根本信息进行,删除、修改和添加图片的操作。
4.3.6功能界面
4.3.6.1登陆界面
4.3.6.2注册界面
4.3.6.3用户列表界面
4.3.6.4详细介绍界面
4.3.7主要源代码
主要servlet代码:
packageweb;
importjava.io.File;
importjava.io.IOException;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet..Servlet;
importjavax.servlet..ServletRequest;
importjavax.servlet..ServletResponse;
importjavax.servlet..Session;
importorg.apachemons.fileupload.FileItem;
importorg.apachemons.fileupload.FileUploadException;
importorg.apachemons.fileupload.disk.DiskFileItemFactory;
importorg.apachemons.fileupload.servlet.ServletFileUpload;
importcom.sun.org.apachemons.beanutils.BeanUtils;
importdao.PicDAO;
importdao.UserDAO;
importentity.Pic;
importentity.User;
publicclassActionServletextendsServlet{
publicvoidservice(ServletRequestrequest,ServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
Stringuri=request.getRequestURI();
Stringaction=uri.substring(
uri.lastIndexOf("/"),uri.lastIndexOf("."));
if(action.equals("/regist")){
Stringusername=request.getParameter("username");
UserDAOdao=newUserDAO();
try{
Useruser=dao.findByUsername(username);
if(user!
=null){
request.setAttribute(
"regist_error","注册错误");
request.getRequestDispatcher("regist.jsp")
.forward(request,response);
}else{
user=newUser();
BeanUtils.populate(user,
request.getParameterMap());
intid=dao.save(user);
/*Stringpath=getServletContext().getRealPath("upload");
Filefile=newFile(path+"//"+"pic_"+id);
if(!
file.exists())
file.mkdirs();*/
response.sendRedirect("login.jsp");
}
}catch(Exceptione){
e.printStackTrace();
thrownewServletException(e);
}
}elseif(action.equals("/login")){
Stringusername=request.getParameter("username");
Stringpwd=request.getParameter("pwd");
UserDAOdao=newUserDAO();
try{
Useruser=dao.findByUsername(username);
if(user!
=null&&user.getPwd().equals(pwd)){
Sessionsession=
request.getSession();
session.setAttribute("user",user);
response.sendRedirect("list.do");
}else{
request.setAttribute("login_error",
"登陆错误");
request.getRequestDispatcher("login.jsp")
.forward(request,response);
}
}catch(Exceptione){
e.printStackTrace();
}
}elseif(action.equals("/list")){
UserDAOdao=newUserDAO();
try{
Listusers=dao.findAll();
request.setAttribute("users",users);
request.getRequestDispatcher("user_list.jsp")
.forward(request,response);
}catch(Exceptione){
e.printStackTrace();
thrownewServletException(e);
}
}elseif(action.equals("/userDetail")){
intid=Integer.parseInt(request.getParameter("id"));
UserDAOdao=newUserDAO();
PicDAOdao2=newPicDAO();
try{
Useruser=dao.findByUserId(id);
Listpics=dao2.findPics(id);
request.setAttribute("user",user);
request.setAttribute("pics",pics);
request.getRequestDispatcher("userDetail.jsp")
.forward(request,response);
}catch(Exceptione){
e.printStackTrace();
thrownewServletException(e);
}
}elseif(action.equals("/upload")){
intuserId=Integer.parseInt(request.getParameter("id"));
DiskFileItemFactoryfactory=
newDiskFileItemFactory();
ServletFileUploadsfu=
newServletFileUpload(factory);
try{
Listitems=
sfu.parseRequest(request);
for(inti=0;iFileItemcurr=items.get(i);
if(curr.isFormField()){
//
}else{
Stringpath=
getServletContext().getRealPath("upload");
StringfileName=curr.getName();
Filefile=newFile(path+"/pic_"+userId);
if(!
file.exists()){
file.mkdirs();
}
System.out.println(file);
fileName=fileName
.substring(fileName.lastIndexOf("/")+1);
curr.write(newFile(path+"//"+"pic_"+userId
+"//"+fileName));
PicDAOdao=newPicDAO();
Picpic=newPic();
pic.setPicName(fileName);
pic.setUserId(userId);
dao.save(pic);
response.sendRedirect(
"userDetail.do?
id="+userId);
}
}
}catch(Exceptione){
e.printStackTrace();
}
}elseif(action.equals("/delete")){
intuserId=Integer.parseInt(request.getParameter("userId"));
PicDAOdao=newPicDAO();
try{
Listpic=dao.findPics(userId);
//dao.delete(pic.get(userId));
}catch(Exceptio