小编典典

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

jsp

我已经阅读下载 深入浅出JSP和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>

阅读 270

收藏
2020-06-08

共1个答案

小编典典

它允许您在单个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没有任何web.xml输入的URL模式。

2020-06-08