struts下路径学习新的

来源:互联网 发布:xp查看mac地址命令 编辑:程序博客网 时间:2024/06/03 17:31

 1.
在Struts中路径有相对路径、绝对路径。
如果使用了struts标签,那么标签中的html元素使用的路径为相对路径。比如应用为book ,标签中路径<html:link action="bookEdit.do>,那么实际显示的路径为http://.../book/bookEdit.do
也就是structs会自动找到根路径,并把标签中路径改为根路径+标签中路径
在html中,有个base元素,用来说明路径的根路径。如果不用struts标签,可以使用base来确定根路径。
其实最直接的办法是把路径写为绝对路路径,这样就不会出问题。比如路径写为
action="book/bookEdit.do" 那么就肯定不会错了。
2.
无论JSP文件存放在哪个文件夹下,在JSP页面中只有一种写法,即<form action="showvionpic.do"> ,至于路径问题,都交由struts的配置文件struts-config.xml中的action中的属性path来确定
<action path="/cx/admin/search">

那在WebRoot/cx/admin目录下的jsp文件怎样写呢,是
<form action="search.do">吗?对于这个问题答案是一样的.
<action path="/cx/showvionpic" scope="request" type="Cx.ShowVionPicAction">
<forward name="show" path="/cx/violation/show.jsp" />
</action>
上面这段代码,在action中的path的路径指的是,你要走的action类,这个类在的路径是通过type来映射到这个类的.
forward中的path指的路径是jsp文件所在的路径,就是说你在action中进行逻辑处理结束以后,要根据mapping.findforward("show")它来决定你走的是配置文件中当前ACTION中的哪个FORWARD,把path的路径指到你要转向的JSP文件的全路径即可.
3.你在JSP文件里面写了
<%
String path = request.getContextPath();
%>
顺便写一句System.out.println()输出path看一下不就知道了
4.
从刚开始接触Tomcat开始,就被繁杂的相对路径给弄晕了,尽管最后每次都能正确的匹配上,但是总觉得不是很顺畅,一直试图找出一条匹配的规则出来,但是每每总结出一条来的时候,总是又被新的“事实”给颠覆,让人不胜烦恼,因此决定有一点写一点。

通常相对路径的写法有两种,一种就是以“/”开头,一种就是不以“/”开头,这两种写法有什么区别呢,下面举例阐述一下。

现在的Web环境是一个Struts2的应用,我的应用名是Struts,应用程序所在的目录名也是Struts。这样我的url基本是以http://localhost/Struts开头的啦。现在做如下测试:

1.在Struts目录下面有一个文件叫sayHello.jsp,它里面的form的action的值是HelloWorld.action,那么提交之后匹配的路径是http://localhost/Struts/HelloWorld.action

2.如果action的值是test/HelloWorld.action,那么提交之后匹配的路径是http://localhost/Struts/test/HelloWorld.action

3.假设在Struts目录下面有一个子目录add,它里面有一个文件叫sayHello.jsp,它里面的form的action的值是HelloWorld.action,那么提交之后匹配的路径是http://localhost/Struts/add/HelloWorld.action

4.在测试3下将action的值改为test/HelloWorld.action,那么提交之后匹配的路径是http://localhost/Struts/add/test/HelloWorld.action

5.在测试3下将action的值改为/HelloWorld.action,那么提交之后匹配的路径是http://localhost/Struts/ HelloWorld.action。

6.在测试3下将action的值改为/test/HelloWorld.action,那么提交之后匹配的路径是http://localhost/Struts/ test/HelloWorld.action。

总结:在页面文件中,所请求的相对路径为path,那么它的路径匹配是从文件当前所在的目录开始的,假设页面文件当前所在目录为curr,那么匹配后的完整路径就是http://localhost/Sturts/curr/path;如果相对路径为/aa/bb/cc,那么匹配后的路径就是http://localhost/Sturts/path。也就是说,如果以“/”开头,就从当前应用的根目录开始匹配,如果不以“/”开头就从当前文件所在的目录开始匹配。这样的话,如果文件本来就在根目录下面,那么加“/”和不加“/”就没啥区别了。

在Struts2还一个要匹配路径的地方就是在处理完请求之后对页面进行分发的时候,也就是result元素里面的内容。测试记录如下:

1.<result>/HelloWorld.jsp</result>。匹配的路径是http://localhost/Struts/HelloWorld.jsp

2.<result>HelloWorld.jsp</result>。这个时候就和调用这个action的路径相关了。可以这样进行匹配,首先得到请求这个action的url,然后去掉最后一个“/”后面的内容,再把HelloWorld.jsp接上去即可。例如,我们是通过http://localhost/Struts/aa//bb/cc/HelloWorld.action调用的action,那么匹配出来的url就是http://localhost/Struts/aa//bb/cc/HelloWorld.jsp