Web容器中DefaultServlet详解 JspServlet DefaultServlet
Web容器中DefaultServlet详解
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
配置分析:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
配置分析
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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mapping为“/”的配置,当Dispatcher Servlet的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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
通过Spring的<mvc:resource>来配置资源映射,将静态资源的映射进行放行。
<!-- 放行静态资源 -->
<!--放行js文件-->
<mvc:resources location="/js/" mapping="/js/**"/> <!--放行css文件-->
<mvc:resources location="/css/" mapping="/css/**"/>
<!--放行img类的资源文件-->
<mvc:resources location="/images/" mapping="/images/**"/>
1
2
3
4
5
6
7
通过Spring MVC的<mvc:default-handler/>:通过这个标签可以启动Spring
MVC定义的一个类似于Tomcat的DefaultServlet的DefaultServletHttpRequestHandler类。
<mvc:default-servlet-handler />
————————————————
版权声明:本文为CSDN博主「_licho」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30920821/article/details/78328608
Web容器中DefaultServlet详解 JspServlet DefaultServlet的更多相关文章
- Touch事件在移动端web开发中的详解
一.pc端事件回顾 HTML事件.DOM0事件.DOM2事件 事件对象. 如果上述概念不清楚,请先去了解. 二.移动端事件简介 2.1 pc端事件在移动端的问题 移动设备主要特点是不配备鼠标,键盘 ...
- web.xml中context-param详解
<context-param> <param-name>contextConfigLocation</param-name> <param-value> ...
- [转]web.xml中<url-pattern>详解
标签<url-pattern><url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例: <servlet> <servlet-n ...
- Web容器中DefaultServlet详解
万分感谢原文作者:_licho 原文链接:https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServlet ...
- Spring Boot源码中模块详解
Spring Boot源码中模块详解 一.源码 spring boot2.1版本源码地址:https://github.com/spring-projects/spring-boot/tree/2.1 ...
- web.xml常用配置详解
web.xml常用配置详解 context-param 指定 ServletContext(上下文) 配置文件路径,基本配置一般是Spring配置文件,或者是spring-security的配置文件. ...
- JWT(Json web token)认证详解
JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...
- Windows Server 2008 架设 Web 服务器教程(图文详解)
Windows Server 2008 架设 Web 服务器教程(图文详解) 一.安装 IIS 7.0 : 虽然 Windows Server 2008 内置了I IS 7.0,但是默认情况下并没有安 ...
- Tomcat5的web应用启动顺序详解
Tomcat5的web应用启动顺序详解 [收藏此页] [打印] 作者:佚名 2007-07-17 内容导航: 第1页 [IT168技术文档]摘要: 应用Tomcat对于我们来讲实在是司空见惯 ...
随机推荐
- c#: 剪切板监视实现
CR TubeGet中有用户需要剪切板监视功能,记录代码以做备忘: using System; using System.Runtime.InteropServices; using System.W ...
- 2019年杭电多校第一场 1009题String(HDU6586+模拟+单调栈)
题目链接 传送门 题意 给你一个字符串,要你构造一个长为\(k\)的子串使得每个字母出现的次数在\([L_i,R_i](0\leq i\leq26)\)间且字典序最小. 思路 做这种题目就是要保持思路 ...
- Could not resolve com.android.support:design 28.0.0
想试一试android的那个侧滑栏功能,需要用到 'com.android.support:design:28.0.0'建好之后一直报关于28.00的错误,一开始各种百度更改配置没吊用,最后感觉是网络 ...
- DT系统开发之-在线询盘信息的调取实现
调用标签 <!--{tag("table=message&condition=status=3 and typeid=1&areaid=$cityid&cati ...
- test20191020 往复
往复 Coldhac 做不出题了,他在长为 n 的走廊里走来走去.从位置 1 开始, 每次他会向前走长为 i ∈ [1, k] 的一步(不能超出走廊的范围),直至到达位 置 n. 在想出正解前,Col ...
- Linux 防火墙 | Linux 服务器如何开放端口 配置防火墙
sudo ufw status(如果你是root,则去掉sudo,ufw status)可检查防火墙的状态,我的返回的是:inactive(默认为不活动).sudo ufw version防火墙版本: ...
- scala 型变
型变是复杂类型的子类型关系与其组件类型的子类型关系的相关性. Scala支持 泛型类 的类型参数的型变注释,允许它们是协变的,逆变的,或在没有使用注释的情况下是不变的. 在类型系统中使用型变允许我们在 ...
- Wooden Signs Gym - 101128E (DP)
Problem E: Wooden Signs \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 给出一个\(n\),接下来\(n+1\)个数, ...
- yugabyte 做为hasura graphql-engine的pg数据引擎
今天看了下yugabyte 的更新 ,ysql 基本可以生产可用,刚好测试了下与hasura graphql-engine的集成,发现很不错,可以直接运行 环境准备 docker-compose ve ...
- CTSC 2017 游戏[概率dp 线段树]
小 R 和室友小 B 在寝室里玩游戏.他们一共玩了 $n$ 局游戏,每局游戏的结果要么是小 R 获胜,要么是小 B 获胜. 第 $1$ 局游戏小 R 获胜的概率是 $p_1$,小 B 获胜的概率是 $ ...