Servlet Mapping using web.xml

153,317

It allows servlets to have multiple servlet mappings:

<servlet>
    <servlet-name>Servlet1</servlet-name>
    <servlet-path>foo.Servlet</servlet-path>
</servlet>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/enroll</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/pay</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/bill</url-pattern>
</servlet-mapping>

It allows filters to be mapped on the particular servlet:

<filter-mapping>
    <filter-name>Filter1</filter-name>
    <servlet-name>Servlet1</servlet-name>
</filter-mapping>

Your proposal would support neither of them. Note that the web.xml is read and parsed only once during application's startup, not on every HTTP request as you seem to think.

Since Servlet 3.0, there's the @WebServlet annotation which minimizes this boilerplate:

@WebServlet("/enroll")
public class Servlet1 extends HttpServlet {

See also:

Share:
153,317
Mike
Author by

Mike

Updated on December 25, 2020

Comments

  • Mike
    Mike over 3 years

    I have a confusion regarding the structure of the web.xml for the servlet mapping, I don't have any problem by executing it but I am trying to figure it how why we have such a pattern in the deployment descriptor.

    <web-app>
        <servlet>
             <servlet-name>Servlet1</servlet-name>
             <servlet-path>foo.Servlet</servlet-path>
        </servlet>
        <servlet-mapping>
             <servlet-name>Servlet1</servlet-name>
             <url-pattern>/enroll</url-pattern>
        </servlet-mapping>
    </web-app>
    

    Now as far as my understanding whenever a request is comes for url-pattern "/enroll", servlet container is going to match the servlet-name with the url-pattern and will try to find the corresponding servlet-path and will forward the control to foo.Servlet. so basically there would be two passes one for finding servlet-name and another for servlet-path, my question is if container is designed to work in the following way

    <web-app>
            <servlet>
                 <servlet-name>foo.Servlet</servlet-path>
                 <url-pattern>/enroll</url-pattern>
            </servlet>
    </web-app>
    

    what would be the drawback if we use the following approach. Wouldn't that be more efficient and the response time would be fast.