部署


对一个 Web 应用程序来说,除了 Servlet、Filter 这些逻辑组件,还需要 JSP 这样的视图文件,外加一堆静态资源文件,如 CSS、JS 等。

合理组织文件结构非常重要。我们以一个具体的 Web 应用程序为例:

webapp
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── itranswarp
        │           └── learnjava
        │               ├── Main.java
        │               ├── filter
        │               │   └── EncodingFilter.java
        │               └── servlet
        │                   ├── FileServlet.java
        │                   └── HelloServlet.java
        ├── resources
        └── webapp
            ├── WEB-INF
            │   └── web.xml
            ├── favicon.ico
            └── static
                └── bootstrap.css

我们把所有的静态资源文件放入 /static/ 目录,在开发阶段,有些 Web 服务器会自动为我们加一个专门负责处理静态文件的 Servlet,但如果 IndexServlet 映射路径为 /,会屏蔽掉处理静态文件的 Servlet 映射。因此,我们需要自己编写一个处理静态文件的 FileServlet

这样一来,在开发阶段,我们就可以方便地高效开发。

类似 Tomcat 这样的 Web 服务器,运行的 Web 应用程序通常都是业务系统,因此,这类服务器也被称为应用服务器。应用服务器并不擅长处理静态文件,也不适合直接暴露给用户。通常,我们在生产环境部署时,总是使用类似 Nginx 这样的服务器充当反向代理和静态服务器,只有动态请求才会放行给应用服务器,所以,部署架构如下:

实现上述功能的 Nginx 配置文件如下:

使用 Nginx 配合 Tomcat 服务器,可以充分发挥 Nginx 作为网关的优势,既可以高效处理静态文件,也可以把 https、防火墙、限速、反爬虫等功能放到 Nginx 中,使得我们自己的 WebApp 能专注于业务逻辑。


Source & Reference

  • https://www.liaoxuefeng.com/wiki/1252599548343744/1304266260086817