Action中取得request,session的四种方式

在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?
Struts2为我们提供了四种方式。
分别为
servlet 不相关的 非IoC 取得Request等对象的方式
servlet 不相关的 IoC 取得Request等对象的方式
servlet 相关的 非IoC 取得Request等对象的方式
servlet 相关的 IoC 取得Request等对象的方式
以下分别叙述。

首先请看struts.xml文件
文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="default" extends="struts-default">
        <action name="login" class="struts2.login.LoginAction">
            <result name="success" >result.jsp</result>
        </action>
        
        <action name="login2" class="struts2.login.Login2Action">
            <result name="success" >result.jsp</result>
        </action>
        
        <action name="login3" class="struts2.login.Login3Action">
            <result name="success" >result.jsp</result>
        </action>
        
        <action name="login4" class="struts2.login.Login4Action">
            <result name="success" >result.jsp</result>
        </action>
    </package>
    
</struts>

其中的LoginAction,Login2Action,Login3Action,Login4Action分别对应四种方式的Action。

文件名:result.jsp
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>

<html>
request 属性是 ${requestScope.attribute}<br>
session 属性是 ${sessionScope.attribute}<br>
application 属性是 ${applicationScope.attribute}<br>
</html>

文件名:getrequest.jsp
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<a href="login.action">servlet 不相关的 非IoC 取得Request等对象的方式</a><br>
<a href="login2.action">servlet 不相关的 IoC 取得Request等对象的方式</a><br>
<a href="login3.action">servlet 相关的 非IoC 取得Request等对象的方式</a><br>
<a href="login4.action">servlet 相关的 IoC 取得Request等对象的方式</a><br>
</form>
</html>

然后分别叙述4种方式,
1,servlet 不相关的 非IoC 取得Request等对象的方式
这种方法先取得ActionContext,然后获取Map类型的request等对象

Action文件:
package struts2.login;

import java.util.Map;

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

public class LoginAction  extends ActionSupport{
    private ActionContext context;
    private Map request;
    private Map session;
    private Map application;
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        this.context = ActionContext.getContext();
        this.request = (Map)this.context.get("request");
        this.session = this.context.getSession();
        this.application = this.context.getApplication();
        this.request.put("attribute", "request value servlet 不相关的 非IoC ");
        this.session.put("attribute", "session value servlet 不相关的 非IoC ");
        this.application.put("attribute", "application value servlet 不相关的 非IoC ");
        return SUCCESS;
    }
}

2,servlet 不相关的 IoC 取得Request等对象的方式
这种方法,是实现特定的接口,由container来设定request等对象。请注意如下代码示例中红色文字的部分。

Action文件:
package struts2.login;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class Login2Action  extends ActionSupport
    implements RequestAware , SessionAware, ApplicationAware{
    private Map request;
    private Map session;
    private Map application;
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        this.request.put("attribute", "request value servlet 不相关的 IoC ");
        this.session.put("attribute", "session value servlet 不相关的 IoC ");
        this.application.put("attribute", "application value servlet 不相关的 IoC ");
        return SUCCESS;
    }

@Override
    public void setRequest(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        this.request = arg0;
    }

@Override
    public void setSession(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        this.session = arg0;
    }

@Override
    public void setApplication(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        this.application = arg0;
    }
}

3,servlet 相关的 非IoC 取得Request等对象的方式
这种方法可以获取servlet相关的request等对象,也就是说这种方式取出的request对象不单单是设定属性的作用,而是可以获取http相关的信息。
取出方法,请参看代码中的蓝字部分。

Action文件:
package struts2.login;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class Login3Action  extends ActionSupport{
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        this.request = ServletActionContext.getRequest();
        this.session = this.request.getSession();
        this.application = ServletActionContext.getServletContext();
        this.request.setAttribute("attribute", "request value servlet 相关的 非IoC ");
        this.session.setAttribute("attribute", "session value servlet 相关的 非IoC ");
        this.application.setAttribute("attribute", "application value servlet 相关的 非IoC ");
        return SUCCESS;
    }
    
}

4,servlet 相关的 IoC 取得Request等对象的方式

这种方法也可以获取servlet相关的request等对象,也就是说这种方式取出的request对象不单单是设定属性的作用,而是可以获取http相关的信息。
但是取出方法是通过接口进行实现,也就是由struts2的container来设定,请参看代码中的红字部分。

Action文件:
package struts2.login;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class Login4Action  extends ActionSupport
    implements ServletRequestAware , ServletContextAware{
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        this.request.setAttribute("attribute", "request value servlet 相关的 IoC ");
        this.session = this.request.getSession();
        this.session.setAttribute("attribute", "session value servlet 相关的 IoC ");
        this.application.setAttribute("attribute", "application value servlet 相关的 IoC ");
        return SUCCESS;
    }

@Override
    public void setServletRequest(HttpServletRequest arg0) {
        // TODO Auto-generated method stub
        this.request = arg0;
    }

@Override
    public void setServletContext(ServletContext arg0) {
        // TODO Auto-generated method stub
        this.application = arg0;
    }
}

好,把执行结果的图上来一看,一目了然,不知道你对action中取request等对象的这几种方式,了解了多少呢?

Action中取得request,session的四种方式的更多相关文章

  1. Struts2的Action中获取request对象的几种方式?

    通过ActionContext.getSession获取 通过ServletActionContext.getRequest()获取 通过SessionAware接口注入 通过ServletReque ...

  2. Struts2中访问web元素的四种方式

    Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...

  3. Delphi中动态创建窗体有四种方式

    Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...

  4. struts2 action中获取request session application的方法

    共四种方式: 其中前两种得到的是Map<String,Object>  后两种得到的才是真正的request对象 而Map就是把request对象中的属性取出做成了键值对而已. [方法一] ...

  5. MVC中控制器向视图传值的四种方式

    MVC中的控制器向视图传值有四种方式分别是 1 ViewDate  2.ViewBag   3.TempDate  4.Model 下面分别介绍四种传值方式 首先先显示出控制器中的代码 using S ...

  6. struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式

    1.属性驱动 a\  一般的set public class UserAction extends ActionSupport { private String username; private S ...

  7. Java中获取系统时间的四种方式

    第一种: Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ...

  8. 管理分布式session的四种方式。

    应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密 ...

  9. 在SpringMVC中获取request对象的几种方式

    1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...

随机推荐

  1. 输出图像到文件 imwrite()[OpenCV 笔记7]

    bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector& ...

  2. leetcode345——Reverse Vowels of a String(C++)

    Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Giv ...

  3. autoplay media studio couldn't load

    AutoPlay Media Studio 7 (English version) is installed on target machine. Following error occurred w ...

  4. (转)Libevent(1)— 简介、编译、配置

    转自:http://name5566.com/4190.html 参考文献列表:http://www.wangafu.net/~nickm/libevent-book/ 此文编写的时候,使用到的 Li ...

  5. OpenJudge/Poj 1517 u Calculate e

    1.链接地址: http://bailian.openjudge.cn/practice/1517 http://poj.org/problem?id=1517 2.题目: 总时间限制: 1000ms ...

  6. [翻译]ASP.NET Web API 2入门

    原文:Getting Started with ASP.NET Web API 2 Step 1:新建一个Empty的Web API Project. Step 2:添加一个Model: public ...

  7. Linux系统的启动流程以及做个小小的Linux

    内核的作用     进程管理:进程间切换     内存管理:内存空间分割为内核空间和用户空间     IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现     文件系统管理     ...

  8. php安装中的错误

    http://www.cnblogs.com/kristain/articles/3809243.html     借鉴php安装错误 2013-01-04 19:16:49 分类: 系统运维 环境: ...

  9. ci 用本身 email 类发 email

    //比如 在控制器用 email 方法发送邮件 //用126的smtp 发送,示例邮件为 myemail@126.com 密码为 password public function email() { ...

  10. yii2 AR需要注意的地方

    $model::find(['id'=>1])->one();和$model::findOne(1); 返回的都是一个Obj不能使用foreach遍历,其他都是返回对象数组可以用forea ...