gpt4 book ai didi

java - 为什么我们需要一个 servlet 名称?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:45 26 4
gpt4 key购买 nike

我一直在阅读 Head First JSP and Servlet,我看到 web.xml

  <!-- To name the servlet -->
<servlet>
<servlet-name>ServletName</servlet-name>
<servlet-class>packy.FirstServlet</servlet-class>
</servlet>

<!-- For URL's to map to the correct servlet -->
<servlet-mapping>
<servlet-name>ServletName</servlet-name>
<url-pattern>/ServletURL</url-pattern>
</servlet-mapping>

为什么要隐藏原始 servlet 的位置?我可以简单地看出这是出于安全原因和更多此类优点,但是为什么要为每个 servlet 命名?为什么 web.xml 不能像

这样简单
  <servlet>                                    
<url-pattern>ServletURL</url-pattern>
<servlet-class>packy.FirstServlet</servlet-class>
</servlet>

最佳答案

它允许您在单个 servlet 实例上拥有多个 servlet 映射(甚至分布在多个 web.xml/web-fragment.xml 文件中)而无需不必要的为每个映射创建一个单独的实例:

<servlet>
<servlet-name>someServlet</servlet-name>
<servlet-class>com.example.SomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>/enroll</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>/pay</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>/bill</url-pattern>
</servlet-mapping>

(注意:是的,每个映射可以有多个 URL 模式,但这不包括将它们拆分为多个 web.xml/web-fragment.xml 文件)

它允许您在特定的 servlet 上映射过滤器,而不必担心 servlet 正在/将要使用的 URL 模式:

<filter-mapping>
<filter-name>someFilter</filter-name>
<servlet-name>someServlet</servlet-name>
</filter-mapping>

您的提案不会支持它们。

请注意,自 Servlet 3.0 以来,它已经推出将近 4 年(2009 年 12 月;请确保您通过最新资源了解这些问题……任何超过 1~3 年的内容都应仔细审查),您可以轻松地使用 @WebServlet 注释来最小化 web.xml 样板文件:

@WebServlet("/servletURL")
public class SomeServlet extends HttpServlet {}

只是这个注解已经将它映射到 /servletURL 的 URL 模式上,没有任何 web.xml 条目。

关于java - 为什么我们需要一个 servlet 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20073905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com