访问servlet的路径问题
⼀、url-pattern的三种配置
在l配置⽂件中配置有关Servlet的时候,<url-pattern>标签是⽤于配置当前Servlet拦截的路径,也就是说,客户端浏览器访问
<url-pattern>标签配置的路径才能访问对应Servlet内容。
关于拦截路径的配置⽅式其实有三种⽅式:
1. 完全路径匹配:是以“/”开始,路径中间不能包含通配符“*”,例如:/firstServclet,表⽰访问路径为
localhost:8080/08_servlet/firstServlet。
2. ⽬录匹配:是以“/”开始,以“/*”结尾的,例如:/firstServlet/*,表⽰访问路径为localhost:8080/08_servlet/firstServlet路径下任意内
容。
3. 扩展名匹配:是以“*”开始,不能以“/”开始,以“.xxx”结尾,例如:*.do,表⽰访问路径为所有扩展名为
“.do”的路径。
值得注意的问题:
1. 在⼀个<servlet-mapping>标签中,可以配置多个<url-pattern>标签。也就是说,⼀个Servlet可以拦截多个不同路径的访问。
2. 上述三种配置路径⽅式具有优先级:完全路径匹配 -> ⽬录匹配 -> 扩展名匹配。
下⾯通过⼀些测试,来看看路径配置的三种⽅式:
如下有⼀些映射关系:
1. Servlet1 映射到 /abc/*
2. Servlet2 映射到 /*
3. Servlet3 映射到 /abc
4. Servlet4 映射到 *.do
问题:
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应?Servlet1
当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应?Servlet3
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应?Servlet1
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应?Servlet2
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应?Servlet2
如果客户端浏览器请求的路径是错误时,页⾯会显⽰404错误内容。这是因为所有发布到Tomcat服务器的Web应⽤程序的l⽂件都继承了Tomcat服务器安装⽬录中conf⽬录中的l⽂件。当访问路径是错误的,或者对应Servlet没有配置,实际上会执⾏Tomcat服务器中的l的相关配置,具体内容如下:
1<servlet>
2<servlet-name>default</servlet-name>
3
4<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
5<init-param>
6<param-name>debug</param-name>
7<param-value>0</param-value>
8</init-param>
9<init-param>
10<param-name>listings</param-name>
11<param-value>true</param-value>
12</init-param>
13<load-on-startup>1</load-on-startup>
14</servlet>
15<servlet-mapping>
16<servlet-name>default</servlet-name>
17<url-pattern>/</url-pattern>
18</servlet-mapping>
1.2. 相对路径与绝对路径
之前我们开发的Servlet,在客户端浏览器中都是直接在地址栏中输⼊路径来访问的。如果创建⼀个页⾯来访问Servlet应该怎么样呢?下⾯我们来看⼀看:
在Web⼯程中的WebRoot⽬录下,创建⼀个新⽬录名为“html”,然后在该⽬录下创建⼀个新的HTML页⾯。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>01.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">
</head>
<body>
<h1>相对路径访问Servlet</h1><br>
<a href="">相对路径访问Servlet</a>
<h1>绝对路径访问Servlet</h1><br>
<a href="">绝对路径访问Servlet</a>
</body>
</html>
在Web⼯程中的WebRoot⽬录下,创建⼀个新的HTML页⾯。
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>
3<head>
4<title>02.html</title>
5<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
6<meta http-equiv="description" content="this is my page">
7<meta http-equiv="content-type" content="text/html; charset=UTF-8">
8</head>
9<body>
10<h1>相对路径访问Servlet</h1><br>
11<a href="">相对路径访问Servlet</a>
12<h1>绝对路径访问Servlet</h1><br>
13<a href="">绝对路径访问Servlet</a>
14</body>
15</html>
在Web⼯程中创建⼀个Servlet。
public class PathServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("成功访问到Servlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response);
}
}
配置Web⼯程的l⽂件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="java.sun/xml/ns/javaee"
servlet和tomcat的关系xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/javaee
java.sun/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>PathServlet</servlet-name>
<servlet-class>app.java.servlet.PathServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PathServlet</servlet-name>
<url-pattern>/pathServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
将当前Web⼯程发布到Tomcat服务器,并启动Tomcat服务器。
打开浏览器,分别访问01.html、02.html和PathServlet。
根据上述的访问路径,可以知道在01.html和02.html页⾯中,通过绝对路径访问PathServlet是相同的。
在01.html和02.html页⾯中,通过相对路径访问PathServlet是不同的。
在01.html页⾯中利⽤相对路径访问PathServlet应该是../pathServlet。原因是pathServlet是在01.html页⾯的⽗级⽬录中。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>01.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">
</head>
<body>
<h1>相对路径访问Servlet</h1><br>
<a href="../pathServlet">相对路径访问Servlet</a>
<h1>绝对路径访问Servlet</h1><br><a href="localhost:8080/08_servlet/pathServlet">绝对路径访问Servlet</a>
</body></html>
² 在01.html页⾯中利⽤相对路径访问PathServlet应该是./pathServlet或直接访问拦截名称pathServlet。原因是pathServlet与02.html页⾯处在同⼀级别的⽬录中。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>02.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">
</head>
<body>
<h1>相对路径访问Servlet</h1><br>
<a href="pathServlet">相对路径访问Servlet</a>
<h1>绝对路径访问Servlet</h1><br>
<h1>绝对路径访问Servlet</h1><br>
<a href="localhost:8080/08_servlet/pathServlet">绝对路径访问Servlet</a>
</body>
</html>
什么是绝对路径与相对路径:
绝对路径:就是⽆论当前资源在什么位置,都能通过当前资源访问到⽬标资源。
相对路径:就是判断当前资源与⽬标资源的相对位置,出相对当前资源可以访问到⽬标资源的路径。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论