50行代码实现网站服务器3

简介: 50行代码实现网站服务器3

在上一讲我们针对需求提出了一种新的解决方案,经过分析我们发现这种方法虽然在某种程度上改善了代码的结构,但是本质上只是一种任务的转移,并未解决问题。本讲我们将提出一种新的解决方案。

 

1 问题描述

对于之前的网站服务器,我们想要在启动之前打印"some operations before server start!",在服务器销毁之前打印"some operations before server destroy!"

 

2 问题分析

上一讲提出的解决方案本质问题在于需求改变时,需要不停的去修改WebServerAction类,这严重的违反了开闭原则。

我们希望达到的效果是,当需求改变时,我们希望实现现有的接口或继承现有的类或增加新的类来达到目的。

为了实现该目标,我们提出下面新的解决方案。

 

1) 设计新的接口ServerListener,该接口具有两个方法,分别是服务器启动和销毁时对应的操作。

public interface ServerListener {

  public void start();

  public void destroy();

}

 

2)第一个需求来临时,实现该接口。

public class OneServerListener implements ServerListener {

 

  @Override

  public void start() {

       System.out.println("> This is operation 1 before server start!");

  }

 

  @Override

  public void destroy() {

       System.out.println("> This is operation 1 before server destroy!");

 

  }

}

 

3)WebServer增加成员变量List<ServerListener>,并做初始化操作。

privateList<ServerListener> serverListenerList;

 

  WebServer() throws IOException {

 

       serverSocket = newServerSocket(WebConfig.SERVER_PORT);

       serverListenerList= new ArrayList<ServerListener>();

  }

 

4) run方法开始和结束前,执行所有实现了ServerListener接口的方法。

public void run() throwsIOException {

       for (ServerListener listener : serverListenerList)

           listener.start();

 

       // ...

       for (ServerListener listener:serverListenerList)

           listener.destroy();

  }

 

5) 初始化WebServer时,添加所有的ServerListener

WebServer webServer = new WebServer();

webServer.addListener(newOneServerListener());

webServer.run();

6) 当有新的需求时,我们需要做的工作是:

- 实现ServerListener接口,完成新的需求;

- webserver初始化的时候,调用addListener方法。

 

3 总结

本讲针对上一讲提出的问题,经过细致分析,发现问题并提出了一种新的解决方案,该方案能够较好的应对需求的变化,符合面向对象的设计原则-开闭原则。为了更好的适应需求变化,后面我们可以将listener的信息在配置文件中进行配置。

目录
相关文章
|
5月前
|
数据采集 中间件 Python
Scrapy爬虫:利用代理服务器爬取热门网站数据
Scrapy爬虫:利用代理服务器爬取热门网站数据
|
22天前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
2月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
17 0
|
3月前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
114 1
|
4月前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
64 8
|
4月前
|
弹性计算 运维 Java
解决方案测评(高效构建企业门户网站方案)基于ecs&云效&云解析DNS&VPC结合的自搭建方案报告
该文档是一个关于使用ECS、云效、云解析DNS和VPC结合的自搭建方案报告。主要内容包括前言部分,可能详细探讨了如何集成这些阿里云服务以构建自定义系统。由于提供的内容有限,具体的实施方案和细节未在摘要中体现。
203 2
|
3月前
|
域名解析 弹性计算 监控
阿里云服务器搭建博客网站教程
1. 购买阿里云ECS实例 2. 配置域名解析至服务器IP 3. 安装Nginx/Apache,部署网站文件 4. 安装MySQL等数据库,创建博客所需数据库 5. 安装WordPress等博客平台,按指南配置 6. 可选:启用SSL证书提升安全性 7. 设置备份与监控,确保安全稳定 完成以上步骤,即可在阿里云上成功搭建博客。记得更新维护,有问题参考阿里云文档或联系客服。 ```
127 0
|
5月前
|
弹性计算 应用服务中间件 Shell
利用阿里云ECS搭建企业网站的教程
在本教程中,我们将指导如何使用阿里云ECS搭建企业网站。步骤包括:1) 注册阿里云账号并购买ECS实例,选择适当配置;2) 配置安全组,开放必要端口;3) 通过SSH连接ECS,更新系统并安装Nginx;4) 上传网站文件,配置Nginx服务器;5) 绑定域名并配置HTTPS证书。按照这些步骤,你的企业网站将在阿里云ECS上安全运行。
160 1
|
5月前
|
安全 定位技术
外贸网站如何选择服务器
以上就是选择外贸网站服务器时需要考虑的一些关键因素。
111 8
|
5月前
外贸网站服务器该如何选择?别再踩雷了
以上因素都应在选择外贸网站服务器时考虑。在选择服务器时,不要只看价格,要全面考虑,避免踩雷。
158 0
下一篇
无影云桌面