问题描述:

web.xml中配置了缺省路径"/"后,原先在webapp下的静态页面(html)无法通过URL访问了,为什么?

过程尝试:

1. 将html后缀改为.jsp后可以正常访问
2. 将缺省路径"/"删除可以正常访问
3. 原有的index.jsp可以正常访问

问题解答:

tomcat在/conf/web.xml中定义了”/”到DefaultServlet的映射,在DefaultServlet中有renderHTMLrenderXML方法来表示或者渲染html和xml文件

<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
并定义了”*.jsp”和”*.jspx”到JspServlet的映射,在JspServlet中处理jsp和jspx文件

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.jspx</url-pattern>
</servlet-mapping>
Servlet的匹配权重:
  1. 精确路径匹配(/ab高于/*)
  2. 最长路径匹配(/ab/cd高于/ab;/ab/cd/*高于/ab/*)
  3. 扩展匹配(*.xxx)
  4. 默认匹配("url-pattern /" --> defaultServlet) 因此:
jsp资源由权重3的org.apache.jasper.servlet.JspServlet处理;html资源由权重4的defaultServlet处理 如果在web.xml自行定义了默认映射<url-pattern>/</url-pattern>,会使得tomcat中的默认映射失效,而自己定义的Servlet通常不具备处理html文件的能力,所以无法渲染html页面。
而tomcat中/conf/web.xml中定义了*.jsp的映射,根据规则3是不会被默认映射捕获的,所以jsp文件可以正常访问。

解决方案:

如何解决这种情况?
1. 用jsp代替html;
2. 不使用默认映射;
3. 在默认Servlet中增加处理html的方法;
4. 使用Spring的<mvc:default-servlet-handler>或者<mvc:resources>

附录:Java™ Servlet Specification

中文释义:

  一个比较好的中文释义

应用引申:

The pattern /* will force everything through your servlet.
The pattern /   will make your servlet the default servlet for the app, meaning it will pick up every pattern that doesn't have another exact match.

资料来源:

Spring MVC中为什么/*无法匹配,而/却可以匹配到?
http://www.iteye.com/problems/36433

Servlet映射规范和隐式映射的更多相关文章

  1. 【Head First Servlets and JSP】笔记16:JSP隐式对象(内置对象)的映射关系

    接笔记15. 1.不管是JSP中的<%%>还是<%\=%>最终都将处于servlet的方法体中,那么有没有一种元素可以声明成类的成员呢? ——答案是有,而且非常非常简单,这个元 ...

  2. DLL模块例2:使用__declspec(dllexport)导出函数,extern "C"规范修饰名称,隐式连接调用dll中函数

    以下内容,我看了多篇文章,整合在一起,写的一个例子,关于dll工程的创建,请参考博客里另一篇文章:http://www.cnblogs.com/pingge/articles/3153571.html ...

  3. 操作系统学习笔记(二) 页式映射及windbg验证方式

    页式映射 本系列截图来自网络搜索及以下基本书籍: <Windows内核设计思想> <Windows内核情景分析> <WINDOWS内核原理与实现> 一个32位虚拟地 ...

  4. JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式

    目录 1.JSP概述 2.注释(comment) 2.1.JSP注释 2.2.HTML注释 3.隐式对象(implicit object) 3.1.隐式对象清单 3.2.request对象 3.3.o ...

  5. JSP与EL隐式对象

    一,JSP隐式对象 隐式对象是可以直接使用的,无需声明.因为在JSP转译为servlet文件后,会自动声明其对象. 隐式对象① 说明 out 对应JspWriter对象,其内部关联一个PrintWri ...

  6. JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象

    1 什么是JSP   1)为什么说,Servlet是一个动态Web开发技术呢?     Servlet是基于服务端的一种动态交互技术,     HttpServletRequest表示客户端到服务端的 ...

  7. [javaEE] jsp的九大隐式对象

    pageContext对象: 1.可以作为入口对象获取其他八大隐式对象的引用 1.1 getEXception获取exception隐世对象 1.2 getPage获取page对象 1.3 getRe ...

  8. jsp学习与提高(二)——JSP 隐式对象、表单处理及过滤器

    1.JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 req ...

  9. JSP页面以及JSP九大隐式对象

    €JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. €JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...

随机推荐

  1. Web安全之CSRF攻击的防御措施

    Web安全之CSRF攻击的防御措施   CSRF是什么? Cross Site Request Forgery,中文是:跨站点请求伪造. CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击 ...

  2. [大数据入门] Cloudera-Hadoop 理论

    Hadoop 发明者Doug Cutting Cloudera Hadoop 是基于Java 开发的集群环境,所以每个节点都需要安装Java 运行环境(即JDK),通过Cloudera Manager ...

  3. hibernate多对一单向关联注解方式

    多对一单向关联,在多的一方加上一的一方作为外键.在程序里表现为:在多的一方加上一的引用. 小组类Group,用户User: Group: package com.oracle.hibernate; i ...

  4. Git学习系列之Git基本操作拉取项目(图文详解)

    前面博客 Git学习系列之Git基本操作推送项目(图文详解) 当然,如果多人协作,或者多个客户端进行修改,那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来. 大神们是不推荐使用 pu ...

  5. python-生产者消费者模式

    #!/usr/bin/python #coding=utf-8 import threading,time lock=threading.Condition() product=0 class Mak ...

  6. 使gitignore生效

    git rm -r --cached . // 删除本地缓存 git add . // 添加要提交的文件 初次提交直接声明gitignore并提交就可以: 非初次提交,改动的gitignore要进行上 ...

  7. 百度搜索URL参数含义

    序号 参数 含义 1 tn 搜索框所属网站.比如 tn=sitehao123,就是 http://www.hao123.com/ 左上那个搜索框(指通过什么方式到达百度首页搜索界面;) 2 s?wd ...

  8. 二、socket编写简单BIO的HTTP服务器

    一.目标 诸如tomcat等web服务器中间件简化了我们web的开发成本,但有时候我们或许并不需要这么一个完备的服务器,只是希望做一个简单地处理或者做特殊用途的服务器. 本文将提供一个HTTP的服务器 ...

  9. SecureCRT远程连接Linux下的sqlplus中退格键不能使用之解决方法

    ^H不是H键的意思,是backspace 主要是当你的终端backspace有问题的时候才需要设置   在linux环境下使用sqlplus,在回删(backspace)时往往会出现 一串的乱码.出现 ...

  10. 【SSH网上商城项目实战06】基于DataGrid的数据显示

    转自:https://blog.csdn.net/eson_15/article/details/51322262 1. 回顾一下第4节内容 在第4节中,我们使用EasyUI搭建好了左侧菜单栏,并且通 ...