学习笔记(三)HttpServlet中路径配置相关

首先,说明下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/这种路径模糊匹配外,其他都建议用精确方式匹配。

猜你喜欢

转载自blog.csdn.net/hello_delphi/article/details/78588373