Struts2的简单搭建(三)

Struts2简单搭建学习

本节的目标

1.struts.xml中action的配置
2.几种配置action的方式

struts.xml中action的配置

1.action是package下的一个子节点,我们通过配置action来让struts2知道,用户的请求是哪个action,struts2应该用那个action来应对。

2.action节点下面还有一个子节点是resultresult的定义是让逻辑视图与物理视图做对应,不同的逻辑视图都会在result中做映射,然后做不同的页面跳转。

3.action的name也是访问时用到的name,这时候用户可以随意定义,但是,不建议使用“-”,“.”作为连接使用过,如“pkk.user”,"pkk-user",这样有可能会引发一些未知异常信息。我们可以使用“/”来定义,但是使用之前需要启用struts.enable.SlashesInActionNames为true,这时候方可使用。

4.action节点有参数name还有class,但是我们如果不指定action的话,可以走默认的action类ActionSupport来进行处理,当然我们可以通过指定默认的action处理类。因为在平常,我们配置的package,不是直接的继承struts-default,就是间接的继承,都是走ActionSupport处理类。

例子如下:

<!--允许action使用“/”作为名称-->
<constant name="struts.enable.SlashesInActionNames" value="true"/>

<!--访问地址:http://localhost:8081/namespace/testAction!testSuccess.action-->
    <package name="backTest" namespace="/namespace" extends="web-default">
        <action name="testAction" class="com.pkk.action.TestAction">
            <result name="success">index.jsp</result>
            <result name="input">/pages/sys/SysVerifyError.jsp</result>
        </action>

        <!--如果 不设置action就会走默认的action类来进行处理-->
        <default-class-ref class="com.pkk.action.BaseAction"/>
    </package>

几种配置action的方式

1.动态方法调用

DMI(Dynamic Method Invocation)动态方法调用,就是一个action并不是等同于一个action,简单来说,他是通过
actionName+"!"+MethodName(方法名称).action方式调用
如:action="http://localhost:8081/namespace/ActionName!MethodName.action"


通过这种方式简化了不同的业务处理对应一个action的创建的麻烦,使用动态方法调用,可以做到一个类只配置一个action,或多个类只配置一个action(前提是多类中不包含相同的方法名称),通过actionName+!+MethodName方式调用,启用此方式,需要添加:

<!--方法动态调用-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

2.为action指定method来实现调用

配置action时也可以指定一个methodmethod为一个类中的方法,指定后可以进行根据actionname和方法的方法限定一个请求。这时候struts会调用相应的方法,而不是走默认的execute方法来处理请求。
<!--http://localhost:8081/namespace/testAction!testSuccess.action-->
    <package name="backTest" namespace="/namespace" extends="web-default">
        <action name="testAction" class="com.pkk.action.TestAction" method="userLogin">
            <result name="success">index.jsp</result>
            <result name="input">/pages/sys/SysVerifyError.jsp</result>
        </action>
    </package>

3.使用通配符方式

    在配置<action/>时,需要指定name,class,method属性,其中name属性支持[通配符],然后可以在class,method属性中使用[表达式],这种使用通配符的方式其实就是另一种的动态方法调用方式,当我们通配一个acttion中的name属性时,相当于一个<action/>元素定义了多个逻辑action。

    可以使用表达式的属性有:name,class,result的值,
    举例说明:
    <package name="back1Test" namespace="/" extends="web-default">
        <!--可以接收到请求为 【任意字符_任意字符】的请求,但是必须存在com.pkk.action.第一个“*”Action中的第二个*的方法-->
        <action name="*_*" class="com.pkk.action.{1}Action" method="{2}">
            <result name="success">index.jsp</result>
            <result name="input">/pages/sys/SysVerifyError.jsp</result>
        </action>
        <!--可以接收到请求为 【任意字符Action】的请求,但是必须存在com.pkk.action.TestAction中的第一个*的方法-->
        <action name="*Action" class="com.pkk.action.TestAction" method="{1}">
            <result name="success">index.jsp</result>
            <result name="input">/pages/sys/SysVerifyError.jsp</result>
        </action>
        <!--可以接收到请求为 【任意字符_任意字符_任意字符】的请求,但是必须存在com.pkk.action.第一个“*”Action中的第二个*的方法,并且返回值为input,所映射的页面在/pages/sys/第三个星.jsp-->
        <action name="*_*_*" class="com.pkk.action.{1}Action" method="{2}">
            <result name="success">index.jsp</result>
            <result name="input">/pages/sys/{3}.jsp</result>
        </action>
        <!--可以接收到请求为 【任意请求】的请求,但是必须存在com.pkk.action.TestAction中的第一个*的方法-->
        <action name="*" class="com.pkk.action.TestAction" method="{1}">
            <result name="success">index.jsp</result>
            <result name="input">/pages/sys/SysVerifyError.jsp</result>
        </action>
    </package>
["注意事项"]:
    注意:在上面的定义的通用的action中,注意第四个<action name="*"...>的这个,建议放到所有的action的最后,因为,在struts中,struts在解析请求的映射时,会从上往下进行寻找,例如配置的action中有,*Action和*,两种方式,这时候,我们去请求时,http://localhost:8080/Struts/testAction.do时,会和*Action进行匹配,也会和*进行匹配,当我们把*放到最上面,会首先在name为*的中进行匹配,匹配不到才会从*Action匹配。

4.配置默认的action

    当我们请求的方法在struts容器中找不到时,这时候我们可以配置一个默认的action:

    <package name="web-default" namespace="/" extends="struts-default,json-default">

        <!--配置默认走的action-->
        <default-action-ref name="defaultAction"></default-action-ref>

        <action name="defaultAction" class="com.pkk.action.BaseAction">
            <result>/pages/sys/SysVerifyError.jsp</result>
        </action>
    </package>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值