Struts2中在Action中使用Servlet API

1.使用ActionContext对象 ——以解耦合的方式来访问Servlet API

ActionContext actionContext = ActionContext.getContext(); 
1)actionContext.getParameters(); //获取所有请求参数 
2)actionContext.put("company", "公司"); / actionContext.get("company"); //对request范围内存取数据 
3)actionContext.getSession(); //获取session数据Map,对session范围内存取数据 

4)actionContext.getApplication(); //获取ServletContext数据Map,对应访问存取数据

action:

public class ServletAPIAction extends ActionSupport{

    @Override
    public String execute() throws Exception {
        System.out.println("访问到了action,正在 处理请求");
        System.out.println("hello world!!! struts2");

        ActionContext actionContext = ActionContext.getContext();

        //1.获取请求参数
        Map<String,Object> par = actionContext.getParameters();
        Object value = par.get("name");
        System.out.println(value);

        //2.读取request的Attribute
        actionContext.put("request", value);
        System.out.println(actionContext.get("request"));

        //3.存取session的Attribute
        Map<String, Object> sessionMap = actionContext.getSession();
        sessionMap.put("session",value);
        System.out.println(sessionMap.get("session"));

        //4.存取Application的Attribute
        Map<String,Object> applicationMap = actionContext.getApplication();
        applicationMap.put("application", value);
        System.out.println(applicationMap.get("application"));

        return SUCCESS;
    }

}

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="${pageContext.request.contextPath}/servletAPI.action">
    username:<input type="text" name="name"><br>
    <input type="submit" value="login">
</form>
</body>
</html>

action.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <h6>request:${requestScope.request}</h6>
    <h6>session:${sessionScope.session}</h6>
    <h6>application:${applicationScope.application}</h6>
</body>
</html>

struts.xml中添加

<action name="servletAPI" class="luu.ServletAPIAction" method="execute">
            <result name="success">action.jsp</result>
        </action>

访问http://localhost:8080/index.jsp 输入名字然后点击提交,跳转到action.jsp页面,页面显示

                        

2.使用IOC接口注入的方式,操作Servlet API

ServletContextAware(接口):注入ServletContext对象 
ServletRequestAware(接口): 注入request对象 

ServletResponseAware(接口):注入response对象 

使用哪个接口就实现哪个接口即可。

action

public class LoginAction2 extends ActionSupport implements ServletRequestAware,ServletContextAware{
    private HttpServletRequest request;
    private ServletContext context; 
    @Override
    public String execute() throws Exception {
        //获取请求参数
        System.out.println(request.getParameter("username"));
        //存取request
        request.setAttribute("company", "公司1234");
        //存取session
        request.getSession().setAttribute("age", 25);
        //存取Application
        context.setAttribute("info", "1243567");
        return SUCCESS;
    }
    @Override
    //struts2会自动将request对象设置进来
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }
}

3.在Action中直接通过ServletActionContext获得Servlet API 

ServletActionContext.getRequest() : 获得request对象(session) 
ServletActionContext.getResponse() :获得response对象 
ServletActionContext.getServletContext() :获得ServletContext对象 

静态方法没有线程问题,ThreadLocal

public class LoginAction3 extends ActionSupport{
    @Override
    public String execute() throws Exception {
        //1.获取请求参数
        System.out.println(ServletActionContext.getRequest().getParameter("username"));
        //2.保存request范围数据
        ServletActionContext.getRequest().setAttribute("company", "公司");
        // 3 保存session 范围数据
        ServletActionContext.getRequest().getSession().setAttribute("age", 19);
        // 4 保存application范围数据
        ServletActionContext.getServletContext().setAttribute("info", "雨很大");
        return SUCCESS;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值