为什么 JSP 没有映射到 web.xml 中,而 servlet 却映射到了 web.xml 中

use*_*422 3 jsp web.xml servlets

我们从后门知道servlet和JSP是相同的。JSP也是servlet,所以当JSP执行时,它首先转换为servlet,然后执行servlet。

我的问题是,如果 servlet 和 JSP 相同,那么为什么我们在web.xml部署描述符文件中映射 servlet,但不映射 JSP?

Bal*_*usC 5

它已经映射到服务器自己的中,web.xml并应用于所有网络应用程序。因此您不需要在所有网络应用程序中显式注册它。

例如,对于 Tomcat,您可以在/conf/web.xmlTomcat 安装文件中找到以下与 JSP servlet 相关的条目(下面的行号与 Tomcat 8.0.26 匹配)。

245    <servlet>
255        <servlet-name>jsp</servlet-name>
256        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
257        <init-param>
258            <param-name>fork</param-name>
259            <param-value>false</param-value>
260        </init-param>
261        <init-param>
262            <param-name>xpoweredBy</param-name>
263            <param-value>false</param-value>
264        </init-param>
265        <load-on-startup>3</load-on-startup>
266    </servlet>
Run Code Online (Sandbox Code Playgroud)
381    <servlet-mapping>
382        <servlet-name>jsp</servlet-name>
383        <url-pattern>*.jsp</url-pattern>
384        <url-pattern>*.jspx</url-pattern>
385    </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

您会看到,任何与 URL 模式匹配的请求*.jsp或*.jspx将调用服务器自己的请求JspServlet,然后服务器将完成所有 JSP 工作。

Tomcat 不了解您的“自定义”servlet,因此您不会在那里找到您的“自定义”servlet,您需要自己将它们映射到 web 应用程序自己的中web.xml。