1 Struts.xml配置中的包的介绍:
<package name="test" namespace="/test" extends="struts-default">
<action name="first" calss="com.action.HelloWord" meth="execute">
<reslut name="success">/success.jsp</reslut>
</action>
</package >
namespace:减少重复代码
struts1中Action的配置
<action name="loginForm" path="/user/login" scope="request" type="com.web.action.LoginAction" >
等同于Struts2
<package name="test" namespace="/test" extends="struts-default">
<action name="loginForm" path="login" scope="request" type="com.web.action.LoginAction" >
</action>
</package >
extends="struts-default":只有当包继承struts-default时才能使用Struts2所提供的核心功能。
2 action中的 HelloWord类中方法书写。
public String execute()//返回值是String类型
return "success"; //返回到界面struts.xml中的reslut 的name。
3关于action的搜索顺序
http://localhost:8080/MyStruts2/test/myFirstStruts
test是namespace,myFirstStruts是action的name。要是用http://localhost:8080/MyStruts2/test/sdsd/dsd/myFirstStruts
也能找到与第一个网址相同的action。
1)获得请求路径的URL,例如url是:http://server/Struts2/path1/path2/path3/test.action
2)首先寻找namespace为 /path1/path2/path3的package,如果不存在这个package则执行步凑3;如果存在这个package则在这个package里找test的action,当package下寻找不到action时就会直接跑到默认namespace的package里去寻找action(默认的命名空间为空字符串“”),如果默认的namespace的package还是找不到action,页面提示找不到action。
3)寻找namespace为/path1/path2的package,如果不存在这个package,则转至步凑4;如果存在这个package,则在这个package中寻找名为test的action,当在package中找不到action的就会直接跑到默认namespace的package找名为test的action,在默认的namespace中还是找不到这个action,页面会提示找不到action。
4)寻找namespace中的名为/path1的package,如果找不到这个package,则转到步凑5,如果存在这个package,则在这个package中寻找名为test的action,当在package中找不到action时就会直接跑到默认的namespace的package找名为test的action,在默认的namespace的package中找不到名为test的action方法,则在页面上提示找不到action。
5)寻找namespace为“/”的package,如果存在这个package就在这个package中寻找名为test打action,如果该package中寻找不到action时,就会在默认的namespace中去寻找test的action如果不存在则会在界面上显示找不到action。
4 Action的各项默认值
<action name="first" >
<reslut>/success.jsp</reslut>
</action>
如果没有指定Action的calss默认为ActionSupport
如果没有指定Action的method默认为execute()
如果没有指定Reslut的name默认是success
5关于重定向,和转发
在Struts一中配置如下:
<forward name="login">/login.jsp</forward>
<forward name="login" redirect="true" >/login.jsp</forward>
Struts2中Action的各种转发类型(dispatcher默认,redirect , redirectAction,plainText):
<reslut type="redirect">/login.jsp</reslut>
redirect :重定向;redirect
redirect Action重定向到Action
<reslut type="redirect">action</reslut>
//action是Action的name。并在同一个包中!
要是再别的包中如何处理啊!
<result name="success" type="redirectAction" >
<param name="actionName">xxx</param>//xxx表示Action的name,actionName是Struts2核心属性
<param name="namespace">/test/mytest</param>//namespace是Struts2核心属性/test/mytest是包的
namespace
</result>
plainText用于显示原始文件内容,例如:当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型。
<reslut name="source" type="plainText">
<param name="location">/xxx.jsp</param>
<param name="charSet">UTF-8</param>
</reslut>
公共使用的视图配置在
<global-results>
<result></result>//和其他一样
</global-results>
不过这个有个缺点只能在自己包中使用!
要是想让整个项目都使用视图和Action!用这些共用的建一个包然后其他包继承extends=“base”
<package name="base" extends="struts-default">
<global-results></global-results>
<action name=""></action>
</package>