struct2复习、梳理

构建

1、Maven

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>servlet-api</artifactId>

        <version>2.5</version>

        <scope>provided</scope>

    </dependency>

    <dependency>

        <groupId>org.apache.struts</groupId>

        <artifactId>struts2-core</artifactId>

        <version>2.5.2</version>

</dependency>

Web.xml

<filter>

    <filter-name>Struts2</fileter-name>

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>Struts2</filter-name>

    <url-pattern>/*</url-pattern>

<filter-mapping>

2配置文件

    <package name="user" extends="struts-default">

        <action name="login" class="com.loginAction" method="login">

            <result name="ERROR">error.jsp</result>

            <result name="SUCCESS">result.jsp</result>

        </action>

        <action name="test" class="com.StorageAction" method="storage">

            <result name="storage">/index.jsp</result>

        </action>

        <action name="{前台名称} " class="类地址 " method="方法名(可默认) ">

            <result name="{后台返回字符串} ">/{页面}</result>

        </action>

    </package>

3类

继承

extends ActionSupport

返回字符串

**********************************************************

--其他

在struts2值栈中存储数据的三种方式

1用值栈对象中的set方法

public String execute() throws Exception {

        //1 获取值栈对象

        ActionContext context = ActionContext.getContext();

        ValueStack stack = context.getValueStack();

        //2 调用值栈对象中的set方法

        stack.set("demo", "DemoData");     

        return "success";

    }

2用值栈对象中的push方法

  public String execute() throws Exception {
        //1 获取值栈对象
        ActionContext context = ActionContext.getContext();
        ValueStack stack = context.getValueStack();
        //2 调用值栈对象中的push方法
        stack.push("abcd"); 
        return "success";
    }

3在action中定义变量(或对象),使用相应的get方法

//1. 声明变量
    public String name;
    //2. 生成变量的get方法
    public String getName(){
        return name;
    }
    //3. 在执行方法中为变量赋值
    public String execute() throws Exception {
        name = "DemoData";
        return "success";
    }

补充:list集合的示例

 
    // 1. 定义list变量
    private List<User> list = new ArrayList<User>();
    // 2. 生成get方法
    public List<User> getList() {
        return list;
    }
    public String execute() throws Exception {
        //3 向list中设置值
        User user1 = new User();
        user1.setUsername("小奥");
        user1.setPassword("123");
        user1.setAddress("美国");
        User user2 = new User();
        user2.setUsername("小王");
        user2.setPassword("250");
        user2.setAddress("越南");
        list.add(user1);
        list.add(user2);
        return "success";
    }

整体总结

一、 概述

 Struts2轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。

二、 Action

action属性 :

 


动态方法调用:

<package name="user" namespace="/user" extends="struts-default">

        <action name="userAction" class="action.UserAction">

            <result name="success">/list.jsp</result>

            <result name="update">/update.jsp</result>

            <result name="add">/add.jsp</result>

        </action>

        <!-- <action name="add" class="action.UserAction" method="add">

            <result>/add.jsp</result>

        </action>

        <action name="delete" class="action.UserAction" method="delete">

            <result>/delete.jsp</result>

        </action>

        <action name="update" class="action.UserAction" method="update">

            <result>/update.jsp</result>

        </action> -->

    </package>
默认action配置:

 默认的action是在访问一个不存在的action的时候访问的action,配置默认action,只需要在package中添加如下配置:

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

        <default-action-ref name="hello"/>

        <!-- HelloWorld演示程序 -->

        <action name="hello" class="example.HelloWorld">

            <result>/index.jsp</result>

        </action>

    </package>
通配符映射:

使用通配符映射的方式可以大大减少action的数量,所谓通配符就是使用*,用于匹配0个或多个字符。在action的配置中,可以为name属性使用*来匹配任意的字符。比如下面的配置:

    <action name="edit*" class="action.Edit{1}Action">

                <result>/{1}.jsp</result>

            </action>

        {1}会被name属性中的*的内容填充,比如在浏览器中访问/editUser,会映射到action.EditUserAction类,返回到User.jsp页面中。其中的{1}实际上就是作为占位符的,大括号的值可以是0-9,其中{0}代表整个请求URL。比如下面的配置:

    <action name="*_*" class="action.{1}Action" method="{2}">

                <result>/{1}_{2}.jsp</result>

            </action>

三、 拦截器

(1)创建拦截器组件(创建一个类,实现Interceptor接口,并实现intercept方法;也可以继承MethodFilterInterceptor,这种方式可以使action中某个方法不进行拦截)

public String intercept(ActionInvocation invocation){

   //拦截器--前部分处理

   invocation.invoke();

   //拦截器--后续处理     

}

(2)注册拦截器

    <package>

        <interceptors>

            <interceptor name="别名" class="实现类"/>

            <!--其他拦截器-->

        </interceptors>

    </package>

               (3)引用拦截器(哪个Action希望被拦截器扩展,需要在此action配置下,引用拦截器)

    <action>

     <!--手动的使用一次系统默认的拦截器-->

     <interceptor-ref name="defaultStack"/>

        <interceptor-ref name="拦截器别名"/>

        <!--可以写多个-->

     <!--可以使用excludeMethods参数属性,设置不过滤的方法-->

    </action>

拦截器栈

<interceptor-stack name="myStack">

    <interceptor-ref name="拦截器别名1"/>

    <interceptor-ref name="拦截器别名2"/>

</interceptor-stack>

GF ✡ 2020/5/3

猜你喜欢

转载自www.cnblogs.com/gwf2020/p/12823401.html