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

时间:2013-11-19 14:17:01

标签: java jsp tomcat servlets

我已经阅读 Head First 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>

2 个答案:

答案 0 :(得分:8)

它允许您在单个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>

(注意:是的,您可以为每个映射设置多个网址格式,但这不会涵盖它们被分割为多个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已经推出近四年(2009年12月;请确保您通过最新资源了解事项......应仔细检查1〜3年以上的事情),您可以轻松使用@WebServlet注释来最小化web.xml样板:

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

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

答案 1 :(得分:3)

我们真的不需要servlet名称。只是这就是Java EE设计者选择用XML声明和映射servlet的方式。

现在,您可以使用@WebServlet注释声明和映射servlet,并且此注释的name属性是可选的。