【问题标题】:Why use <servlet-mapping> in web.xml(Deployment Descriptor) in jsp/servlet?为什么在 jsp/servlet 的 web.xml(Deployment Descriptor) 中使用 <servlet-mapping>?
【发布时间】:2011-08-03 04:55:49
【问题描述】:
<servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/HelloWorld.do</url-pattern>
</servlet-mapping>

为什么我们在 servlet-mapping 标签中使用 url-pattern。为什么不在 servlet 标记本身中。

这似乎只是一个额外的标签。

仅仅是因为 servlet/jsp 规范的编写者决定这样做,还是它的存在背后有某种合乎逻辑的原因?

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    这更有可能是因为 servlet 旨在支持多种协议,而不仅仅是 HTTP。 URL 模式特定于 HTTP,因此 servlet 到 HTTP URL 模式的映射是在 servlet-mapping 标记中完成的,而不是用于声明 servlet 更通用属性的 servlet 标记。

    【讨论】:

    • 您能否提供任何链接来支持您的观点?您的回答似乎最有希望。
    • servlet 标签在 Servlet 规范 2.5 中被注释为 The servletType is used to declare a servlet. It contains the declarative data of a servlet.,协议独立性是从多年来阅读的各种文章和 @987654325 的 Servlet API 文档中推断出来的@类。
    【解决方案2】:

    你可能会尝试编写另一个也链接到同一个 servlet,然后你会知道 servlet 可以有多个 servlet 映射。

    <servlet>
       <servlet-name>Hello</servlet-name>    
       <servlet-class>HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>    
       <servlet-name>Hello</servlet-name>    
       <url-pattern>/HelloWorld.do</url-pattern>
    </servlet-mapping>
    <servlet-mapping>    
       <servlet-name>Hello</servlet-name>    
       <url-pattern>/HelloWorld2.do</url-pattern>
    </servlet-mapping>
    

    【讨论】:

    • 我之前也是这么想的。但是你看你不能在servlet标签里再写一遍吗?你这样做的方式你每次都需要写servlet-mapping标签。看看有多大代码变成了只有两个 url 模式。如果我有 20 个呢?
    • 我认为讨论如何破卷是没有意义的。很多人都发现了这个问题,所以有这么多的网络应用程序框架可以让你更容易利用。
    【解决方案3】:

    我同意 Vineet Reynold 的观点,即 servlet-mapping 用于为可用于网络通信的不同协议提供支持。因此,url-pattern 标签让 servlet 知道协议的类型,即。 HTTP 请求服务。

    【讨论】:

    • 非常好,但您不需要发布单独的答案来说明这一点,只需投票给答案并发表您的评论。顺便说一句,非常感谢您的关注。跨度>
    • 感谢您的关注...从下次开始请记住这件事...但我在他的支持中提供的信息很少。
    【解决方案4】:

    标准 servlet url 模式的局限性和弱点是许多早期 MVC 框架(Struts 等)背后的驱动因素。不支持正则表达式匹配,甚至不支持 ant 样式的模式。不支持 url 排除模式等。

    至于为什么规范是这样的(并且仍然是这样),我不知道。唯一能确定的是那些编写规范的人。

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2011-03-16
      • 2023-03-29
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2011-08-25
      • 2014-05-24
      相关资源
      最近更新 更多