实 习 报 告 本Word下载.docx
《实 习 报 告 本Word下载.docx》由会员分享,可在线阅读,更多相关《实 习 报 告 本Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
3收邮件
3
收取邮件
此功能为用户接收邮件,当用户登录进入系统时,若为系统用户则直接从本系统中收取未读邮件,显示在收件箱中,若为网络用户则从网络服务器获取未读邮件,显示在收件箱中。
鼠标点击
当用户选择收件箱功能时,在相应服务器中查询数据库中所有position为0(即在收件箱中)的邮件,显示在邮件列表中,未读邮件显示状态isRead(0);
当用户选择发件箱功能时,则去服务器数据库中查询所有position为1的邮件显示在其页面,状态isRead
(1);
当用户选择草稿箱功能时,则去服务器数据库中查询所有position为2的邮件显示在其页面;
当用户选择垃圾箱功能时,则去服务器数据库中查询所有position为3的邮件显示在其页面。
显示所有邮件列表
④显示邮件内容
4
查看邮件功能
当我们选中某个邮件的时候,会获取到邮件id和用户id,如果是本地用户的话,则根据id在MailDAO中调用queryLocalById(id)取出邮件的信息,显示在singleMail.jsp中。
点击主题超链接
根据接收到的用户名来判断是网络用户还是本地用户,再根据id调用DAO中的方法,取到邮件的详细信息,显示在页面中
邮件的详细信息
5回复/转发/删除功能
5
回复转发删除功能
当我们在收件箱、发件箱、草稿箱、垃圾箱中点击回复按钮时,会在数据库中查到该邮件信息,会跳转到回复页面,并且显示所有信息;
当点击转发时,在数据库中查到该邮件信息,会跳转到转发页面,显示除了收件人之外的所有信息;
当点击永久删除的时,会将该邮件从数据库中完全删除,如果点击的是删除,则只会将该文件移动到垃圾箱
单击回复转发或者删除
当我们点击的是回复的时候,会在回复页面显示收件人地址,主题,正文信息,如果点击的是转发,则会在转发页面显示主题,正文信息;
收件人地址,主题,正文信息,提示信息
6写邮件
6
发邮件功能
当我们点击写邮件的时候,在writeMail.jsp页面中输入收件人,正文,主题,选择是否添加附件;
当点击发送的时候,接受输入的邮件信息,并保存在数据库中,提示是否成功的信息
收件人,主题,正文
在页面中输入收件人,主题,正文信息,点击发送,保存到数据库中,如果发送成功,则提示你的邮件已发送,如果发送失败,则提示你的邮件发送失败。
提示信息
7密码修改
7
修改密码功能
当我们在菜单栏中点击密码修改按钮的时候,输入旧密码,如果输入的旧密码和你从数据库中取到的密码一样,则输入新密码和确认密码,当两次输入的密码一致的时候,会将修改后的密码保存到数据库中。
旧密码,新密码,确认密码
从数据库中取到该用户的密码和输入的旧密码进行比对,如果一致则输入新密码,确认密码,判断新密码和确认密码是否相同,如果相同则提示修改成功,否则提示修改密码失败。
8地址簿管理
8
地址簿管理
当我们点击地址簿的时候,在FriendDAO中调用list方法,在friendBook.jsp页面显示所有的联系人信息,如果选择修改功能,则接受页面点击修改后传递过来的id,调用FriendDAO中query(id)方法,将DTO对象传递到修改页面friendModify.jsp,输入你要修改的数据,提交修改之后接受修改后的信息,将修改后的信息保存到数据库中,跳到提示页面;
如果是删除,则接受页面点击修改后传递过来的id,调用FriendDAO中delete(id)方法,跳到提示页面。
修改的信息
如果点击的是修改,则将修改后的数据保存到数据库中,跳转到提示页面;
如果点击的是删除,则直接跳转到提示页面
2.数据库设计
1数据项分析
用户表:
【表名:
users】
(uname,upass)
联系人表:
friend】
(fid,uname,fname,nickname,counts)
邮件信息表:
email】
(eid,uname,flag,e_name,e_receive,e_subject,e_date,e_attach,e_content)
邮件类别表:
category】
(uname,categoryid,categoryname)
1新邮件2已读邮件3草稿箱4垃圾邮件5已发邮件
2数据表设计
a.表名:
users
字段名
含义
类型和长度
约束
uname
用户名
varchar(32)
主键notnull
upass
用户密码
notnull
b表名:
friend
fid
好友id
int
主键,自动增长
uname
用户名
notnull
fname
好友名称
nickname
好友昵称
varchar(16)
counts
好友亲密度
notnulldefault1
c表名:
email
描述
eid
邮件id
int
flag
1新邮件
2已读邮件
3草稿箱
4垃圾邮件
5已发邮件
default5
e_name
发件人名称
e_receive
收件人名称
varchar(80)
e_subject
邮件主题
varchar(max)
notnulldefault'
'
e_date
收件日期
e_attach
附件
notnulldefault'
e_content
邮件内容
varchar(150)
d.表名:
category
categoryid
类别
check(categoryidnotin(0,1,2,3,4,5,6))
categoryname
类别名称
3表的创建的实现
第一步:
创建数据库:
qqEmail;
mysql>
createdatabaseqqEmail;
第二步:
创建users表
createtableusers(
unamevarchar(32)primarykeynotnull,
upassvarchar(32)notnull
);
查看表结构:
descusers;
Email表
3.模块及部分代码
(1)启动服务
自动设置服务器端套接字,启动服务后监听客户端的请求,同时显示连接状态
和接收请求的信息。
publicclassUsersDAO{
//连接对象
privatestaticConnectionconn=null;
//定义创建语句对象:
向数据库发送sql语句用的
privateStatementstmt;
privatePreparedStatementps;
//定义结果集对象
privateResultSetrs;
//向数据库添加数据
//<
访问控制修饰符>
<
返回类型>
方法名([参数列表]){}
publicbooleanaddUser(UsersDTOuser){
booleanflag=false;
try{
//第一步:
获取连接对象
conn=DBManager.getConn();
//第二步:
写sql语句
Stringsql="
insertintousers(uname,upass)values(?
?
)"
;
//第三步:
获取预处理命令对象
ps=conn.prepareStatement(sql);
//第四步:
给问号设值
ps.setString(1,user.getUname());
ps.setString(2,user.getUpass());
//第五步:
执行sql语句
flag=!
ps.execute();
}catch(SQLExceptione){
e.printStackTrace();
}
returnflag;
}
publicbooleanupdateUser(UsersDTOuser,StringnewPass){
booleanflag=false;
conn=DBManager.getConn();
Stringsql="
updateuserssetupass=?
whereuname=?
andupass=?
"
ps=conn.prepareStatement(sql);
//给问号设值
ps.setString(1,newPass);
ps.setString(2,user.getUname());
ps.setString(3,user.getUpass());
flag=!
//删除用户
publicbooleandeleteUser(){
获取到连接对象
//第二步:
获取到创建语句对象
stmt=conn.createStatement();
写sql
deletefromuserswhereuname='
haha@'
andupass='
456'
//第四步:
stmt.execute(sql);
//根据条件查询用户(实现登录的功能)
publicbooleanisLogin(UsersDTOuser){
selectcount(*)fromuserswhereuname=?
rs=ps.executeQuery();
intcount=0;
while(rs.next()){
count=rs.getInt
(1);
}
if(count>
0){
flag=true;
}
//查询所有
publicvoidgetAllUsers(){
//获取连接对象
//创建语句对象Statement
//写sql语句
select*fromusers"
rs=stmt.executeQuery(sql);
//用rs.next()判断是否
//取光标指向这一行的值
//可以根据列的索引获取值,第一列的值的索引1,第二列的值的索引是
//还可以根据列的字段名获取值
Stringuname=rs.getString("
uname"
);
Stringupass=rs.getString("
upass"
System.out.println(uname+"
-----------"
+upass);
}
//根据条件查询用户
publicbooleanisRegister(Stringuname){
"
ps.setString(1,uname);
}
(2)登录注册功能:
1)首先访问登录页面,登录页面提供用户名和密码的输入框,输入用户名和密码,点击“登录”按钮,如果用户名和密码正确,则进入系统的首页;
如果用户名和密码错误,则返回到登录页面,并进行提示。
2)在访问页面上提供“注册”按钮,如果没有用户名和密码,则点击“注册”,进入到注册页面,在注册页面正确填写信息之后,点击“提交注册”,则将用户信息保存。
如果注册成功,进入提示页面提示“注册成功”,否则提示“注册失败”。
publicclassLoginServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
//表单提交使用post方法
//用一个request对象中的getParameter("
)的方法获取到页面输入的值
//获取到用户输入的uname的值
Stringuname=request.getParameter("
username"
//获取到用户输入的upass的值
Stringupass=request.getParameter("
password"
//获取到用户输入的验证码
Stringcode=request.getParameter("
checkCode"
//这个是后台自动生成的验证码
StringcheckCode=(String)request.getSession().getAttribute(
"
code"
//判断用户输入的验证码和自动生成验证码是否相同
if(code.equalsIgnoreCase(checkCode)){
//调用DAO中是否可以登录的方法
//创建DAO对象
UsersDAOuDAO=newUsersDAO();
UsersDTOuser=newUsersDTO();
user.setUname(uname);
user.setUpass(upass);
booleanflag=uDAO.isLogin(user);
if(flag){
//可以登录,跳转到主页面email_main.jsp
request.getSession().setAttribute("
user.getUname());
request.getRequestDispatcher("
email_main.jsp"
).forward(request,
response);
}else{
//登录失败,跳转到login.jsp
//给他提示用户名或密码错误
request.setAttribute("
UErr"
"
用户名或密码错误"
login.jsp"
}else{
//验证码错误,给页面提示信息
request.setAttribute("
"
验证码输入错误"
request.getRequestDispatcher("
)
.forward(request,response);
(3)邮件发送
publicclassSendMailServletextendsHttpServlet{
//接受页面传来的参数值
//因为我们写邮件的时候用到了上传图片或者文件,所以在这里不能一般的方式来接收参数
//必须用到SmartUpload类来解析
//第一:
创建解析工具
SmartUploadsu=newSmartUpload();
//第二:
通过工具对request中的数据进行初始化操作
su.initialize(getServletConfig(),request,response);
//第三:
设置文件的限制信息(设置上传文件的格式)
su.setAllowedFilesList("
jpg,jpeg,bmp,gif,png,zip,txt"
//第四:
设置文件上传的大小
su.setMaxFileSize(1024*1024*2);
//开始接受客户端上传
su.upload();
Requestreq=su.getRequest();
//接受收件人
Stringreceiver=req.getParameter("
receiver"
//主题
Stringsubject=req.getParameter("
subject"
//正文
Stringcontent=req.getParameter("
content"
//uname
Stringuname=(String)re