首先,说明下3个路径标识: /: 代表根目录;./:代表当前目录; ../代表当前目录的上级目录.
因此,如果当前路径为第4级,要访问第一级的路径,需要向上跳三次,即../../../,
反之,如果第一级访问第4级,则从当前路径往下转3级,即./下级目录1/下级目录2/下级目录3/;
一、资源类请求(html\jsp等文件)
以当前的输出资源目录为参考依据,比如输出目录为WebContent,index.html、sendMsg.html放置目录为WebContent\chatroom\下,
那么资源index.html中的请求sendMsg.html地址就是sendMsg.html了,因为同当前的index.html 位置平行,如果在其上一目录 ,
即直接放在WebContent目录下,则应取上级目录..,即格式为../sendMsg.html;
二、动作类请求(servlet的action)
这里需要注意以下几点:
1.form 中的action,对于动作类,不能以/开头,可以通过 上下文/动作,因为TOMCAT 把/当做 webapp这个层次的根目录,
其后 才是 各类应用上下文目录,再是对应的资源目录;
2.动作的请求需要从资源目录到WEB.XML中配置目录的转化,即: 当前资源目录=》WEBContent目录=》web配置中匹配模式的路径,
举例说明:
假如资源目录为webContent\chatroom\1\2\sendMsg.html,web中目录为/xxx/send,那么 sendMsg.html中action的请求
路径按照上述推导规则,则应该是 action=”../../../xxx/send”,前面的”../../../”代表追溯到上下文根目录。
3. 动作的名称、大小写必须与XML配置文件中一致,后面可以则可以附带参数,如send?a=1;
以Servlet的servlet-mapping节点中配置的路径为参考,以下分几种情况分析:
其中:sendMsg.html 在webContent\chatroom\sendMsg.html下,通过页面的SUBMIT按钮触发send动作,而show是该页面自动触发的显示操作。
web.xml配置如下:
<servlet-mapping>
<!-- 指定位哪个servlet配置映射 -->
<servlet-name>SendMsgServlet</servlet-name>
<url-pattern>/chatroom/send</url-pattern>
</servlet-mapping>
(A)相同路径
<servlet-mapping>
<servlet-name>ShowMsg</servlet-name>
<url-pattern>/chatroom/show</url-pattern>
</servlet-mapping>
(B) 上级路径
<servlet-mapping>
<servlet-name>ShowMsg</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
(C)不同目录下的同级别路径
<servlet-mapping>
<servlet-name>ShowMsg</servlet-name>
<url-pattern>/chatroom1/show</url-pattern>
</servlet-mapping>
(D)下级路径
<servlet-mapping>
<servlet-name>ShowMsg</servlet-name>
<url-pattern>/chatroom/next/show</url-pattern>
</servlet-mapping>
以下配置在HTML中请求的show路径:
---------------******** A <相同路径> *************-------
<frameset cols="*,200" frameboder="no" border="0">
<frameset rows="*,80" frameboder="no" border="0">
<frame src="show" name="mainFrame" id="mainFrame" />
<frame src="sendMsg.html" name="bottomFrame" id="bottomFrame" />
</frameset>
</frameset>
---------------******** B<上级路径> ************-------
<frameset cols="*,200" frameboder="no" border="0">
<frameset rows="*,80" frameboder="no" border="0">
<frame src="../show2" name="mainFrame" id="mainFrame" />
<frame src="sendMsg.html" name="bottomFrame" id="bottomFrame" />
</frameset>
</frameset>
---------------******** C <不同目录下的路径> *************-------
<frameset cols="*,200" frameboder="no" border="0">
<frameset rows="*,80" frameboder="no" border="0">
<frame src="../chatroom1/show" name="mainFrame" id="mainFrame" />
<frame src="sendMsg.html" name="bottomFrame" id="bottomFrame" />
</frameset>
</frameset>
---------------******** D <下级路径> *************-------
<frameset cols="*,200" frameboder="no" border="0">
<frameset rows="*,80" frameboder="no" border="0">
<frame src="./show" name="mainFrame" id="mainFrame" />
<frame src="sendMsg.html" name="bottomFrame" id="bottomFrame" />
</frameset>
</frameset>
三、规则
分精确匹配、拓展名匹配、路径匹配、即特殊情况下的任意匹配(/ 或/*),
为避免歧义性,除了根目录下用.jsp 这种拓展名模糊 和 /data/这种路径模糊匹配外,其他都建议用精确方式匹配。