前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts2之Action类访问Servlet API

Struts2之Action类访问Servlet API

原创
作者头像
爱撒谎的男孩
发布2018-05-10 18:57:32
1.2K4
发布2018-05-10 18:57:32
举报

Action类访问Servlet API

  • 本人独立博客https://chenjiabing666.github.io
  • Struts2并未直接和Servlet API耦合,这是Struts2的一个改良之处。但是对于web应用控制器而言,不访问Servlet API是不可能,因此下面我们介绍三种方式访问Servlet API

ActionContext

  • 使用这个可以获取Servlet中HttpServletRequest,HttpSession,ServletContext

其中的方法

  • static ActionContext getContext()返回一个实例化ActionContext对象,用于调用下面的方法
  • Object get(key) 返回ActionContext中存放的键值对的值 其实这里获取的是Servlet中HttpServletRequest对象的属性
  • Object put(key,value) 向ActionContext中存放键值对,同样该方法用于存放HttpServletRequest的属性
  • Map getSession()返回一个Map对象,不过这个模拟了HttpSession的用法,只不过现在向其中存放键值对使用put,获取属性用get
  • Map getApplication()返回一个Map对象,不过这个模拟了Servlet中的ServletContext对象的方法。只不过存放和获取属性的方法用的分别是put和get
  • Map getParameters()获取所有的请求参数,类似调用HttpServletRequest对象的getParameterMap()方法
  • Map setSession(Map session)直接传入一个Map实例,将其中的kay-value转换成session的属性名和属性值
  • Map setApplication(Map application)直接传入一个Map实例,将Map实例中的key-value转换成属性名,属性值

使用

  • 如果想要使用这个类,当然需要实例化的对象,其中提供了一个获取对象的静态方法,就是上面方法中的第一个
  • 我们在Action方法中使用这个设置request域,session域中的属性
public class SimpleAction implements Action {
    @Override
    public String  execute(){
​
        ActionContext actionContext=ActionContext.getContext();  //获取实例化对象
        //向request域中存放键值对
        actionContext.put("name", "jack");
        //获取request域中的name值
        System.out.println(actionContext.get("name"));
​
        //向session中存放键值对
        actionContext.getSession().put("password", "123456");
​
        //向application中存放键值对
        actionContext.getApplication().put("a", "b");
​
        return SUCCESS;
    }
}
  • success.jsp 使用EL表达式获取
    <h1>success</h1>
    <h1>request域中的name:${requestScope.name}</h1>
    <h1>session域中的password: ${sessionScope.password }</h1>
    <h1>application域中的a: ${a }</h1>

总结

  • 虽说现在可以向各种域中添加属性获取属性,但是我们不可以移除属性,所以说这种方法不如直接使用Servlet API功能更加强大

实现接口访问Servlet API

  • 实现接口访问对一个Action类的污染实在太严重了,这个是不推荐使用的,可以了解一下

可以实现的接口

  • ServletContextAware实现该接口的Action可以直接访问用户请求的ServletContext实例
  • ServletRequestAware实现该接口的Action可以直接访问用户请求的HttpServletRequest实例
  • ServletResponseAware实现该接口的Action可以直接访问请求的HttpServletResponse实例

ServletActionContext(推荐)

  • 使用这个类可以直接获取HttpServletRequestHttpServletResponse等对象,其功能比第一种更加强大,因此推荐使用这种方式获取Servlet API

方法

  • PageContext getPageContext()取得web应用的PageContext对象
  • HttpServletRequest getRequest()获取HttpServletRequest对象
  • HttpServletResponse getResponse()获取HttpServletResponse对象
  • ServletContext getServletContext()获取ServletContext对象

使用

  • 我们在Action类中使用
public class SimpleAction implements Action {
    @Override
    public String  execute(){
​
        //获取Request域的对象
        HttpServletRequest request=ServletActionContext.getRequest();
        request.setAttribute("name", "jack");
​
        //获取Session域的对象
        HttpSession session=request.getSession();
        session.setAttribute("password", "123456");
​
        //获取Response的对象
        HttpServletResponse response=ServletActionContext.getResponse();
​
        return SUCCESS;
    }
}
​

总结

  • 直接获取Servlet API中的对象,可以使用的功能更加强大,因此推荐使用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Action类访问Servlet API
    • ActionContext
      • 其中的方法
      • 使用
      • 总结
    • 实现接口访问Servlet API
      • 可以实现的接口
    • ServletActionContext(推荐)
      • 方法
      • 使用
      • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档