struts学习(一)

1:配置struts.xml文件的路径,如:将文件放在conf文件夹下面,conf/struts.xml,在web.xml中配置
<!--按顺序加载,不能颠倒struts-default.xml,struts-plugin.xml,conf/struts.xml-->
    配置方法:
    <!-- 支持struts路径 -->
          <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
            <!-- 配置默认加载项及struts.xml路径,按顺序加载 -->
            <init-param>
                <param-name>config</param-name>

                <param-value>struts-default.xml,struts-plugin.xml,conf/struts.xml</param-value>
            </init-param>
          </filter>
          <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>

2:struts.xml配置
    1: 以包开始<package></package>,其中第一个包必须继承extends="struts-default",其余之后的包,可以继承自定义包,但最终目的还是要继承struts-default
    <package name="自定义名称" extends="struts-default" namespace="自定义命名空间,如果不定义,则默认为"" 或"/",如果命名空间为/a/b/c/...则查询其指定的内容是,从内向外查找,及先从最里面c开始,逐次向外查找 ">
        2:定义action
        <action name="与jsp页面提交的action名称相同,其省略后缀".action" ,只保留名称,如:在jsp页面中的提交方法为add.action,在这儿的name就是add"
            class="将要映射的类,及要处理数据的类的全路径,包名+类名,如:cn.it.AnimalAction,如果不写,则默认是ActionSupport"
            method="在类中处理的方法,如:类中有方法 public String add(){},则这儿的method="add",如果不写默认为"execute",即表示在类中有这个 public String execute(){}方法,">

            <!--各项默认值-->
            1>如果没有为action指定class,默认是ActionSupport。 
            2>如果没有为action指定method,默认执行action中的execute() 方法。 
            3>如果没有指定result的name属性,默认值为success。

           3:定义方法返回结果
              <result name="方法的返回值,如add方法的返回值,如果不写,则表示默认值:success"
                      type="页面的转发类型:dispatcher--表示使用请求转发的方式跳转;
                            chain -- 表示使用请求转发的方式跳转到其它的Action中;
                            redirect--表示使用重定向的方式跳转;
                            redirectAction--表示使用重定向的方式跳转到其它的Action中;
                            plainText -- 把jsp的源代码显示出来
                    其不写,则默认为dispatcher">要跳转的页面</result>
              <!--显示源代码-->
              <result name="jsp" type="plainText">
                <param name="location">/index.jsp</param>
              </result>

              <!-- 设置XXXAction的固定参数xxx为yyy ,在后台获取-->
              <param name="xxx">yyyy</param>
              <!--通过url可传参数-->
              <result type="redirect">/ok.jsp?pwd=${userPwd}</result>

              <result name="filed" type="redirectAction">
            4:不同的action之间跳转:只有type为 chain 与 redirectAction
               在跳转之前确定result要转向的Action所在的包的位置,即<package name=""....></package>
              <param name="如果在相同包中,则不需要设置namespace,如果不在同包中,则需要配置namespace">a</param>
              <param name="actionName">到别的包中action,如insert</param>
              </result>
        </action>
    </package>


3:配置公共结果类型
<package name="default" extends="struts-default">
    1:以<global-results>开始
    <global-results>
        <result name="方法返回值">公共页面</result>
        <result name="ok">/ok.jsp</result>
        <result name="no">/no.jsp</result>
        <result name="error">/error.jsp</result>
    </global-results>
    2:配置错误信息页面
    <global-exception-mappings>
        <exception-mapping result="对应错误信息的返回结果,如:error"
                           exception="对应错误类型的类,如IO流异常等">
        <!--针对运行时异常:编译器不强作处理,及其子类:如:空指针、下标越界、sql异常、类匹配异常、数字转换错误、参数异常等-->       
        </exception-mapping>

        <exception-mapping result="error" exception="java.lang.Exception">
        </exception-mapping>

    </global-exception-mappings>

    <!--配置通用的跳转-->
    <action name="index" class="ActionSupport(默认,可不写)">
        <result type="redirectAction">
            <param name="actionName">方法名(mypage)</param>
            <param name="namespace">别的namespace(user)  </param> -->
        </result>
    </action>

</package>

4:继承公共类,用于自己的业务,通配符的用法,通配符用* 表示,其方法代词{1}表示,如有多个通配符,如:user_*_*_name,则其代词为{1},{2},其中{1}表示第一个通配符的内容,{2}表示第二个通配符的内容
 struts2中不能出现相同的命名空间,
 在当前包中找不到XX.action 时,自动跳转到通用配置
    <!-- 自己的各种业务package -->
    <package name="userpkg" extends="default" namespace="/user">  --->extends="default" 继承了公共包
        <action name="useraction_*" method="{1}"
            class="org.ycpower.struts.actions.UserAction">
            <result>/{1}ok.jsp</result>
        </action>
        <action name="*">   ---> 由于公共的跳转中mypage在此namespace中不存在,通配符统配
            <result>/{1}.jsp</result>  ---> {1}代词,表示内容可通配符*的内容一样
        </action>


    </package>


5:配置各种常量
    <!--配置方法后缀为.action或do,多个时,中间用","号分割-->
    <constant name="struts.action.extension" value="action,do" />

    <!-- value为true,支持动态方法,false时,不支持,默认false,主要针对使用"!"的动态方法,与通配符的无关系 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />

    <!-- 打印更多的错误信息,开发模式下打开,生产环境下关闭 -->
    <constant name="struts.devMode" value="true" />   

    <!-- struts的配置文件修改后,系统是否重新加载该文件,默认值为false,生产环境下使用,开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true" />

    <!--指定web的默认编码模式,设置请求编码,只是针对与post方式的编码,-->
    <constant name="struts.i18n.encoding" value="utf-8" />
    <!--设置浏览器是否缓存静态内容,默认为true(产品(生产)模式使用),开发环境下关闭-->
    <constant name="struts.serve.static.browserCache" value="false" />

    <!-- 默认的视图主题,simple表示自己设置,不适用提供的主题 -->
    <constant name="struts.ui.theme" value="simple" />

    <!-- 指定处理文件上传:MIME-type:multipart/form-data -->
    <constant name="struts.multipart.parse" value="cos/pell/jakarta" />

    <!--指定上传文件时的临时目录,默认使用javax.servlet.context.tempdir-->
    <constant name="struts.multipart.saveDir" value="/tempuploadfiles" />

    <!--指定struts2文件上传中整个请求内容允许的最大字节数-->
    <constant name="struts.multipart.maxSize" value="2097152' />

    <!-- 指定struts2应用加载时自定义的属性文件,该自定义属性文件指定的属性不会覆盖struts。properties文件中指定的属性,
    如果需要加载多个自定义属性文件,多个自定义属性文件的文件名以","隔开,即:不该写struts.properties -->
    <constant name="struts.custom.properties" value="application,org/apache/struts2/extension/custom" />

    <!-- 设置是否可以在action中使用斜线,默认false,需要时设置为true  ,用于命名空间-->
    <constant name="struts.enable.SlashesInActionNames" value="true" />

    <!-- 设置要加载的国际化资源文件,以逗号分割-->
    <constant name="struts.custom.i18n.resources" value="application" />

    <!--设置struts自动加载文件列表,默认加载文件列表,可更改路径-->
    <constant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />


5:模型驱动和属性驱动
    1:属性驱动:其义就是:在Action中直接放置箱子(model),调用封装类,采用封装类的get/set方法,在jsp页面上的name用A.name模式,其A的实际值封装类的get方法
    的变形。即:实体作为另一个实体的属性
    如:有一个DogModel,在PetAction中
    public class PetAction(){
        private DogModel dogModel;

        public String add(){
            Dog
        }


        public DogModel getDogModel(){
            return dogModel;
        }
        public DogModel setDogModel(DogModel dogModel){
            this.dogModel=dogModel;
        }
    }

    在jsp页面
    <form action="add.jsp" method="post">
    <input name="dogModel.dogName" type="text" value="" />

    </form>



    2:模型驱动:直接放箱子
    如:有一个DogModel,在PetAction中
    public class PetAction() implements ModelDriven<DogModel>{
        DogModel dogModel = new DogModel();

        public String add(){

        }


        @override
        public dogModel getModel(){
            return dogModel;
        }

    }

    jsp页面:
    <form action="add.action" method="post" >
        <input type="text" name="dogModel" value="" />
        <input type="submit" value="GO" />
    </form>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值