Web 服务器的网页版邮箱客户端系统
一、 项目选题
基于实现的一个 Web 服务器的网页版邮箱客户端系统
项目中的服务器为自己实现的 Web 服务器,对 http 访问进行响应
项目中的邮箱客户端是基于 socket 进行 smtp 和 pop3 邮箱连接的客户端实现
该项目将 Web 服务器和邮件客户端两个项目选题相结合
程序功能:
1.Web 服务器功能对响应的 HTTP 资源的请求和对于邮件 API 的访问给予响应
2.邮件能够实现查询邮件,查看邮件详细信息,删除邮件,发送邮件,邮件返回分页等功能
3,此项目在 163 邮箱和 QQ 邮箱测试成功
二、 开发环境和工具
系统环境 | Windows10 1903 |
---|---|
开发工具 | Intellij Idea Ultimate 2019、WebStorm、Chrome |
JDK 版本 | 12.0.2(如果在 jdk1.8 的情况下报错,请按照错误修改) |
三、 项目使用说明手册
- 使用 idea 加载并打开工程
- 在 serverConfig.properties 文件中进行相关的配置文件的配置
- 浏览器输入 http://127.0.0.1/index.html 进入主页面(如果未修改配置文件信息),输入不存在的资源目录则进入错误页面
- 浏览器输入 http://127.0.0.1/mailAgentWeb/index.html 进入邮箱客户端 Web 主页面
- 在该页面可以实现邮件查询、邮件删除、邮件详细信息查看等功能,切换 tab 可以使用邮件发送功能
四、 系统结构
1. 项目目录结构
Src 目录下为 webserver 的实现,webServer 为 Web 服务器主程序,监听 8080 端口对 http 请求进行响应,webThread 为连接线程,当监听到 socket 连接时,创建一个 webThread 进行响应;WebServce 为一个抽象类,是所有的可以部署在这个 Web 服务器上的服务的主程序的父类,通过动态加载,将服务加载到服务器上进行运行;
Webpage 目录下的 index.html 是服务器的默认首页,服务器启动之后,访问 http://127.0.0.1/index.html 即可访问,mailAgentWeb 文件夹下是基于 Web 的邮件客户端的前端页面,主要使用 bootstrap 和 jQuery 进行编写,error.html 是访问到其他页面的错误页面的提示页面;以 Mail 开头的三个类是与邮件客户端的后端服务相关的类,负责对请求的响应作出回应,主要使用了 stmp 协议和 pop3 协议。
2. 系统执行过程
当 Web 服务器模块启动时,首先会寻找项目根目录文件夹下面的 serverConfig.properties 文件,将文件中对于服务器的相关的的配置项加载到一个 map 中,,当我们在进行相关的配置值的使用时,首先判断是否在配置文件已经覆盖,然后在进行默认值的加载配置。然后会遍历 webpage 目录中结尾为 service 的类,并通过 Class.forName()进行加载之后放到服务的列表中,然后通过循环调用所有的类的 start()函数启动服务线程,然后整个服务器启动完成。不仅可以实现对于 8080 端口的访问请求,而且可以根据 webPage 中的 Service 类中自定义的内容添加对应的服务模块进行服务的部署工作。
以 mailAgentService 为例,在服务器运行的时候该服务会被分配一个线程而启动,用于响应关于邮件方面的 http 请求,用户通过 Web 服务器的 http://127.0.0.1/mailAgentService/index.html 链接进入到邮箱服务的前端界面中,该前端界面是由自己实现的 Web 服务器进行驱动的,然后用户可以在前端界面上进行邮件的发送和查看操作,并将通过前端进行响应。
五、 系统内核心实现
1. 模块动态加载
try {
Class tempClass = Class.forName(item);
service = (WebService) tempClass.newInstance();
System.out.println("[万恶之原]-服务----" + service.getClass().getName() + "----启动完毕!");
service.start();
} catch (Exception e) {
System.out.println("[万恶之原]-加载----" + item + "----启动器时出现问题!");
}
2. 对 webpage 下的服务进行扫描
private static List<String> getFiles(String path) {
List<String> list = new ArrayList<>();
File file = new File(path);
String name = null;
File[] files = file.listFiles();
for (int i = 0; i < Objects.requireNonNull(files).length; i++) {
name = files[i].getPath().split("\\\\")[files[i].getPath().split("\\\\").length - 1];
if (name.split("[.]")[name.split("[.]").length - 1].equals("java")){
list.add(name.split("[.]")[0]);
}
}
return list;
}
3. 通过 retr 命令获取邮件,并且通过 JSON 格式返回到 Web 前端
jsonObject = new JSONObject();
List<Map<String,String>> mailList = new ArrayList<>();
int count = 0;
try {
dos.writeBytes("stat" + CRLF);
count = count();
for (int i = 1; i <= count; i++) {
Map<String,String> mailInfoList = new HashMap<>();
dos.writeBytes("retr " + i + CRLF);
while (true) {
String response = dis.readLine();
response = MimeUtility.decodeText(response);
if(response.contains(":") && response.split(":").length > 1){
mailInfoList.put(response.split(":")[0],response.split(":")[1]);
}else if (!response.contains(":") && !response.toLowerCase().equals(".") && !response.equals("")){
mailInfoList.put("Content",response);
}
if (response.toLowerCase().equals(".")) {
break;
}
}
mailList.add(mailInfoList);
}
jsonObject.put("data",mailList);
return jsonObject.toString();
} catch (IOException e) {
e.printStackTrace();
}
4. 配置文件的读取
class ReadConfigUtils {
static Map<String,String> configList = new HashMap<>();
private static String ROOT = System.getProperty("user.dir");
static Map<String,String> getConfigList(String fileName){
if (fileName == null){
fileName = "serverConfig.properties";
}
String configFilePath = ROOT + "/" + fileName;
try {
InputStream inputStream = new FileInputStream(new File(configFilePath));
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while((line = br.readLine()) != null){
if(line.contains("="))
configList.put(line.split("=")[0],line.split("=")[1]);
}
return configList;
} catch (IOException e) {
e.printStackTrace();
}
return configList;
}
}
六、 项目运行截图
1. 首页
2. 邮箱邮件查询
3. 邮件发送
4. 邮件详情
5. 配置文件设置
6. Web 服务器错误页
7. Web 服务器主页
8. 两个不同的邮箱进行测试
QQ 邮箱测试通过:
163 邮箱测试通过:
参考文献
- 网络流量统计分析系统(吉林大学·石景龙)
- Webframe应用服务器中Web容器的设计与实现(扬州大学·张锋)
- 齐齐哈尔合众商务科技有限公司门户网站设计(吉林大学·孟云飞)
- 思科亿网网上交易实现与安全研究(吉林大学·周威)
- 统一用户管理系统开发与设计(南昌大学·郭妍)
- 基于Web Service的旅游管理系统的设计与实现(北京邮电大学·李琳)
- 中小企业web邮件系统的设计与实现(电子科技大学·马谦)
- 基于.NET框架的企业应用集成研究和实现(浙江大学·蒋元星)
- 基于SSH框架的博客用户分享平台的设计与实现(河北工业大学·刘磊)
- 基于J2EE的网站内容管理系统的研究(中国地质大学(北京)·焦兴伟)
- 基于SSH框架的博客用户分享平台的设计与实现(河北工业大学·刘磊)
- 基于多Agent的B/S架构网络管理系统(北京邮电大学·蒋定孚)
- 基于J2EE的网站内容管理系统的研究(中国地质大学(北京)·焦兴伟)
- 基于Web服务的客户智能研究(浙江工商大学·王可)
- 基于J2EE的网站内容管理系统的研究(中国地质大学(北京)·焦兴伟)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设小屋 ,原文地址:https://m.bishedaima.com/yuanma/35847.html