struts2学习笔记--总结获取servletAPI的几种方式

简介:    struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用servletAPI,那么如何在Action中获取并使用servletAPI呢, 通过ActionContext类的静态方法获取(非IOC方式) package com.

   struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用servletAPI,那么如何在Action中获取并使用servletAPI呢,

  1. 通过ActionContext类的静态方法获取(非IOC方式)

package com.wang.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 通过actioncontext类访问并获取servletAPI
 * 其对象是一个map类型的
 * @author Administrator
 */
public class ContextAction extends ActionSupport{
    public String execute() throws Exception {
        String  name="zhangSan";
        //获取seesion
        Map session = ActionContext.getContext().getSession();
        //把想存的值放到session域中
        session.put("sessionName", name);
        
        //获取request
        Map request=(Map)ActionContext.getContext().get("request");
        //把想存的值存入request域中
        request.put("requestName", name);
        
        //获取application
        Map application = ActionContext.getContext().getApplication();
        //把需要的值存入application域中
        application.put("applicationName", name);
        return null;
    };
}

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

        //获取HttpServletRequest 
        HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
        //通过request获取sesssion
        HttpSession session = request.getSession();
  • 通过ServletActionContext的静态方法获取(非IOC方式)

    package com.wang.action;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.StrutsStatics;
    import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 通过ServletActionContext类访问并获取servletAPI
     * 虽然是使用了静态方法获取request,response,但仍能保证获取到当前用户,当前线程的request,response,
     * 不会反生混淆,因为struts2利用ThreadLoca来维护当前线程的servlet对象,是线程安全的
     * @author Administrato
     */
    public class ContextAction2 extends ActionSupport{
        public String execute() throws Exception {
            String  name="zhangSan";
            //获取HttpServletRequest
            HttpServletRequest request = ServletActionContext.getRequest();
        
            //获取session
            HttpSession session = request.getSession();
            return null;
        };

     

  • 实现相关的Aware接口(IOC方式)

    • request 对应ServletRequestAware接口
    • response对应ServletResponseAware接口
    • session  对应SessionAware接口
    • application对应ServletContextAware接口

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

package com.wang.action;

import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
import org.apache.struts2.interceptor.ServletRequestAware;

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

public class ContextAction1 extends ActionSupport implements ServletRequestAware {
    
    HttpServletRequest request;
    public String execute() throws Exception {
        String name="zhangSan";
        
        request.setAttribute("name", name);
    
        return null;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        //通过该方法可直接获取到request对象
        this.request=request;
        
    };

}

 

相关文章
|
5月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
358 2
|
XML 数据格式
告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发
告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发
|
XML Java 数据格式
struts2+spring+mybatis整合小案例
最近学习ssm框架,模仿别人做了一个小案例 当然途中也遇到了蛮多的问题.借此机会.记录一下自己的过程 struts2+spring+mybatis的整合过程 1.说明: 个人采用的是deepin操作系统(深度linux)+Intellij Idea(相对与myeclipse我还是更喜欢idea 可能因为更智能)+tomcat7. 当然在windows下没什么不同,具
4302 0
Spring-web源码解析之Filter-HiddenHttpMethodFilter
基于4.1.7.RELEASE 就如同它的名字,该类负责解析隐藏的HttpMethod,用了这个Filter之后,你可以在页面上POST时指定_method参数,该Filter会根据参数指定的值将Request包装成为指定的HttpMethod的request。
978 0
|
存储 Java 应用服务中间件
JavaWeb学习笔记二 --- 会话机制、JSP、 EL+JSTL 总结(超详细的总结~~)
JavaWeb学习笔记二 --- 会话机制、JSP、 EL+JSTL 总结(超详细的总结~~)
181 0
JavaWeb学习笔记二 --- 会话机制、JSP、 EL+JSTL 总结(超详细的总结~~)
|
SQL XML 缓存
MyBatis源码解析之基础模块—binding
MyBatis源码解析之基础模块—binding
2142 0
MyBatis源码解析之基础模块—binding
|
数据库 数据安全/隐私保护 安全
springmvc集成shiro例子
阅读目录 仅供参考 登录部分 登录验证部分 授权部分 权限拦截配置 访问路径匹配任意角色 示例源码参考 测试 仅供参考 仅供参考 登录部分 代码: @RequestMapping(value = "/login", method = RequestMethod.
1343 0
|
Java 前端开发 应用服务中间件
|
容器
struts2获取web元素的方式和方法
获取web资源的方式按是否与servlet耦合可分为两种,再细分按照依赖方式又有两种即 依赖容器 和  依赖注入   什么是依赖容器 就是依赖  ActionContext或者ServletActionContext容器获得web元素     什么是依赖注入   IoC(inverse of control)控制反转=dependence injection  依赖注入   是针对web元素(也叫web资源)如  request、session、application这三者的访问。
1026 0