为什么我们需要一个servlet名称? [英] Why do we need a servlet name?

查看:108
本文介绍了为什么我们需要一个servlet名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经读过 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 没有任何 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆