Servlet 容器对URI的处理
2015-08-19 19:36
330 查看
问题
请求到达服务器以后,服务器是如何处理URI请求资源路径的,在与web.xml文件中的映射进行比对时的原则是什么。
方案
针对精确匹配、通配符匹配、后缀匹配三种模式修改web.xml文件中的配置,查看不同比对原则的访问结果
步骤
step1:新建URIServlet.java 文件
代码如下:
step2:修改web.xml文件
如下:
step3:新建uri.html文件、测试
如下:
==============================
测试界面如下所示:
![](http://img.blog.csdn.net/20150819193726786)
测试成功时:在Console会输出:
这里是URIServlet的service()方法
(出现在Server startup in 36041 ms的下面)
刚开始测试时,出现一个错误:
原因:web.xml文件中同时包含了多个
解决方法:每次只开启一个,不用的注释掉
请求到达服务器以后,服务器是如何处理URI请求资源路径的,在与web.xml文件中的映射进行比对时的原则是什么。
方案
针对精确匹配、通配符匹配、后缀匹配三种模式修改web.xml文件中的配置,查看不同比对原则的访问结果
步骤
step1:新建URIServlet.java 文件
代码如下:
[code]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文件
如下:
[code]<?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文件、测试
如下:
[code]<!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的下面)
刚开始测试时,出现一个错误:
[code]严重: 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文件中同时包含了多个
解决方法:每次只开启一个,不用的注释掉
相关文章推荐
- hdu 5398 GCD Tree 2015多校联合训练赛#9 LCT,动态生成树
- Struts(3)工作机制及分析
- 题目:最小子数组
- 2015/8/19/FramLayout/TableLayout/AbsoluteLayout
- 对web标准的理解
- Win10
- c++构造函数初始化列表
- 各种License
- 题目:最大子数组
- 题目:最后一个单词的长度
- IOS学习之路十二(UITableView下拉刷新页面)
- ios开发之xib的详细加载过程
- PAT-PAT (Advanced Level) Practise 1027. Colors in Mars (20) (简单进制转换)【一星级】
- 友盟推送问题
- Struts(2)环境搭建
- 关于“using namespace std”
- php关于重载函数的笔记
- 题目:旋转字符串
- hdu-2544-最短路(SPFA)
- Android之如何改变焦点状态【EditText】