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

来源:互联网 发布:阿里云域名解析到主机 编辑:程序博客网 时间:2024/06/07 14:37

在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.jsp</result>        </action>    </package></struts>

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

public class TestAction extends ActionSupport{    Map<String, Object> request;    Map<String, Object> session;    Map<String, Object> application;    public TestAction() {        ActionContext context = ActionContext.getContext();        request = (Map<String, Object>) context.get("request");        session = (Map<String, Object>) context.get("session");        application = (Map<String, Object>) 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<String, Object> session;    protected Map<String, Object>   application;    protected Map<String, Object> request;    @Override    public void setSession(Map<String, Object> arg0) {        // TODO Auto-generated method stub        this.session=arg0;    }    @Override    public void setApplication(Map<String, Object> arg0) {        // TODO Auto-generated method stub        this.application=arg0;    }    @Override    public void setRequest(Map<String, Object> 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;    }}
阅读全文
0 0