万分感谢原文作者:_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. Inverse/Implicit Function Theorem

    目录 4.1 The Inverse Function Theorem The Implicit Function Theorem 4.3 Curves and Surfaces 4.4 The Mo ...

  2. vue3获取当前路由

    正解 使用useRouter: // router的 path: "/user/:uid" <template> <div>user</div> ...

  3. 对接网易云信音视频2.0呼叫组件集成到vue中,实现web端呼叫app,视频语音通话。

    项目中需要实现视频通话功能,经过公司的赛选,采用网易云信的视频通话服务,app小伙伴集成很顺利.web端需要实现呼叫app端用户.网易云信文档介绍不全,vue的demo满足不了需求,和客服人员沟通,只 ...

  4. JSP请求响应流程入门介绍

    一个完整的jsp请求响应流程可以简单的使用下图表示: 过滤器:直观的了解,就是对请求做一个过滤作用,比如身份验证,验证不通过的不让他继续往下走 Servlet:请求处理中心,这个也是我们写业务逻辑的地 ...

  5. Go项目开源规范

    我们为什么一定要知道开源规范呢? 一是,开源项目在代码质量.代码规范.文档等方面,要比非开源项目要求更高,在项目开发中按照开源项目的要求来规范自己的项目,可以更好地驱动项目质量的提高: 二是,一些大公 ...

  6. CSS基础 CSS的三大特性以及选择器优先级计算方法

    1.子元素默认会继承父元素的样式,但不是所有的元素都有继承 常见的继承父元素特点的元素有: 1.color 2.font-sytle.font-weight.font-size.font-family ...

  7. ES6解构与默认值的结合使用

    在读源码框架时遇到方法中有这样的形参:{ message = 'ok' } = {} 有点懵为什么已经赋值了还又赋了一个空对象 随后我去看了阮一峰老师的 ECMAScript 6 入门才明白.这是参数 ...

  8. hive 之 常用基本操作

    show databases; -- 查看所有数据库 use 数据库; -- 进入某个数据库 select current_database(); -- 查看当前使用的数据库 show tables; ...

  9. python 面向对象:类属性

    一.概念和使用 类属性就是给类对象定义的属性 类属性用于记录与这个类相关的特征 类属性不会用于记录具体对象的特征 使用赋值语句在  class  关键字下方可以定义类属性 二.代码演示 示例需求: 定 ...

  10. vuex 中使用Element-ui的message

    首先引入Message 其次,在mutations中调用Message 注意:缓存的问题,如果没有弹出框架出现,多重启几次服务 参考资料: https://blog.csdn.net/weixin_4 ...