为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?(下)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?(下)

image.png


从上面的一步步分析可以看出:其实架构的设计就是一系列相关的抽象。

先是抽象出 HTTP 服务,用来通信和解析协议。


再因为业务的复杂,为了不和 HTTP 服务耦合又抽象了一层 Servlet。


由 Servlet 加载和管理 Servlet ,来控制请求转发到指定的 Servlet 实现类。

然后我们安心的开发业务即可。


因为抽象所以灵活易扩展,比如现在是 HTTP1.1 服务,可以换成 HTTP 2。

现在用 Tomcat 来作为 Servlet 容器,也可以换成 Jetty。


现在用原生的实现 Servlet 来做业务,也可以换成 SpringMVC。


随意变更,因为都抽象出来了,就很好替换,只要遵循约定的接口实现即可。


框架设计的一个套路


看完了架构设计的套路,再说说框架套路。

接口和抽象类。


所有中间件设计必用的套路,当然我们自己的代码也会这样用。


定义一个接口来约定一些动作,能做啥做啥。


然后再定义一个抽象类来实现这个接口,用来实现一些通用的逻辑,做到代码的复用。

然后再搞一些常用的实现类继承抽象类,方便开发者的使用。


剩下的就留给开发者自行扩展即可。


然后抽象类都会使用模板方法,也就是定义执行的流程,具体实现逻辑由子类自行实现。

这就是必用的套路。


接口约束、抽象类代码复用、实现常用实现类方便使用、剩下的自行扩展。

拿 Servlet 举例,首先定义 Servlet 接口。


public interface Servlet {
    void init(ServletConfig config) throws ServletException;
    ServletConfig getServletConfig();
    void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
    String getServletInfo();
    void destroy();
}


然后搞了个通用抽象类 GenericServlet,不过这个抽象类逻辑比较简单。


public abstract class GenericServlet implements Servlet, ServletConfig,
        java.io.Serializable {
  ................省略一些.............
   @Override
    public ServletConfig getServletConfig() {
        return config;
    }
    @Override
    public ServletContext getServletContext() {
        return getServletConfig().getServletContext();
    }
    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }
................省略一些.....................
}


然后搞了个常用的 HttpServlet 继承了 GenericServlet。


public abstract class HttpServlet extends GenericServlet {
    private static final long serialVersionUID = 1L;
    private static final String METHOD_DELETE = "DELETE";
    private static final String METHOD_HEAD = "HEAD";
    private static final String METHOD_GET = "GET";
  ....................
}

套路就是这么个套路,之后面试官问你接口和抽象类的问题,相信你也能答出来了。


最后


套路大家应该都 GET 到了。

想必大家都听过“计算机科学中的每个问题都可以用一间接层解决”。

是的,基本上所有问题抽象一层都能解决。

如果一层不够,那就两层。

欢迎加我好友进行深入地交流,备注「进群」,拉你进交流&内推群。

平日的面试题遇到难处,或者看某个知识点翻遍全网的资料还是感觉很模糊、不透彻,可以私聊我,给我留言。

遇到合适的我会整理写出一篇文章,我不会的去请教别人也给整出来。

那种工作遇到很细节的场景的还是别了,这种问你上司比较合适:)


巨人的肩膀


《深入拆解Tomcat & Jetty》 李号双


相关文章
|
1月前
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
1月前
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
26 0
|
1月前
|
JavaScript Linux 开发者
使用Docker容器化Web应用:从零开始
使用Docker容器化Web应用:从零开始
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
34 1
|
3月前
|
Kubernetes 应用服务中间件 nginx
基于容器化的Web服务器管理
【8月更文第28天】随着云原生技术的发展,容器化已经成为部署和管理应用程序的标准方式之一。Docker 和 Kubernetes 等工具提供了强大的容器管理和编排能力,使得开发者能够轻松地部署、扩展和维护 Web 服务器。本文将详细介绍如何使用 Docker 和 Kubernetes 实现 Web 服务器的容器化部署,并提供详细的步骤和代码示例。
110 1
|
3月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
201 0
|
3月前
|
开发者 容器 Docker
JSF与Docker,引领容器化浪潮!让你的Web应用如虎添翼,轻松应对高并发!
【8月更文挑战第31天】在现代Web应用开发中,JSF框架因其实用性和灵活性被广泛应用。随着云计算及微服务架构的兴起,容器化技术变得日益重要,Docker作为该领域的佼佼者,为JSF应用提供了便捷的部署和管理方案。本文通过基础概念讲解及示例代码展示了如何利用Docker容器化JSF应用,帮助开发者实现高效、便携的应用部署。同时也提醒开发者注意JSF与Docker结合使用时可能遇到的限制,并根据实际情况做出合理选择。
43 0
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
54 0
|
3月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
40 0
|
3月前
|
Kubernetes 安全 JavaScript
Docker 与 Podman:探索用于现代 Web 开发的容器技术
在软件开发中,Docker 和 Podman 作为主流容器化技术,各具特色。本文深入对比两者优缺点,探讨其实用场景与部署Web应用的最佳实践。Docker 凭借成熟生态和跨平台能力引领潮流;Podman 以无守护进程架构提升安全与效率。通过具体示例展示如何构建和运行Node.js与Angular应用,帮助读者理解核心命令与配置要点。无论是在开发环境还是生产部署,选择合适的工具能显著增强应用的安全性和稳定性。
310 0