博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2学习笔记--总结获取servletAPI的几种方式
阅读量:5290 次
发布时间:2019-06-14

本文共 3519 字,大约阅读时间需要 11 分钟。

   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;            };}

 

转载于:https://www.cnblogs.com/fingerboy/p/5186149.html

你可能感兴趣的文章
HttpWebRequest 发送简单参数
查看>>
Eclipse启动JVM机制
查看>>
一年的第几天
查看>>
leetcode 223: Rectangle Area
查看>>
Blender插件编写指南
查看>>
二次重建基本完成辣!
查看>>
PHP与Linux进程间的通信
查看>>
【长期更新】坑点合集
查看>>
wnmp windows 2012 r2+php7.0+nginx1.14安装
查看>>
weblogic与axis2 jar包冲突
查看>>
Hello Spring Framework——面向切面编程(AOP)
查看>>
解决java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
查看>>
将.lib库文件转换成.a库文件的工具
查看>>
FZU 2129 子序列个数 (动态规划)
查看>>
20155324 2016-2017-2 《Java程序设计》第7周学习总结
查看>>
CSS清浮动处理(Clear与BFC)
查看>>
thinkphp路由
查看>>
HDU - 1248-寒冰王座
查看>>
angular OnChange事件
查看>>
owin Oauth
查看>>