struts2 使用Map类型的request, session, application

在Action类中可以通过ActionContext对象获得request, session, application, 给3个对象分别设置key和value, 在另一个jsp界面中访问key对应的值

程序入口由index.jsp进入, 在struts.xml中寻找名为action的action标签

  <body>
  <a href="action">进入a>
  body>

struts.xml, 找到TestAction类

<struts>
    <package name="demo" extends="struts-default" namespace="/">
        <action name="action" class="action.TestAction">
            <result name="success">Hello.jspresult>
        action>
    package>
struts>

action类, 通过ActionContext 设置kv, 并在execute()返回SUCCESS, 让result标签与其对应

public class TestAction extends ActionSupport{
    Map request;
    Map session;
    Map application;

    public TestAction() {
        ActionContext context = ActionContext.getContext();
        request = (Map) context.get("request");
        session = (Map) context.get("session");
        application = (Map) context.get("application");
    }

    @Override
    public String execute() throws Exception {
        request.put("info", "reqValue");
        session.put("info", "sesValue");
        application.put("info", "appValue");
        System.out.println("结果"+request.get("info"));
        return Action.SUCCESS;
    }
}

Hello.jsp 显示值

  <body>
    <s:property value="#request.info"/><br>
    <s:property value="#session.info"/><br>
    <s:property value="#application.info"/>

    <s:debug>s:debug>
  body>

上面的action,定义了3个作用域, 若是action很多, 在每个action类中都写这样重复的代码很不好, 这时候可以自定义类,我们叫他BaseAction

public class BaseAction implements RequestAware,ApplicationAware,SessionAware{
    protected Map session;
    protected Map   application;
    protected Map request;

    @Override
    public void setSession(Map arg0) {
        // TODO Auto-generated method stub
        this.session=arg0;
    }

    @Override
    public void setApplication(Map arg0) {
        // TODO Auto-generated method stub
        this.application=arg0;
    }

    @Override
    public void setRequest(Map arg0) {
        // TODO Auto-generated method stub
        this.request=arg0;

    }
}

这时候再来修改TestAction, 同样能达到上面的效果

public class TestAction extends BaseAction{

    public TestAction() {
    }

    public String execute(){
        request.put("info", "reqValue");
        session.put("info", "sesValue");
        application.put("info", "appValue");
        System.out.println("结果"+request.get("info"));
        return Action.SUCCESS;
    }
}

你可能感兴趣的:(【Struts2】)