万分感谢原文作者:_licho

原文链接:https://blog.csdn.net/qq_30920821/article/details/78328608

Web容器中DefaultServlet详解

一、什么是DefaultServlet

我们以最熟悉的Tomcat服务器为例。我们都知道Jsp和servlet都需要web容器才能运行。但是实际上呢我们的web应用中可以没有任何servlet或者jsp(至少表面上是这样的)只需要一个web.xml,设置在servlet 3.0中,这个也可以省略。但是我们同样可以通过链接来访问应用内的资源文件。例如.jpg,.html,.js这类的静态文件。这就是DefaultServlet的作用了。它在tomat的安装目录下的conf/web.xml中有定义该web.xml对于所有tomcat加载的的web application都会应用,会和application本身指定的web.xml进行合并

<!--在conf/web.xml中的DefaultServlet的定义-->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--defaultServletMapping-->
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

配置分析:

  1. 非常熟悉的配置对不对,这就是一个非常常见的servlet配置。该servlet的name为default,其对应的servlet-class类为org.apache.catalina.servlets.DefaultServlet
  2. 对应的init-param标签中两个初始化参数,一个是debug,这个参数设置了debug的级别。一个是listings参数,该参数的作用是当对应URL并没有对应一个资源时,是否要显示资源目录,该参数配置为了false,也就是不显示。
  3. load-on-startup为1是说明当应用启动时就在加载该servlet,默认的情况下是用户第一次访问该servlet方法时才会实例化并加载servlet。
  4. DefaultServlet的servlet-mapping配置的为/,很多帖子或者书籍上都说/的URL映射符会映射除了*.xxx类带后缀的地址URL,事实上/映射可以处理所有的请求,一般只有defaultServlet会配置为/,如果自定义的Servlet也配置为/,那么将会覆盖defaultservlet的配置

二、JspServlet的作用

同理,在Tomcat Server中运行的web application,对于类似于.jsp的java动态服务页同样不需要我们自己处理。我们可以直接通过一个URL例如/index.jsp来访问到该页面,这是因为在conf/web.xml中有一个JspServlet来处理这类请求。

 <!--在conf/web.xml中有定义-->
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
............... <!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>

配置分析

  1. 文档解释: The JSP page compiler and execution servlet, which is the mechanism ,used by Tomcat to support JSP pages. Traditionally, this servlet ,is mapped to the URL pattern “*.jsp”. This servlet supports the,following initialization parameters (default values are in square brackets)。
  2. 直接翻译:JSP页的编译和执行Servlet, 是Tomcat支持JSP页面的机制。另外,这个servlet被映射的URL模式为”*.jsp”。 同时也支持一些初始化参数。它们都具有一些默认值。具体解释可以看conf/web.xml中的注释。

三、DefaultServlet在实际开发中的应用。

  • JSP/Servlet架构的web项目

    这类架构的项目无需显示配置DefaultSerlvet,一般来说,jsp后缀请求会交给JspServlet,静态资源请求图片等会交给DefaultServlet处理。

  • SSM中DispatcherServlet的URL配置

    • .do,.action等配置”,当servlet-mapping配置为*.do这类带指定后缀的时候,静态资源文件依旧可以交给DefaultServlet处理。(.do的DispatcherServlet不会拦截类似.jsp,*.jpg的请求)
<!-- Spring MVC -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>SpringMVC</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
  • mapping为“/”的配置,当DispatcherServlet的mapping配置为/的时候,这时候会覆盖DefaultServlet的配置(DispathcerServlet会更先匹配到),那么对于.jpg,.png类似这种静态资源就得不到处理(之前是defaultServlet)会处理,所以这类资源就会得到404错误。所以我们需要有额外的配置来解决这个问题。
  • 继续通过DefaultServlet来处理。我们在应用的web.xml中将常用的静态资源URL映射到defaultServlet上。
 <!--通过defaultServlet来处理jpg-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<!--通过DefaultServlet来处理png-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<!--通过defaultServlet来处理.js文件-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<!--通过defaultServlet来处理.css文件-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
  • 通过Spring的mvc:resource来配置资源映射,将静态资源的映射进行放行。
<!-- 放行静态资源 -->
<!--放行js文件-->
<mvc:resources location="/js/" mapping="/js/**"/> <!--放行css文件--> <mvc:resources location="/css/" mapping="/css/**"/>
<!--放行img类的资源文件-->
<mvc:resources location="/images/" mapping="/images/**"/>

通过Spring MVC的<mvc:default-handler/>:通过这个标签可以启动Spring

MVC定义的一个类似于Tomcat的DefaultServlet的DefaultServletHttpRequestHandler类。

<mvc:default-servlet-handler />

Web容器中DefaultServlet详解的更多相关文章

  1. Web容器中DefaultServlet详解 JspServlet DefaultServlet

    Web容器中DefaultServlet详解 https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServl ...

  2. Touch事件在移动端web开发中的详解

    一.pc端事件回顾 HTML事件.DOM0事件.DOM2事件 事件对象. 如果上述概念不清楚,请先去了解. 二.移动端事件简介 2.1 pc端事件在移动端的问题 ​ 移动设备主要特点是不配备鼠标,键盘 ...

  3. web.xml中context-param详解

    <context-param> <param-name>contextConfigLocation</param-name> <param-value> ...

  4. [转]web.xml中<url-pattern>详解

    标签<url-pattern><url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例: <servlet> <servlet-n ...

  5. Spring Boot源码中模块详解

    Spring Boot源码中模块详解 一.源码 spring boot2.1版本源码地址:https://github.com/spring-projects/spring-boot/tree/2.1 ...

  6. web.xml常用配置详解

    web.xml常用配置详解 context-param 指定 ServletContext(上下文) 配置文件路径,基本配置一般是Spring配置文件,或者是spring-security的配置文件. ...

  7. JWT(Json web token)认证详解

    JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...

  8. Windows Server 2008 架设 Web 服务器教程(图文详解)

    Windows Server 2008 架设 Web 服务器教程(图文详解) 一.安装 IIS 7.0 : 虽然 Windows Server 2008 内置了I IS 7.0,但是默认情况下并没有安 ...

  9. Tomcat5的web应用启动顺序详解

    Tomcat5的web应用启动顺序详解 [收藏此页] [打印]   作者:佚名  2007-07-17 内容导航: 第1页   [IT168技术文档]摘要: 应用Tomcat对于我们来讲实在是司空见惯 ...

随机推荐

  1. Orthogonal Convolutional Neural Networks

    目录 概 主要内容 符号说明 的俩种表示 kernel orthogonal regularization orthogonal convolution Wang J, Chen Y, Chakrab ...

  2. [zbar]zbar条码扫描器解析示例

    // // Created by leoxae on 2020/3/30. // #include "BarCodeRecogntion.h" string BarCode::Ba ...

  3. [linux]ubuntu18.04 屏幕分辨率不适应问题

    今天换了新显示器,发现更大的屏幕不适应原有的屏幕分辨率,看起来特别变扭. 在设置处查看最高分辨率仅为1024*748,没有与屏幕相适应的1920*1080(16:9). 解决方式: 1. 终端输入命令 ...

  4. CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202

    CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202 安格AG6202是一个HDMI转VGA不带音频解决方案,用于实现HDMI1.4高分辨率视频转VGA转 ...

  5. <数据结构>XDOJ317.输出完全二叉树的某一层

    问题与解答 问题描述 对一棵完全二叉树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY. 输入格式 输入有多组数据. 每组数据第一行输入一个结点数n(1<=n<=1000), ...

  6. Android程序设计基础 • 【第1章 Android程序入门】

    全部章节   >>>> 本章目录 1.1 Android 平台介绍 1.1.1 Android 简介 1.1.2 Android 平台的发展 1.1.3 Android 平台架 ...

  7. 简单的 Shell 脚本入门教程

    Shell脚本 运作方式与解释型语言相当,如果有语言基础,学起 Shell 脚本就非常容易,但是 Shell 与常见的语言不同,一些常见的函数在 Shell 中需要组合一些命令得以实现 工具推荐 Sh ...

  8. BOM 点击触发 倒计时发送验证码案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 初识python 之 ImportError: No module named _ssl

    场景 安装好python之后,导入ssl模块报错: ImportError: No module named _ssl 解决方法 查看openssl.openssl-devel是否安装 rpm -qa ...

  10. tomcat启动卡在了 At least one JAR was scanned for TLDs yet contained no TLDs 的根本原因与解决办法

    1.前言 有时候服务器开启时启动不了,卡在了 org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned fo ...