Servlet 容器对URI的处理
问题
请求到达server以后,server是怎样处理URI请求资源路径的,在与web.xml文件里的映射进行比对时的原则是什么。
方案
针对精确匹配、通配符匹配、后缀匹配三种模式改动web.xml文件里的配置,查看不同比对原则的訪问结果
步骤
step1:新建URIServlet.java 文件
代码例如以下:
package web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class URIServlet extends HttpServlet{
protected void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
System.out.println("这里是URIServlet的service()方法");
}
}
step2:改动web.xml文件
例如以下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>uri1</servlet-name>
<servlet-class>web.URIServlet</servlet-class>
</servlet>
<!-- URI匹配,每次仅仅能开放一个servlet-mapping -->
<!--
<servlet-mapping>
<servlet-name>uri1</servlet-name>
<url-pattern>/abc/abc.html</url-pattern>
</servlet-mapping>
-->
<servlet-mapping>
<servlet-name>uri1</servlet-name>
<url-pattern>/abc/*</url-pattern>
</servlet-mapping>
<!--
<servlet-mapping>
<servlet-name>uri1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
-->
</web-app>
step3:新建uri.html文件、測试
例如以下:
<!DOCTYPE html>
<html>
<head>
<title>uri.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body style="font-size:24">
<h3>请求资源路径的 处理</h3>
<ul>
<li style="margin:40px">精确匹配
<ul>
<li>url-pattern:/abc/abc.html
<li><a href="abc.html">abc.html</a>
<li><a href="abc/abc.html">abc/abc.html</a>
</ul>
<li style="margin:40px">通配符匹配
<ul>
<li>url-pattern:/abc/*
<li><a href="abc.html">abc.html</a>
<li><a href="abc/abc.html">abc/abc.html</a>
</ul>
<li style="margin:40px">精确匹配 //注意li/ul的使用,效果例如以下图
<ul>
<li>url-pattern:*.do
<li><a href="abc.do">abc.do</a>
<li><a href="abc/abc.do">abc/abc.do</a>
</ul>
</ul>
</body>
</html>
==============================
測试界面例如以下所看到的:
測试成功时:在Console会输出:
这里是URIServlet的service()方法
(出如今Server startup in 36041 ms的以下)
刚開始測试时,出现一个错误:
严重: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/URIServletTest]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1247)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1898)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name uril
原因:web.xml文件里同一时候包括了多个
解决方法:每次仅仅开启一个,不用的凝视掉
Servlet 容器对URI的处理的更多相关文章
- 探秘Tomcat——一个简易的Servlet容器
即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...
- 深入剖析tomcat之一个简单的servlet容器
上一篇,我们讲解了如果开发一个简单的Http服务器,这一篇,我们扩展一下,让我们的服务器具备servlet的解析功能. 简单介绍下Servlet接口 如果我们想要自定义一个Servlet,那么我们必须 ...
- 一个简单的Servlet容器实现
上篇写了一个简单的Java web服务器实现,只能处理一些静态资源的请求,本篇文章实现的Servlet容器基于前面的服务器做了个小改造,增加了Servlet请求的处理. 程序执行步骤 创建一个Serv ...
- 理解与模拟一个简单servlet容器
servlet接口 使用servlet编程需要实现或者继承实现了javax.servlet.Servlet接口的类,其中定义了5个签名方法: public void init(ServletConfi ...
- servlet容器开发要点
v1 是一个http服务器. v2 是一个servlet容器, 可以提供servlet的服务. => 动态load servlet字节码,并运行它( 按生命周期). servlet容器它来 ...
- how tomcat works 读书笔记(二)----------一个简单的servlet容器
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...
- how tomcat works 5 servlet容器 下
上一节,我们主要说的是Wrapper容器,这一节我们说Context容器. 再重申一遍,一个Context容器可以包含多个Wrapper容器; 一个Wrapper容器就表示一个独立的servlet. ...
- 17. Spring Boot 配置嵌入式Servlet容器
一.如何定制和修改Servlet容器的相关配置 1.配置文件(ServerProperties): 优先级最高 server.port=8081 server.context‐path=/crud s ...
- 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat
Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...
随机推荐
- 基于QTP的自己主动化測试框架介绍
继前面用了七章介绍了基于QTP的自己主动化測试框架,以下再用几个视频再补充一下. 视频一:基本框架特点介绍说明 .框架的特点从正反两面进行了分析以及主要思想 http://v. ...
- Linux命令之编辑
vi是终端命令行里功能最强的文本编辑器了,但眼下须要用到的仅仅是文本编辑功能.与GCC.make等工具的整合应用如今还不须要,所以操作难度不大,习惯就好. Linux发行版所带的一般不是vi,而是vi ...
- vue - check-versions.js for child_process
webpack之类的配置文件. webpack.base.conf.js
- C++ STL中Map的按Value排序
那么我们如何实现对pair按value进行比较呢? 第一种:是最原始的方法,写一个比较函数: 第二种:刚才用到了,写一个函数对象.这两种方式实现起来都比较简单. typedef pair<st ...
- Openerp开发进销存系统完毕总结
转自:http://blog.csdn.net/heartrude/article/details/9142463 安装Openoffice 在openoffice中安装openerp repor ...
- JSP简单练习-EL获取表单数据
输入username和password的界面: <%@ page language="java" contentType="text/html;charset=gb ...
- 后台dubug有值且sql也打印出来执行了但是前台就是查不到数据
记录在sturts2里面 摔得最深的一次 public String queryJoinAccount(){ //用来存储分页的数据 pageMap=new HashMap<String, Ob ...
- 基于AndroidPn二次开发的可行性
一.背景 如果要自己搭建,从零开始做或基于开源进行修改扩充,开源的push引擎,90%的博文首推AndroidPN,结合公司现状,最优解决方案就是进行AndroidPN的二次开发了.先看一下这个项目: ...
- 利用 meta 标签重定向
页面定期刷新,如果加url的,则会重新定向到指定的网页,content后面跟的是时间(单位秒),把这句话加到指定网页的<head></head>里一般也用在实时性很强的应用 ...
- python selenium --滚动条处理
转自:http://www.cnblogs.com/fnng/p/3256563.html 本节重点: 控制滚动条到底部 有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需 ...