• (转)structs2的相关配置问题


    1.配置Action.
    
    在struts.xml文件中,使用包来管理Action,定义一个Action节点时,必须指定name属性,且值为请求url的前半部分.class可以不写,默认为ActionSupport类.
    
    Action只是一个控制器,并不能对客户端产生任何响应,只能将指定的视图资源返回给用户.通过配置其子节点<result>来定义逻辑视图和物理视图的关系.
    
    <action name="add" class="com.action.myAction">
    
           <result name="input" type="redirect">/input.jsp</result>
    
    </action>
    
     
    
    2.动态方法调用.
    
    要使用此功能,要在struts.properties文件中指定:
    
    struts.enable.DynamicMethodInvocation=true
    
    将请求url定义为 actionName!methodName.action 如,FruitAction!add.action.stust.xml配置文件
    
    不需要改动,但在Action里必须定义一个add方法.这样就能访问FruitAction的add方法.
    
     
    
    3.为action指定method属性.
    
    同动态方法调用的功能一样,但此种方法,在struts.xml文件中,将一个Action处理类定义成了多个逻辑Action
    
    <action name="login" class="com.ac.UserAction" method="loginM"/></action>
    
    <action name="regist" class="com.ac.UserAction" method="registM"/></action>
    
    这样,Action类的每个方法都被映射成一个Action.
    
    但,这中方法让action的定义相当冗余,所以struts2.0提供了另一种形式的方法调用,即使用通配符.
    
     
    
    4.使用通配符.
    
         <Action>的name,class,method三个属性都能使用通配符.
    
            <action name="*Action" class="com.ac.UserAction" method="{1}">
    
        这种定义方式就好比定义了多个action,method="{1}",表示"*"的值.
    
           <action name="*Action" class="com.ac.{1}Action" method="{1}">
    
           <action name="*_*" class="com.ac.{1}Action" method="{2}">
    
    struts2还允许<result>中使用表达式.如<result>/{1}.jsp</result>
    
    <action name="*Page">
    
         <result>/{1}.jsp</result>
    
    </action>
    
    由于没有指定class,则默认有ActionSupport处理,而ActionSupport的execute方法返回success,所以会跳到*.jsp页面.
    
    问题来了,如果有一个这样的请求,aaaAction.action,在Struts.xml文件中定义了三个<action>
    
    <action name="*">
    
    <action name="*Action">
    
    <action name="aaaAction">
    
    那么将会匹配哪个<action>呢.
    
    首先,如果有一个<action>的name与请求完全匹配,那么就一定匹配该<action>,如果没有,则按顺序从上至下查找,如果能匹配,就映射该<action>,
    
    例如,如果有一个aaaAction请求,则会匹配<action name="aaaAction">如果请求是aaAction,则会匹配<action name="*">,因为它在最先匹配.所以,一般将<action name="*">放到最后,范围最小的放前面.
    
     
    
    5.默认Action
    
           struts2允许你定义一个默认的Action,当容器找不到与请求Url相匹配的<action>是,将使用此默认action.
    
              <default-action-ref name="aAction" >
    
              <action name="aAction" class=......./>
    
    6.属性驱动和模型驱动.
    
    属性驱动,将需要从页面获取的属性和传递给下一个视图的属性定义为action的实例变量,并提供getter和setter方法.
    
    模型驱动,则是向struts1.x那样,使用一个Pojo类来封装属性,但此pojo类不需要继承ActionForm,它就是一个普通的Pojo类.在Action中要实现ModelDriven接口,定义Pojo实例变量,并给其赋值(new),然后实现getModel()方法,返回pojo对象.
    
     
    
     
    
    7.异常机制
    
    Struts2.0提供了一种声明式的异常处理方式.
    
    public String execute() throws Exception
    
    Action中的execute()能抛出所有Exception,将异常抛给了框架来处理,我们甚至不需要使用繁琐的try{}catch(){},我们只需要在struts.xml中配置<exception-mapping>异常映射,就能方便的处理各类异常.
    
    它有两个属性,
    
    exception:指定该异常映射所设置的异常类型
    
    result:出现指定异常后,返回的结果.
    
    全局异常:将<exception-mapping>元素作为<global-exception-mapping>元素的子元素
    
    局部异常:将<exception-mapping>元素作为<action>的子元素.
    
    在页面输出异常信息:
    
    <s:property value="exception"/> 如<s:property value="exception.message"/>
    
    <s:property value="exceptionStack"/>
    奋斗奋斗奋斗奋斗奋斗奋斗奋斗奋斗生命在于奋斗,也为自己带盐奋斗奋斗奋斗奋斗奋斗奋斗奋斗奋斗
  • 相关阅读:
    第一节 49_ref_out 简单
    第一节 38函数 简单
    第二节 2面向对像简介 简单
    第一节 42字符串基础 简单
    第二节 3属性 简单
    第一节 33enum枚举 简单
    Java jdbc 数据库
    css 使IE和FIREFOX下变为手型
    JS调用PageMethods
    USB设备量产导致通用串行总线控制器显示感叹号解决办法
  • 原文地址:https://www.cnblogs.com/hardwork/p/4166429.html
Copyright © 2020-2023  润新知