Struts 2.x 概述

来源:互联网 发布:前后端数据交互方式 编辑:程序博客网 时间:2024/05/22 08:25

一、Struts 2.x 简介

    1、Struts 2 简介
        Struts 2 框架并不是起源于Struts 1.x 框架,而是起源于WebWork框架—另一个MVC框架。
        Struts 2 有很多新特性,例如支持主题、集成DOJO框架、内置AJAX等。

    2、Struts 2与WebWork 2的关系
        Struts 2就是 WebWork 2,WebWork 2就是Struts 2。

二、第一个Struts 2实例

    1、下载Struts 2类库
        Struts 2采用热部署的方式注册插件。

    2、登录功能Action
        Struts 2会自动把输入框的内容通过getter、setter方法设置进来。
        execute()方法是Struts 2 Action的主方法,提交数据后Struts 2会调用该方法,返回值代表结果页面的名称。

    3、Struts 2配置文件
        Struts 2配置文件中引入package的概念。
        所有的result、action等必须配置到package中。
        package具有集成的特性,子package里的Action能使用父package里的资源

    4、JSP登录界面
        <struts:head theme=”ajax”/>
        <struts:property value=”account”/>
        <struts:form action=”loginPerson”>
            <struts:label value=”登录系统”></struts:label>
            <struts:textfield name=”account” label=”账号”/>
            <struts:textfield name=”password” label=”密码”/>
            <struts:submit value=”登录”></struts:submit>
        </struts:form>
        注:标签库“/struts-tags”位于Struts 2 的 struts2-core-2.0.6.jar包中。
            Struts 2 标签支持主题。
            Struts 2 的表单标签是会输出<table>、<tr>、<td>等HTML标签的。

    5、配置 web.xml
        Struts 2 使用 Filter 作为分发器
        <filter>
            <filter-name>struts</filter-name>
            <filter-class>
                org.apache.sturts2.dispatcher.FilterDispatcher
            </filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    6、更改 .action 后缀
        如果要更改 Struts 2 的默认后缀,只需要修改web.xml中Filter配置中的struts.action.extension参数,或者在/WEB-INF/classes下添加
        struts.properties,在struts.properties里修改Struts 2的后缀:struts.action.extension=action

三、Struts 2工作流程

    1、Struts 2工作流程
        访问JSP页面 /struts2/login.jsp
                        ↓
        提交表单后数据提交给 /struts2/loginPerson.action
                        ↓
        Struts2截取所有请求,包括 *.action的请求
                        ↓
        查找 struts.xml,loginPerson.action对应LoginAction
                        ↓
        生成一个LoginAction实例,将提交的数据设置到该实例中
                        ↓
        调用LoginAction实例的execute()主方法
                        ↓
        跳转到JSP中现实结果,丢弃该LoginAction实例

    2、Struts 2的线程安全
        Struts 2的Action是线程安全的。

    3、程序入口FilterDispatcher
        如果URI以.action结尾,Struts 2会查找对应的Action或者JSP。如果URI中包含“/struts”,Struts 2会返回它集成的资源。配置Filter时要把所有的URI都转到Filter中,而不仅仅是.action结尾的URI。

四、Struts 2配置文件

    1、struts.properties
        struts.properties配置Struts 2的一些参数。

    2、struts.xml
        要有<!DOCUTYPE>,也要有<struts>根元素。
        <constant>配置struts2的属性,
        <include>配置多个sturts2文件,
        <bean>配置常用的POJO类,
        <package>里面配置<action>等。

    3、配置package
        <package>类似于对象,具有可继承的特性。

    4、配置命名空间
        <package>还可以配置namespace属性。如果配置了namespace=”namespace1”,那么访问时需要加上namespace。例如
        namespace1/loginPerson.action

五、Action详解

    1、Action接口
        Action接口只定义了一个execute()主方法,以及几个常用的结果名称(success、none、error、input、login等)。
        实现:直接实现该接口以及execute()方法即可。

    2、ActionSupport类
        实现自Action接口。
        继承ActionSupport类可以直接使用数据校验等Struts2集成的方法。
        继承:覆盖execute()方法,并定义变量。
        execute()方法的返回值为配置在struts.xml中的<result>配置,
        变量的值会被Struts2通过setter方法自动赋值。

    3、不继承任何类的Action
        只要这个Action具有public String execute()方法。
        如果Struts2发现Action类没有实现Action接口,会通过反射来调用execute()方法。
        不实现Action接口的好处是不与Struts2发生耦合,代码不依赖于Struts2的类库。

    4、Action的可执行方法
        Struts2还可以执行Action的其他方法,只要这些方法没有参数,并返回String类型。
        Struts2会在运行时根据方法的特征判断是否是可执行方法(参数、返回值),并通过发射执行。

    5、通过URL执行Action的方法
        可以使用action!method.action的URL形式访问。
        例如http://localhost:8080/struts2/loginPerson!logout.action

    6、将执行方法配置到Action
        <action name=”loginPerson” class=”” method=”login”>
            <result name=”login”>/login.jsp</result>
        </action>
        用通配符配置:
        <action name=”*Person” class=”” method=”{1}”>
            <result name=”{1}”>/{1}.jsp</result>
        </action>

六、Struts2的零配置

    1、通过@注解实现Action零配置
        @Namespace定义命名空间,一般不常用。
        @Results定义结果集,可以包括多个@Reuslt。@Result定义一个结果集。
        @Namespace(value=”/test”)
        @Result({
            @Result(name=”success”,value=”/success.jsp”),
            @Result(name=”redirect”,value=”/redirect.jsp”,type=ServletRedirectResult.class)
            @Result(name=”login”,value=”/login.jsp”)
        })
        该Action可以用默认的名称/struts2/annotated.action访问,即去掉类名中的Action,同时首字母小写。如果访问其中的add()方法,可以用/struts2/annotated!add.action。如果配置了namespace=”/test”,则必须以/struts2/test/annotated.action访问。

    2、web.xml中指定Action目录
        零配置时必须在web.xml的Filter中指定Action包的位置。
        参数actionPackages指定被@注解标注的Action所在的Package。
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>com.helloweenvsfei.struts2.action</param-value>
        </init-param>

七、Action中使用POJO

    1、通配符配置Action
        Struts2.x支持通配符配置Action。例如在action名称中使用“*“配置action名称,
        可以使用多个“*”。“*”代表的内容也可以在本Action配置内部使用{1}、{2}等引用,
        其中{1}表示第一个“*”内容,{2}表示第二个“*”的内容。

    2、图书实体Book类
        定义图书实体Book类以及属性和getter、setter方法。
        其他:Struts2.x也能自动转化Date类型数据。

    3、图书管理Action
        定义属性book及getter、setter方法,定义属性title及getter方法,定义属性bookList及getter方法。

    4、JSP添加、列表页面
        显示URL时使用的是<struts:url/>标签,该标签会在运行时将“.action”自动添加在后面。如果struts.properties中修改了“.action”后缀,该标签页会自动添加为新的后缀。
        可以使用<struts:url action=”initAddBook” includeParams=”none”/>将禁止本标签的自动追加参数特性。或者在struts.properties中禁止所有的<struts:url/>的自动追加参数特性。Struts.url.includeParams=none