1、郑州轻工业学院实 训 报 告实训名称: 基于 MVC 模式的个人信息管理系统 姓 名: 院 (系): 软 件 学 院 专业班级:软件工程(测试技术)10-01 班 学 号: 541013110107 指导教师:张志峰、刘育熙、李璞、范乃梅、王振飞 成 绩: 时间: 2012 年 6 月 18 日 至 2012 年 6 月 29 日1.实训目的作为检验与提升学习能力的途径,课程实训是学习程序开发与数据库设计与开发不可缺少的环节,它可以使学生将理论应用于实践,将所学知识与实际相结合,加深对所学知识的理解和应用。学完此门课程以后,能使用 jsp 与数据库开发具有动态功能的各种网站与系统。今天我所介绍
2、的是实训期间所做的个人信息管理系统,运用 servlet+javaBean+jsp的 mvc 模式,在与 mySql 数据库的联合下完美的实现了个人信息的管理。通过本次实训,可以检验一下本学期同学们对 JSP 编程的学习情况,让本学期学到的JSP 程序设计知识得以用于实施,理论联系实际,增进同学们对 JSP 的理解和运用,为大三对其他编程语言的学习提供便利。同时通过此次实训培养同学们的在具体工作上的一种工作态度和精神以及动手能力等。2、实训内容2.1 项目分析在日常办公中的许多常用数据,比如朋友电话、邮件地址、日程安排、日常记事都可以用此系统进行管理。个人信息管理系统可以置于握在手掌上的数字助
3、理器,提供电子名片、便条、行程管理等功能。本实训通过 B/S 设计,可以发布到网上,用户可以随时存取个人信息。用户可以在系统中任意添加、修改、删除个人数据,包括个人的基本信息、个人通讯录、日程安排、个人文件管理。要实现的功能包括四个方面:(1)个人基本信息管理模块个人的姓名、性别、出生日期、民族、学历、职称、登录名、密码、电话、家庭住址等。(2)用户个人通讯录模块个人姓名、电话、邮箱、工作单位、地址、QQ 等。可以自由添加联系人的信息,查询或删除某些联系人。(3)日程安排模块添加从某一时间到另一时间要做什么事,日程标题、内容、开始时间、结束时间。可以自由查询,修改,删除。(4)个人文件管理模块
4、用户在网上需要存储的临时文件。用户可以新建文件,修改、删除、移动文件。上传文件、修改文件名、下载文件、删除文件等。2.2 系统的设计思路系统功能描述如下:(1)用户登录个人使用用户名和密码登录系统。(2)查看个人信息主界面显示个人基本信息:姓名、性别、出生日期、民族、学历、职称、电话、家庭住址、邮箱地址、登录名等。(3)修改个人信息用户可以修改自己的基本信息。如果修改了登录名,下次应使用新的登录名。(4)修改登录密码用户可以修改登录密码。(5)查看通讯录浏览通讯录列表,按照姓名检索等(6)维护通讯录增加、修改、删除联系人,单选删除。(7)查看日程安排查看日程安排列表,可以查看某一日程的内容时间
5、等。(8)维护日程一个新的日程安排包括:日程标题,内容,开始结束时间。对日程进行添加、修改、删除等操作。(9)浏览下载文件任意浏览文件,并可以下载到本地。(10)维护文件修改、删除移动文件,修改文件名、下载文件、删除文件等操作。运行设计个人信息理系统用户登陆个人信息管理通讯录管理 日程安排管理个人文件管理查看信息修改信息修改密码查看通讯录增加联系人修改联系人查看日程增加日程修改日程查看文件上传文件用户注册退出管理系统删除联系人 删除日程下载文件删除文件2.3 项目设计本实训在数据库中可建立表,用于存放相关信息。用户表(user )包括的字段有用户名密码,用于处理 index.jsp 页面中用户
6、登录的信息 ,如图 1表 1 用户表(user)字段名称 字段类型 字段长度 字段说明username varchar 50 用户名password varchar 50 用户密码id varchar 50 用户身份个人信息表(userinfo)包括的字段有 ID、用户名、用户性别、出生日期、民族、学历、职称、电话、家庭住址和电子邮件,用户处理个人信息 管理功能,如表 2表 2 个人信息表(userinfo) 字段名称 字段类型 字段长度 字段说明Id varchar 50 用户编号username varchar 50 用户名usersex varchar 10 用户性别userbirthd
7、ay varchar 20 出生日期usernational varchar 30 民族userdegree varchar 30 学历userperfession varchar 50 职称usertelephone varchar 50 电话userhome varchar 80 家庭住址useremail varchar 50 电子邮箱通讯录表(telephone)包括的字段有姓名、电话、邮箱、工作单位、地址和 QQ 等,用于处理通讯管理功能中保存的用户信息,如表 3表 3 通讯录表(telephone)字段名称 字段类型 字段长度 字段说明telephonename varchar 5
8、0 记录用户名Telephone varchar 50 用户电话email varchar 50 用户电子邮箱work varchar 80 用户工作单位home varchar 80 用户家庭住址QQ varchar 30 用户 QQ 号吗日程安排表(day)包括的字段有日期和内容等,用于处理日程安排管理功能中有关日程的信息,如表字段名称 字段类型 字段长度 字段说明datetime varchar 20 日程日期thing varchar 80 日程内容文件表(file)包括的字段有文件名、文件的编号等,用于处理个人文件信息,如表 5字段名称 字段类型 字段长度 字段说明fileday v
9、archar 50 文件日期filename varchar 50 文件名字username varchar 20 上传人fileid varchar 20 文件编号2.4 系统数据处理用户通过登录页面输入用户名和密码进入系统,通过与数据库(mysql)的连接检验用户是否正确,若正确则进入个人信息管理页面,否则会显示登录错误清空登录。系统中个页面之间的跳转是通过超链接进一步实现的。各功能和模块的实现1. 个人信息管理查看信息: 此页面下的信息是对用户中输入的信息直观的显示。页面上端与修改信息和修改密码超链接,没有其他的具体功能。以下的修改信息和修改密码上端均为超链接,可实现页面之间的相互跳转。
10、修改信息:此页面显示登录用户的相关信息,通过信息中的编号作为主键对用户信息进行修改,修改后的信息会通过查看个人信息刷新显示。中间如有对应属性未输入或者修改信息的记录与原记录无联系,会有对话框提醒显示。此时,页面仍停留在修改信息的页面。修改密码:此页面中新密码框需要覆盖以前的密码,通过数据库加以更新和保存,当输入新密码更新后,会显示修改成功对话框加以提醒,否则就是未输入新密码,停留在修改密码页面。2 通讯录管理查看通讯录: 此页面是与用户有关的联系人的个人信息,也是对通讯信息的直观显示,当记录的数目相对较大需要对此页面的内容予以分页处理。页面上端为增加联系人、修改联系人和删除联系人的超链接。以下
11、相同不再赘述。增加联系人:此页面下是对联系人各个属性以文本框相关内容的形式输入,确定后提交给数据库进行存储 ,跳转至查看通讯录的界面,将新的记录添加更新到此页面。当输入的属性不能为空或者没有信息输入时,会有对话框显示提醒性信息,此时页面仍停留在增加联系人的页面。修改联系人:此页面是对已有信息的修改,是以该信息下的某一属性为主键对该记录进行修改,若修改成功则直接跳转至查看通讯录对记录进行更新,若修改不成功会出现对话框信息提示,仍停留在修改信息的页面。删除联系人:此页面是对已有信息的删除,是以该信息下的某一属性为主键对该记录进行删除,若删除成功则直接跳转至查看通讯录对记录进行更新,若删除的内容记录
12、中没有,则删除不成功会出现对话框信息提示,此时仍停留在删除联系人页面。3、 日程安排管理查看日程:此页面是与用户有关的日程信息,也是对日程信息的直观显示,当记录的数目相对较大时需要对此页面进行分页处理。页面上端的增加日程、修改日程和删除日程超链接。增加日程:此页面下是对日程管理中各个属性以文本框的形式输入,确定后提交给数据库进行存储 ,跳转至查看日程的界面,将新的记录添加更新到此页面。当输入的属性为空或者没有信息输入时,会有对话框显示提醒性信息,此时页面仍停留在增加日程的页面。修改日程:此页面是对已有信息的修改,是以该信息下的某一属性为主键对该记录进行修改,若修改成功则直接跳转至查看日程对记录
13、进行更新,若修改不成功会出现对话框信息提示,此时页面仍停留在修改日程的页面。删除日程:此页面是对已有信息的删除,是以该信息下的某一属性为主键对该记录进行删除,若删除成功则直接跳转至查看日程对记录进行更新,若删除不成功会出现对话框信息提示,此时页面会停留在删除日程的页面。4、 个人文件管理查看文件:此页面是与用户有关的文件信息,也是对文件信息的直观显示,当记录的数量相对较大需要对此页面进行分页处理。页面上端为删除文件和上传下载文件的超链接。删除文件:此页面是对已有的文件信息进行彻底的删除,是以该信息下的某一属性为主键对该记录进行删除,若删除成功则跳转至查看文件对记录进行更新,若删除不成功会出现对
14、话框信息提示,页面会停留在删除文件的页面。上传和下载文件:此页面可以显示上传和下载的文件信息,可以从其他路径下上传和下载文本较小的文件,上传成功会更新值查看信息页面,否则会停留此页面,等待新的上传,对于已上传的文件可以双击该文件会出现对话框要求保留或打开,选择保留下载到某一路径下。5、退出页面 退出页面与登录页面超链接,通过超链接重新回到登录页面。2.5 系统出错处理对于系统中的各功能和模块中实现时出现的问题,会有异常处理和错误提示。当系统中遇到页面跳转和功能未实现问题,会有异常处理。当系统仅是以为达到目的,此时是以错误提示来予以处理,可以再次重新输入相关数据,从而达到目的。对于系统中较常出错
15、的问题往往有以下几种:1、在 jsp 文件里与 servlet 的超链接,以及自动生成的 xml 文件,尤其是新目录文件生成要注意路径,否则会影响页面的跳转。2、对于系统模块中的属性在和数据库相连接传输数据时,要注意字符间的转换否则会在页面和数据库中显示乱码,此时要修改代码和数据库中的编码方式要设一致均为 UTF-8,必要时要修改 mysql 安装下的文件默认格式为 utf83、在上传和下载过这一模块下要注意组件的加载使用,在传递参数的对象上要格外小心注意传递参数的顺序要和数据库中各属性顺序保持一致,否则会在显示页面上统一记录下个属性的响应值发生混乱。系统设计效果(图示)登陆页面的实现(jsp
16、+servlet+javabean)index.jsp个人信息管理系统实训欢迎进入个人信息管理系统用户账号 用户密码IndexServlet.javapackage servlet;import java.io.*;import javax.swing.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;public class IndexServlet extends HttpServlet public IndexServlet() super();public void destroy() supe
17、r.destroy(); public void wrong1()String msg=“用户名不能为空!“ ;int type=JOptionPane.YES_NO_OPTION;String title=“信息提示“ ;JOptionPane.showMessageDialog(null,msg,title,type); public void wrong2()String msg=“用户名不正确,登录失败!“;int type=JOptionPane.YES_NO_OPTION;String title=“信息提示“ ;JOptionPane.showMessageDialog(null
18、,msg,title,type); public void wrong3()String msg=“密码不正确,登录失败!“;int type=JOptionPane.YES_NO_OPTION;String title=“信息提示“ ;JOptionPane.showMessageDialog(null,msg,title,type); public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request,re
19、sponse);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String username=new String(request.getParameter(“username“).getBytes(“ISO-8859-1“),“UTF-8“);String password=new String(request.getParameter(“userpass“).getBytes(“ISO-8859-1“),“UTF
20、-8“);if(username.equals(“) wrong1();response.sendRedirect(“index.jsp“); elsetryConnection con=null;Statement st=null;Class.forName(“com.mysql.jdbc.Driver“);con=DriverManager.getConnection(“jdbc:mysql:/localhost:3306/238“,“root“,“root“);st=con.createStatement();String sql=“select * from user where us
21、ername=“+username+“;ResultSet rs=null;rs=st.executeQuery(sql);if(rs.next()String sql2=“select * from user where password=“+password+“;rs=st.executeQuery(sql2);if(rs.next()response.sendRedirect(“main.jsp“); else wrong3();response.sendRedirect(“index.jsp“); else wrong2();response.sendRedirect(“index.j
22、sp“); catch(Exception e)e.printStackTrace(); public void init() throws ServletException IndexBean.javapackage JavabBean;public class IndexBean private String username;private String password;public String getUsername() return username;public void setUsername(String username) this.username = username
23、;public String getPassword() return password;public void setPassword(String password) this.password = password;登录页面的图是效果如图 1用户注册的实现与通讯录以及日程的添加基本相同,仅用户注册界面展示如下图,用户名已存在和注册成功仅以个人文件管理实现展示查看文件实现file.jsp查看个人文件删除个人文件上传下载个人文件 查看个人文件日期名字intPageCount)intPage=intPageCount;if(intPageCount0)rs.absolute(intPage-1
24、)*intPageSize+1);i=0;while(i第页 共页“下一页1)%“上一页查看文件图示效果删除个人文件实现deletefileinfo.jsp查看个人文件删除个人文件上传下载个人文件 删除个人文件名字输入要删除的文件名字DeleteFileinfoBean.jsppackage servlet;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import j
25、avax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JOptionPane;public class DeleteFileInfoServlet extends HttpServlet public DeleteFileInfoServlet() super();public void dest
26、roy() super.destroy(); public void wrong()String msg=“该名字的文件已成功删除!“ ;int type=JOptionPane.YES_NO_OPTION;String title=“信息提示“ ;JOptionPane.showMessageDialog(null,msg,title,type);public void wrong1()String msg=“名字不能为空!“ ;int type=JOptionPane.YES_NO_OPTION;String title=“信息提示“ ;JOptionPane.showMessageDia
27、log(null,msg,title,type);public void wrong2()String msg=“该名字不存在,请重新输入!“;int type=JOptionPane.YES_NO_OPTION;String title=“信息提示“ ;JOptionPane.showMessageDialog(null,msg,title,type);public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(re
28、quest,response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String filename=new String(request.getParameter(“filename“).getBytes(“ISO-8859-1“),“UTF-8“);System.out.println(filename);if(filename.equals(“)wrong1();response.sendRedirec
29、t(“deletefileinfo.jsp“);elsetryConnection con=null;Statement st=null;Class.forName(“com.mysql.jdbc.Driver“);con=DriverManager.getConnection(“jdbc:mysql:/localhost:3306/238“,“root“,“root“);st=con.createStatement();String sql=“delete from file where filename=“+filename+“;int row=st.executeUpdate(sql);
30、if(row=1)wrong();response.sendRedirect(“123.jsp“);elsewrong2();response.sendRedirect(“deletefileinfo.jsp“);catch(Exception ee)ee.printStackTrace();public void init() throws ServletException DeleteFileInfoBean.jsppackage JavabBean;public class DeleteFileInfoBean private String filename;public String
31、getFilename() return filename;public void setFilename(String filename) this.filename = filename;删除的人文件试图效果上传和下载文件(jsp+servlet)updownfile.jspfunction check() var form = document.getElementById(“uploadFrom“);if(form.upload.value.length=0)alert(“请选择上传的文件!“);return;form.submit(); “ method=“post“ ENCTYPE
32、=“multipart/form-data“ id=“uploadFrom“欢迎 登录!注销文件上传:名字日期“ title=“单击文件名下载“上一页“上一页“下一页“下一页UpLoad.javapackage servlet;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Calendar;import javax.servlet.ServletException;import javax.servlet.http.HttpServ
33、let;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import bean.File;import com.jspsmart.upload.SmartUpload;import database.File_DB;public class UpLoad extends HttpServlet public UpLoad() super();public void destroy() s
34、uper.destroy(); public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(“text/html“);PrintWriter out = response.getWriter();out.println(“);out.println(“);out.println(“ A Servlet“);out.println(“ “);out.print(“ This is “);
35、out.print(this.getClass();out.println(“, using the GET method“);out.println(“ “);out.println(“);out.flush();out.close();public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException SmartUpload mySmartUpload = new SmartUpload();mySmartUpload.initial
36、ize(this.getServletConfig(), request, response);trymySmartUpload.setDenyPhysicalPath(true); / 拒绝物理路径mySmartUpload.setMaxFileSize(5000000); mySmartUpload.setTotalMaxFileSize(50000000); mySmartUpload.upload();com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);String fileName = myFil
37、e.getFileName();HttpSession session=request.getSession();String fileday=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“).format(Calendar.getInstance().getTime();File file_bean=new File();file_bean.setFileday(fileday);file_bean.setFilename(fileName);File_DB file_db=new File_DB();boolean result=file_db.upl
38、oad(file_bean);if(result)request.getRequestDispatcher(“Page“).forward(request, response);else String err=“上传失败!“;request.setAttribute(“err“, err);request.getRequestDispatcher(“error.jsp“).forward(request, response);mySmartUpload.save(“/upload“);catch (Exception e)e.printStackTrace(); public void ini
39、t() throws ServletException DownLoad.javapackage servlet;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.ser
40、vlet.http.HttpServletResponse;public class DownLoad extends HttpServlet public DownLoad() super(); public void destroy() super.destroy();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException this.doPost(request, response);public void doPost(H
41、ttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String url = request.getParameter(“fileName“); url = new String(url.getBytes(“ISO-8859-1“),“GBK“); File file = new File(request.getRealPath(“/upload“), url); FileInputStream in = new FileInputStream(file); O
42、utputStream os = response.getOutputStream(); response.addHeader(“Content-Disposition“, “attachment;filename=“+ new String(file.getName().getBytes(“GBK“), “ISO-8859-1“);response.addHeader(“Content-Length“, file.length() + “);response.setCharacterEncoding(“GBK“); response.setContentType(“application/o
43、ctet-stream“);int data = 0;while (data = in.read() != -1) os.write(data); / public void init() throws ServletException 上传和下载图是效果3.实训心得大二这学年已经结束了,在这一年的学习中我觉得只有专业课提升了上去,我想真正掌握一门技术,也许这次实训给我了一次难得的机会。我很想看一看我所学的专业在IT 行业是如何的受欢迎,希望短短的两周实训,它会为我以后的人生指明道路。考试过后没几天,6 月 18 号的实训就如期到来,今年的实训项目是个人信息管理系统,这个系统在课本第 8 章出
44、现了好多次,而且考试也出了,我在这一章上下了很大的功夫,无论是 jsp 代码还是各种语法我都编书看了一遍在做个人文件管理时,我下了不少功夫上网查找资料和请教同学老师我都尽自己的最大努力,因为我觉得在这一学期里我学到了很多很多。我对网页那种动态的画面和功能很是喜欢和好奇,每一个功能的具体实现我都会为自己高兴,因为我取得了成功。虽说在机房里总是累得腰酸脖子疼可是晚上躺在床上那是一种相当的成就感。 在学校的闲余时间我会专注地的看一些书籍,尤其是专业书籍,对于计算机也许他的新颖更新太快,图书管理书籍版本多的让人难以看过。不扩对于感兴趣的网站开发我是相当喜欢,因为每次上网看到许多网站都有一种羡慕不已的感觉,什么时候我能够制作一个属于自己的网站,期待着那一天。我很感谢学校和院里为我们安排的实训,他拓展了我们的动手实践能力,是我们的专业基础更加的牢固。 因此,我想在下一年的实训中,老师们能够为我们考虑考虑是否能够在平常的学习中,能够多给我些提示和帮助,这样的话每一个人都会感到相当的轻松。在下学期中我将会更加努力的学习专业课,通过这次实训让我认识到专业课是多么的重要。在此,我期待下一年的实训,我想那时我将会有一个质的飞跃。