从高层架构的角度来看,使用 servlet 映射进行 Web 应用程序开发有哪些优势?

What are the advantages to use servlet mapping for web application development at a high level architecture point of view?

这个问题应该从高层架构的角度来回答。因此,这个问题比较抽象,没有上下文的细节。

澄清一下,在这个问题中,servlet 映射的对立面意味着客户端只能访问具有 servlet java class.[=10= 的确切目录 url 的 servlet ]

我能想到的一些优点是

  1. 为了安全起见,对用户隐藏真实的 java class 位置。
  2. 当 java servlet class 出于操作目的需要更改位置时易于维护。

显然你问的是使用 <servlet-mapping> 还是省略映射而是依赖默认行为。

目的是提供indirection级别,将开发命名与部署命名分开。

  • 开发人员 Alice 可以任意命名 servlet class。
  • Bob,系统管理员,可以使用任何他想要的 URL 来部署 servlet。

servlet-mapping是两人相遇的地方。

请参阅技术书籍 Head First Servlets and JSP, 2nd Edition 中的这个有用的示例页面,作者 Kathy Sierra、Bryan Basham、Bert Bates 非常有创意。

该页面解释了这个片段:

<servlet>
    <servlet-name>Beer</servlet-name>
    <servlet-class>com.example.BeerSelect</servlet-class>
</servlet>

… 是我们指定开发人员 Alice 分配给 class 的任何命名的地方。我们将名称 Beer 指定为我们配置中使用的标识符。这不是 client/browser/end-user.

的东西

我们有片段:

<servlet-mapping>
    <servlet-name>Beer</servlet-name>
    <url-pattern>/Beer/SelectBeer.do</url-pattern>
</servlet-mapping>

... 我们使用相同的名称 Beer 作为将我们的 servlet class 绑定到传入请求的 URL 的细绳。 URL 被 client/browser/end-user 使用。

你问的目的是:

hide real java class location from users for security.

不,不是为了隐藏位置。 client/browser/end-user 不知道您的 servlet 位于何处。 Servlet 容器在放置 servlet 的位置上有所不同,其中 none 暴露给 client/browser/end-user.

不,不是为了安全。 servlet 容器是为安全而设计的,保护某些资源不被 client/browser/end-user.

访问

而你问映射的好处是:

ease of maintenance when a java servlet class need to change locations for operational purpose.

好吧,不完全是 位置

目的是解放我们的开发人员 Alice,让她不必参与部署问题,例如 URL 模式是什么。如果 Bob 决定 URL 中的更改是必要的,他不需要回到 Alice 那里要求她编译一个新的 servlet。 Bob 只是在他的控制下编辑配置文件。 Alice 永远不需要知道 URL 的变化。

在一个由少数人同时担任开发人员和系统管理员的小团队中,您可能看不出这有什么意义。但在更大的企业环境中,这种分离更有意义。请记住,在 Servlet 技术的最初设想中,系统管理员可能会从商业市场的独立供应商处购买 servlet,因此开发与部署决策者将完全分开。

Servlet 技术旨在将这些开发问题与部署问题分开。例如:

  • Alice 不关心部署时使用什么 servlet 容器,例如 Apache TomcatEclipse Jetty,正如系统管理员 Bob 所做的那样。
  • Alice 没有将数据库服务器地址、数据库用户名和数据库密码等数据库连接信息硬编码到她的代码中。该信息被外部化,由系统管理员 Bob 跟踪,保存在 naming/directory 服务器中,并在部署运行时作为 DataSource object via Java Naming and Directory Interface (JNDI).
  • 提供给 Alice 的代码
  • 并且,如上所述,Alice 不知道也不关心部署时使用的 URL。 Bob 做出决定,并使用上面看到的映射适当地设置配置。