为什么我们需要一个servlet名称? [英] Why do we need a servlet name?
问题描述
我已经读过 Head First JSP和Servlet ,我看到 web.xml
已经
<! - 为servlet命名 - >
< servlet>
< servlet-name> ServletName< / servlet-name>
< servlet-class> packy.FirstServlet< / servlet-class>
< / servlet>
<! - 用于映射到正确的servlet的URL - >
< 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
文件中),无需创建任何不必要的内容每个映射一个单独的实例:
< 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模式,但那不会' t覆盖它们被分割为多个 web.xml
/ web-fragment.xml
文件)
它允许您映射特定servlet上的过滤器,而不必担心servlet将使用/将使用的URL模式:
< pre class =lang-xml prettyprint-override>
< 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)
公共类SomeServlet扩展HttpServlet {}
只是这个注释已经将它映射到 / servletURL $ c $的URL模式c>没有任何
web.xml
条目。
I have been readin Head First JSP and Servlet, I see that the web.xml
has
<!-- 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>
Why hide the original servlet's location ? I can simply see that it is for security reason and some more such kinda advantages, but why have a name for each servlet ? Why can't the web.xml
be simple like
<servlet>
<url-pattern>ServletURL</url-pattern>
<servlet-class>packy.FirstServlet</servlet-class>
</servlet>
It allows you to have multiple servlet mappings on a single servlet instance (even spread over multiple web.xml
/web-fragment.xml
files) without the unnecessary need to create a separate instance per mapping:
<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>
(note: yes, you can have multiple URL patterns per mapping, but that wouldn't cover them being split over multiple web.xml
/web-fragment.xml
files)
It allows you to map filters on the particular servlet without worrying about what URL patterns the servlet is/would be using:
<filter-mapping>
<filter-name>someFilter</filter-name>
<servlet-name>someServlet</servlet-name>
</filter-mapping>
Your proposal would support neither of them.
Note that since Servlet 3.0, which is out for almost 4 years already (December 2009; please make sure that you learn the matters by up to date resources ... anything older than 1~3 years should be carefully reviewed), you can easily use the @WebServlet
annotation to minimze web.xml
boilerplate:
@WebServlet("/servletURL")
public class SomeServlet extends HttpServlet {}
Just solely this annotation already maps it on an URL pattern of /servletURL
without any web.xml
entry.
这篇关于为什么我们需要一个servlet名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!