struts2学习记录其二:Action的配置和返回结果的配置
大家好,我们今天继续学习Struts2。如果对Struts2的创建有问题的朋友请看上一章。
上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html
下一章:异常处理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html
一.配置Action
1.包和命名空间
<package....../>必须指定name(报名)属性,其他的可选属性:extends(继承),namespace(空间名,这个需要注意。),abstract(指定为抽象包)
(实际上所有的Struts2插件文件都会提供一个struts-plugin.xml)
默认的空间名(不使用namespace属性):可以处理任何空间里的Action请求,前提是他在自己的命名空间里没有该Action。
根命名空间(namespace="/"):指出里根下的Action请求,如请求/login.action。
2.Action的基本配置
至少指定一个name(通常是用字母和数字组成)属性作为请求的URL。但通常还需指定class属性作为Action的实现类,以及逻辑视图和物理视图的对应关系<result...../>。
(如果设置struts.enable.SlashesInActionNames常量为true,则可以使用其他字符来作为name)
3.使用Action的动态方法调用(尽量少使用)
action="actionName!methodName"
(注意:这个方法不需到xml文件中配置,只需要把struts.enable.DynamicMethodInvocation设置为true,它是直接调用对应Action的方法,而此方法必须和execute方法一样的格式)
4.指定method属性及使用通配符
在Action中加入method属性调用class处理类的方法
通配符写在name属性中,然后在class、method、<result..../>中使用{N}的形式来配备,可以指定method方法,如果不指定使用execute()方法(在这里name最好写成*.action)
特殊:不做任何处理的直接调转到其他界面(一般写在struts.xml的最后,实现简单的超链接。)
<action name="*">
<result>{1}.jsp</result>
</action>
6.配置默认Action
<defualt-action-ref name="....."/>:只是指定默认的处理Action,下面还是要配置其Action。
7.配置Action的默认处理类
<defualt-class-ref class="......."/>
二.配置处理结果
1.struts2提供两种结果:
局部结果:将<result.../>作为<action.../>的子元素
全局变量:将<result.../>作为<global-results..../>的子元素
(<result.../>常用属性name、type)
<package name="loginpackage" namespace="/user" extends="struts-default">
<action name="login" class="com.login.LoginAction1">
<result name="success" type="dispatcher">//type还可以指定为location、parse,默认为disoatcher
<param name="location">succees.jsp</param>
//这里的name可以指定两个值:location指定该逻辑视图对应的实际的视图资源,parse可以使用OGNL表达式来作为实际视图名字,两个属性都可不要,默认success
</result>
</action>
</package>
2.struts2支持的结果类型
这里我们先只介绍三个类型,其他的在后面的会详细介绍的
1.plainText(不常用):只要用来显示实际资源的代码。
参数:location:指定实际的视图资源。charSet:指定输出界面时的所用到的字符集。一般放在<param.../>中。
2.redirect:将请求重定向到指定的视图资源。(dispatcher是将请求转发给视图资源)
注意:重定向会丢失所有的请求参数、请求属性、Action的处理结果。不能重定向到WEB-INF路径下,因为该路径是被保护的。
参数:location:跳转地址,parse:是否允许使用表达式
3.redirectAction:功能与redirect一样,重定向。但这个可以使用ActionMapper
参数:actionName:重定向的Action名,namespace:重定向的Action所占的空间(针对与Action,二redirect针对于具体的资源请求)
3.动态结果:OGNL表达式与通配符连用(借鉴前面的特殊Action)
4.Action属性值决定物理视图(这个我也不太懂,有大牛懂得给我说一下)
${属性名.属性名........}
5.全局结果(<global-results...../>)
其使用方式和<action.../>几乎一样,这个是覆盖全部的Action,但会被局部的Action所覆盖。
6.使用PreResultListener
PreResultListener拦截器是在action方法执行后,返回result(即回调before()方法)之前执行的拦截器。要通过ActionInvocation的addPreResultListener()方法完成。
它可以将Action转入不同的Result,所以它可以作为日志实现方式。
ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
invocation.addPreResultListener(new PreResultListener()
{
public void beforeResult(ActionInvocation invacation, String resultCode)
{
//方法体内写我们需要处理的监听器业务逻辑
//上面的形参 resultCode 是前台发送的请求(即 Action 的逻辑名)
}
});
对上面的某些内容的具体代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.il8n.resources" value="mess"/>
<constant name="struts.enale.DynamicMethodInvocation" value="false"/>
<package name="loginpackage" namespace="/user" extends="struts-default">
<action name="login" class="com.login.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
<package name="registpackage" namespace="/" extends="struts-default">
<action name="MyAction" class="com.login.MyAction">
<result>${target}.jsp</result>
</action>
<action name="*" class="com.login.RegistAction" method="{1}">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
<package name="Allpackage" extends="struts-default">
<action name="*">
<result>{1}.jsp</result>
</action>
</package>
</struts>
------------------------------------------------------------------------------------------------------------------------------------
内容不是特别详细,见谅。这只是我的一些见解。有什么错误的请指出,谢谢。
上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html
下一章:异常处理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html