【问题标题】:Actual role of WEB-INF in a java web application?WEB-INF 在 Java Web 应用程序中的实际作用?
【发布时间】:2014-12-02 06:29:54
【问题描述】:

我正在使用 Java、Spring、Hibernate 和 AngularJS 创建一个 Web 应用程序。 但我并不清楚WEB-INF 目录的作用。据我所知,WEB-INF 是一个 Web 目录,我们在其中保存我们的 Web 配置文件。但是我在 AngularJS 应用程序中看到了一些示例,其中 js 和 html 被放在 WEB-INF 文件夹中,并且众所周知 WEB-INF 没有被公开访问。那么为什么我们将这些文件放在WEB-INF 中,即使我们响应请求时,公开访问的实际含义是什么 html 和 js 对客户端可见,如果我们将这些文件放在 WEB-INF 文件夹中,如何访问这些文件。

在开始我的应用程序开发之前,我需要澄清这几点。 请任何人都可以帮助我解决这些问题。

【问题讨论】:

标签: java angularjs spring-mvc web-applications


【解决方案1】:

如您所说,我们将配置文件放入WEB-INF 文件夹。但是在某些情况下,您使用的资源文件(例如 HTML 模板)并未按原样发送到客户端,但通常会发生一些转换或参数替换,这些通常由 Servlet 处理。

可以将此类模板和资源放入WEB-INF 文件夹,因为这些文件不应该对客户端可见/不可访问,而只能是转换/参数替换的结果。

【讨论】:

    【解决方案2】:

    资源文件经常存储在 WEB-INF 中,因为 Java servlet 容器不会直接提供这些文件。相反,一些 Java 控制器代码被用来间接地为它们服务。这是完全可以接受的,但我更喜欢从不同服务器提供静态内容并让 Java 容器仅处理动态代码的解决方案。在紧要关头,您可能只需添加一个反向代理并以这种方式卸载静态内容处理。

    【讨论】:

    • 您好 Elliott,感谢您的澄清。我可以了解更多关于反向代理以及如何与 Spring 应用程序一起使用的信息吗?你能建议我任何可以了解这方面的网站吗?
    • 许多网络代理(Squid、Varnish)和网络服务器(Apache、IIS)可以设置为反向代理。这个Wikipedia article 可能会有所帮助。
    【解决方案3】:

    如果是 Spring,您可以在没有 WEB-INF 目录的情况下构建您的应用程序。例如:spring-boot + thymeleaf,可以把所有的html、css、js文件放到src/main/resources/static..所以WEB-INF目录并不是所有java web应用都需要的。

    【讨论】:

      【解决方案4】:

      您根本不必使用 WEB-INF。 这是一个简单的AngularJS example app(Spring 官方指南)说明如何执行此操作。

      现在,就像 Elliot 提到的那样,有时使用代理是个好主意(取决于您的应用程序应该支持的流量类型)。您也可以使用 CDN,它更易于设置,并且在您的应用程序中没有配置要求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-08
        • 2010-10-16
        • 2011-01-21
        • 2015-03-10
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        相关资源
        最近更新 更多