struts2小结

       访问struts2的Action的方法有超链接(<a href="first.action">请求struts2</a>),表单提交等多种形式

        struts2的struts.xml中package的namespace是逻辑地址,与webcontent下存放jsp的文件名无关

 

        一. Struts2的配置:

            -web.xml中声明Struts提供的过滤器

            -在源码文件夹(如eclipse的src)下创建struts.xml,其中定义Struts2的Action对象

<struts>
<package name="user" extends="struts-default"  (namespace=)   (abstrace=)>
    <action name="userAction" class="com.wgh.action.UserAction"(method="save") >
        <result name="success" (type=) >success.jsp</result>
    </action>
</package>
</struts>

             包的配置:

             配置名称空间: 使⽤用namespace来区分业务模块(如admin和user)        不同模块中同名⽅方法的调⽤

             extends可以定义父包。一般是extends="struts-default" ,但是还可以继承自定义包,从而提高配置文件的重用性,如:

<package name="default" namespace="/" extends="struts-default">
    <global-results>
        <result name="ok">login_success.jsp</result>
        <result name="error">login_failure.jsp</result>
        <result name="add">usrLogin.jsp</result>
    </global-results>
</package>


<package name="user" namespace="/" extends="default">
    <action name="user_*" class="com.zhj.action.userAction4" method="user{1}" />
</package>

             Action的相关配置:

            在struts.xml⽂件中, action标签的class属性可以不写, struts2默认启⽤ActionSupport类。这样,result的name属性也可以不写(默认为success),因为ActionSupport类的execute()返回success。如:课本P176(3)

<struts>
<package name="user" extends="struts-default">
    <action name="userAction" >
        <result>success.jsp</result>
    </action>
</package>
</struts>

            当<result>元素未指定name属性时,默认值为success。

            type属性用于设置返回结果的类型,如请求转发(type="dispatcher")和重定向等。

 

       二.、Action对象

public class UserAction extends ActionSupport {
// ⽤户名属性
private String username;
// 为username提供setter⽅法
public void setUsername(String username) {
this.username = username;
}
// 为username提供getter⽅法
public String getUsername() {
return username;
}
public String execute() {
return SUCCESS;
}
}

           通常情况下,创建Action对象都要直接或间接地实现Action接口(该接口定义了execute方法,和五个静态常量)。间接一般是指继承ActionSupport类(该类实现了Action接口,并且其execute()返回的是success),定义的Action类可以重写或者直接继承ActionSupport类的execute()。

           但实际上,定义的Action类可以和Action接口无关,即不直接也不间接地实现Action接口。定义的Action类可以写或不写execute()。

           调用一个Action对象,默认执行的是execute()方法。而在我们用了下面4后,就不用再管execute()了

          实际上,后面我们会提到,由于业务逻辑复杂,我们基本上不会再用execute(),而是action中写多个处理业务逻辑的方法。

           请求参数的注入原理:在Struts2框架之中,表单提交的数据会⾃动注⼊到与Action对象中相对应的属性。  要求:
(1). 表单中的参数名与action对象中的属性名相同
(2). Action中定义属性的setter⽅法                

    

        三、struts2的Action的工作流程:

                   jsp或html的表单提交——>

                   web.xml中配置的struts2过滤器根据表单action的内容进行过滤——>

                    先根据struts.xml中的action的name和class找到对应的actioin类——>

                    在action类中进行业务功能,并返回相应的值——>

                    struts.xml根据相应的值和处理结果——>

                   跳转到相应的jsp页面

        

        四、 一个action中不同业务逻辑处理方法的调用:

             (execute一般是用于单一业务逻辑,就算写成多个逻辑也很麻烦)

                方法1.动态action正常的形式

                          action类中写不同业务逻辑的处理方法,jsp的表单中action="actionname!方法"

                方法2.在struts.xml中配置action的method属性

                           action中内容为<action name="name1 " class="classname" method="方法1">

                                                                        ........    

                                                   </action>

                                                   <action name="name2" class="classname" method="方法2">

                                                                        ........

                                                   </action>

                                                   ..................                       

                          jsp的表单中action="action"(不需再写方法,因为struts.xml中规定访问这个action时直接调用这个action的某个方法)

                方法3.使⽤用通配符 

        五、Struts2的标签库

           可在jsp页面使用,在jsp顶部添加:<%@taglib prefix="s" uri="/struts-tags" %>

            其中包括可代替html标签的表单标签

        六、Action接收来自表单的数据的方法(都是IOC注入):(推荐使用ModelDriven,最方便)

             方法1.表单提交的数据自动注⼊入action的相应属性(提供getter/setter⽅方法)

             方法2.使⽤用DomainModel接收表单提交的数据

                        action的属性类型是实体类型

                        注意:表单中收集数据input的name=对象.属性名(user.username)

             方法3.使⽤用ModelDriven来接收表单数据       

                        要求:该action类实现ModelDriven接口,并需要实例化属性(user对象)。

       四、 在实际应用中,为了实现不同业务模块的划分通常使用namespace(webcontent中的jsp也是按模块划分),不写默认是根目录/。

                        struts.xml中<package name=" " namespace="/或者/user等" extends="struts-default">

                                        ..........(中可写多个action)

                                        </package>

                        jsp的表单中action="user/check.action>

                            或超链接中<a href="admin/check.action>admin</a>

        七、action中访问web对象 ———request/session/application

               可在jsp中使用request/session/application展示信息

               方法1.使用Map对象                 

                         在action类中 添加构造函数并在其中给request/session/application赋值,在execute()或业务处理方法中给request/session/application添加键值对

                         在jsp中使用request/session/application展示信息

               方法2.实现RequestAware,SessionAware,ApplicationAware接口

      八、Struts2的拦截器

      九、数据验证机制

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值