zoukankan      html  css  js  c++  java
  • ServletAPI的获取

    Action中获取ServletAPI,三种方式

    (1)通过ActionContext获取(只是获取并操作了域空间,并不是真正的ServletAPI对象)

      在struts2框架中,通过Action的执行上下文类ActionContext,可以获取request/session/application对象。

      ActionContext ctx = ActionContext.getContext();

      Map<String,Object> application = ctx.getApplication();

      Map<String,Object> session= ctx.getSession();

      ActionContext对象本身就是request的储存空间,直接向context中存入数据就可以认为向request中存入数据

    例:向request域空间中放入数据

      ActionContext.getContext().put("request","value"); 

      在jsp页面中进行取值${requestScope.request }El表达式 

         向Session域空间中放入数据

      ActionContext.getContext().getSession().put("session","value");

      在jsp页面中进行取值${sessionScope.session }El表达式

         向Application(application 其实就是ServletContext)域空间中放入数据

      ActionContext.getContext().getApplication().put("application","value");

      在jsp页面中进行取值${applicationScope.application}El表达式

      (以上方法获取不到response)

    (2)通过ServletActionContext获取真正的servletAPI对象

    例:向request对象中放入数据:

      HttpServletRequest req = ServletActionContext.getRequest(); //得到request对象

      req.setAttribute("request","value");  

      向Session对象中放入数据:

      req.getSession().setAttribute("session","value");

      向Application对象中放入数据:

      ServletActionContext.g.getServletContext().setAttribute("app", "value");

      (jsp页面展示数据的时候通第一种方式是相同的)

    (3)通过实现特定借口来获取(1:比较麻烦。2:Action方法被污染了,不是单纯的pojo类了)

      

     1 package com.bjyinfu.struts.actions;
     2 
     3 import java.util.Map;
     4 
     5 import org.apache.struts2.ServletActionContext;
     6 import org.apache.struts2.interceptor.ApplicationAware;
     7 import org.apache.struts2.interceptor.RequestAware;
     8 import org.apache.struts2.interceptor.SessionAware;
     9 
    10 public class GetServletAPIAction implements RequestAware,SessionAware,ApplicationAware {
    11 
    12     private Map<String,Object> req;
    13     private Map<String,Object> app;
    14     private Map<String,Object> ses;
    15     
    16     public String execute(){
    17         req.put("servletReq", 13);
    18         ses.put("servletSes", 15);
    19         app.put("servletApp", 17);
    20         
    21         return "servlet";
    22     }
    23 
    24     @Override
    25     public void setRequest(Map<String, Object> request) {
    26         this.req = request;
    27     }
    28 
    29     @Override
    30     public void setApplication(Map<String, Object> application) {
    31         this.app = application;
    32     }
    33 
    34     @Override
    35     public void setSession(Map<String, Object> session) {
    36         this.ses = session;
    37     }
    38 }

      (通过此处了解到,成员变量和属性不是同一个东西,属性是setter或者getter方法将,set或者get去掉并将首字母改成小写,这是属性名)

  • 相关阅读:
    基于kafka-net实现的可以长链接的消息生产者
    Windows服务安装、卸载、启动和关闭的管理器
    基于Confluent.Kafka实现的KafkaConsumer消费者类和KafkaProducer消息生产者类型
    [转]C#中HttpClient使用注意:预热与长连接
    基于Confluent.Kafka实现的Kafka客户端操作类使用详解
    [转载]RabbitMQ消息可靠性分析
    ASP.NET Core3.1 MVC 添加验证规则
    asp.net core 3.1 webapi接口参数有时间类型取不到值得问题
    asp.net core 3.1 引用的元包dll版本兼容性问题解决方案
    Python安装和环境配置
  • 原文地址:https://www.cnblogs.com/lubolin/p/7249803.html
Copyright © 2011-2022 走看看