Struts2_获取servletAPI

●在抱怨自己赚钱少之前,先努力,学着让自己值钱。—-我们共勉

为了在业务逻辑层更加独立,Struts2的action放弃了request,response等servletAPI。但是很多时候,不可避免的在action中使用servletAPI。

Struts获取ServletAPI有三种方法:

①通过ActionContext类的静态方法获取

②通过ServletActionContext的静态方法获取

③实现相关的Aware接口

1.通过ActionContext类获取

package com.lee.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.StrutsStatics;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class LoginAction implements Action{

    @Override
    public String execute() throws Exception {

        //获取session对象,注意是Map类型
        Map session=ActionContext.getContext().getSession();
        //给session赋值
        session.put("key1", "我是key1");

        //获取application对象,注意是Map类型
        Map application=ActionContext.getContext().getApplication();
        //给application赋值
        application.put("key2", "我是key2");

        //获取request对象,注意写法:get()中必须是“request”
        Map request =(Map)ActionContext.getContext().get("request");
        //给request赋值
        request.put("key3", "我是key3");

        return "success";
    }

}

上面获取到的三大域都是Map类型的,比如对于request来说,我们通常喜欢获取HttpServletRequest,HttpServletResponse类型的,因为这个类型的request功能要强大得多,用ActionContext也是可以获取的,而且也是我们更常用的一种方式,如下:

    //获取HttpServletRequest 
    HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
    //通过request获取sesssion
    HttpSession session = request.getSession();

2.通过ServletActionContext获取

通过ServletActionContext获取的各种对象就是真正的HttpServletContext对象。

public String mydemo2(){

        //获取HttpServletRequest
        HttpServletRequest request=ServletActionContext.getRequest();
        request.setAttribute("aa", "我是aa");

        //获取HttpSession
        request.getSession().setAttribute("bb", "我是bb");

        //获取application
        ServletActionContext.getServletContext().setAttribute("cc", "我是cc");

        return "success";

    }

注意每个域的写法,每个都不一样。

application和request需要一步get(),一步set()。

session需要两步get()和一步set()。

3.实现相关的Aware接口

request 对应RequestAware接口

session 对应SessionAware接口

application对应ApplicationAware接口

 struts2在实例化一个action对象时,如果发现他实现了相关的Aware接口,就会把相应的资源通过Aware接口方法注入进去,所以叫做注入方式(IOC方式)。
 以request为例,实现了RequestAware接口,就会有一setRequest()方法获取request对象,Aware接口实际上是一种拦截器,他会在执行Action前执行,把相关的servlet对象设置进来。

action代码:

package com.lee.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

public class TestAware implements RequestAware,SessionAware,ApplicationAware {

    private Map<String, Object> myrequest;
    private Map<String, Object> mysession;
    private Map<String, Object> myapplication;

    @Override
    public void setApplication(Map<String, Object> application) {
        application.put("aaa", "我是aaa");
        this.myapplication=application;
    }

    @Override
    public void setSession(Map<String, Object> session) {
        session.put("bbb", "我是bbb");
        this.mysession=session;
    }

    @Override
    public void setRequest(Map<String, Object> request) {
        request.put("ccc", "我是ccc");
        this.myrequest=request;
    }

    public String execute(){
        System.out.println(myrequest);
        return "success";
    }   
}

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值