我已经阅读 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>
答案 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
属性是可选的。