我已经阅读下载 深入浅出JSP和Servlet ,我看到web.xml有
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文件中),而不必为每个映射创建单独的实例:
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文件的情况)
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
@WebServlet("/servletURL") public class SomeServlet extends HttpServlet {}
仅此注释就已经将其映射到/servletURL没有任何web.xml输入的URL模式。
/servletURL