Struts2中访问ServletAPI方式

通过ActionContext

struts2框架提供了ActionContext类来访问servletAPI,ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters、request、session、application等
这里写图片描述
ActionContext中访问Servlet API的方法
这里写图片描述

代码体现

  • 编写一个form表单,获取参数
<body>
    <form action="${pageContext.request.contextPath }/userAction" method="post">
        <input type="text" name="username"></br>
        <input type="text" name="password"></br>
        <input type="submit" value="提交">
    </form> 
  </body>
  • 编写Action类,获得各个域对象
package com.zillion.action;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

    @Override
    public String execute() throws Exception {
        //获得ActionContext对象
        ActionContext context = ActionContext.getContext();
        //ActionContext对象本身就是一个request域,通过ActionContext获得表单提交的参数,返回值结果为map集合
        Map<String, Object> parameters = context.getParameters();
        //遍历map获得表单参数
        Set<String> keySet = parameters.keySet();
        for (String key : keySet) {
            String[] value = (String[]) parameters.get(key);
            System.out.println(key+" "+value[0]);
        }
        //向request域中存放值
        context.put("request", "request");
        //获得application域对象
        Map<String, Object> application = context.getApplication();
        application.put("application", "application");
        //获得session域对象
        Map<String, Object> session = context.getSession();
        session.put("session", "session");
        return SUCCESS;
    }
}
  • 配置action
<action name="userAction" class="com.zillion.action.UserAction" method="execute">
            <result name="success">/success.jsp</result>
        </action>
  • jsp页面获取域对象值
<body>
${request }
${application }
${session }
</body>
使用ServletActionContext获得原生的域对象

获得域对象的方法
这里写图片描述
- jsp页面还是一个表单
- 编写Action类中的方法

public String method() throws Exception {
        //获得request作用域
        HttpServletRequest request = ServletActionContext.getRequest();
        //获得参数值
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username+" "+password);
        request.setAttribute("request", "request");
        //通过request作用域获得session作用域
        HttpSession session = request.getSession();
        session.setAttribute("session", "session");
        //获得响应对象
        HttpServletResponse response = ServletActionContext.getResponse();
        //获得ServletContext作用域——也就是application作用域
        ServletContext application = ServletActionContext.getServletContext();
        application.setAttribute("application", "application");
        //获得PageContext作用域——也就是page域
        PageContext pageContext = ServletActionContext.getPageContext();
        return SUCCESS;
    }
通过实现特点接口访问

struts2虽然提供了ActionContext类来访问Servlet API,虽然这种方法可以访问Servlet API,但无法直接获得原生的Servlet API对象,所以为了获得原生的API,struts2提供了一些接口。
这里写图片描述

  • 代码体现
    实现ServletRequestAware接口,并重写该方法,就可以获得原生的request域,然后将request设置为全局变量,这样在其他方法中就可以使用了
public class UserAction extends ActionSupport implements ServletRequestAware{
    HttpServletRequest request;
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
}
结论

从以上内容可以看出,借助于ServletActionContext类的帮助,开发者可以直接访问Servlet API,避免了去一一实现ServletRequestAware、ServletResponseAware、SessionAware、ServletContextAware等相关接口,虽然如此,该Action依然与Servlet API直接耦合,不利于程序解耦,所以建议开发中使用ActionContext。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值