转载自~

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

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5.  
  6. <struts>
  7.  
  8. <package name="default" extends="struts-default">
  9. <action name="login" class="struts2.login.LoginAction">
  10. <result name="success" >result.jsp</result>
  11. </action>
  12.  
  13. <action name="login2" class="struts2.login.Login2Action">
  14. <result name="success" >result.jsp</result>
  15. </action>
  16.  
  17. <action name="login3" class="struts2.login.Login3Action">
  18. <result name="success" >result.jsp</result>
  19. </action>
  20.  
  21. <action name="login4" class="struts2.login.Login4Action">
  22. <result name="success" >result.jsp</result>
  23. </action>
  24. </package>
  25.  
  26. </struts>

其中的LoginAction,Login2Action,Login3Action,Login4Action分别对应四种方式的Action。   
文件名:result.jsp    文件内容:

  1. <%@ page contentType="text/html; charset=gb2312" %>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3.  
  4. <html>
  5. request 属性是 ${requestScope.attribute}<br>
  6. session 属性是 ${sessionScope.attribute}<br>
  7. application 属性是 ${applicationScope.attribute}<br>
  8. </html>

文件名:getrequest.jsp    文件内容:

  1. <%@ page contentType="text/html; charset=gb2312" %>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <html>
  4. <a href="login.action">servlet 不相关的 非IoC 取得Request等对象的方式</a><br>
  5. <a href="login2.action">servlet 不相关的 IoC 取得Request等对象的方式</a><br>
  6. <a href="login3.action">servlet 相关的 非IoC 取得Request等对象的方式</a><br>
  7. <a href="login4.action">servlet 相关的 IoC 取得Request等对象的方式</a><br>
  8. </form>
  9. </html>

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

  1. package struts2.login;
  2.  
  3. import java.util.Map;
  4.  
  5. import com.opensymphony.xwork2.ActionContext;
  6. import com.opensymphony.xwork2.ActionSupport;
  7.  
  8. public class LoginAction extends ActionSupport{
  9. private ActionContext context;
  10. private Map request;
  11. private Map session;
  12. private Map application;
  13.  
  14. @Override
  15. public String execute() throws Exception {
  16. // TODO Auto-generated method stub
  17. this.context = ActionContext.getContext();
  18. this.request = (Map)this.context.get("request");
  19. this.session = this.context.getSession();
  20. this.application = this.context.getApplication();
  21. this.request.put("attribute", "request value servlet 不相关的 非IoC ");
  22. this.session.put("attribute", "session value servlet 不相关的 非IoC ");
  23. this.application.put("attribute", "application value servlet 不相关的非IoC ");
  24. return SUCCESS;
  25. }
  26. }

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

  1. package struts2.login;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.apache.struts2.interceptor.ApplicationAware;
  6. import org.apache.struts2.interceptor.RequestAware;
  7. import org.apache.struts2.interceptor.SessionAware;
  8.  
  9. import com.opensymphony.xwork2.ActionSupport;
  10.  
  11. public class Login2Action extends ActionSupport
  12. implements RequestAware , SessionAware, ApplicationAware{
  13. private Map request;
  14. private Map session;
  15. private Map application;
  16.  
  17. @Override
  18. public String execute() throws Exception {
  19. // TODO Auto-generated method stub
  20. this.request.put("attribute", "request value servlet 不相关的 IoC ");
  21. this.session.put("attribute", "session value servlet 不相关的 IoC ");
  22. this.application.put("attribute", "application value servlet 不相关的 IoC ");
  23. return SUCCESS;
  24. }
  25.  
  26. @Override
  27. public void setRequest(Map<String, Object> arg0) {
  28. // TODO Auto-generated method stub
  29. this.request = arg0;
  30. }
  31.  
  32. @Override
  33. public void setSession(Map<String, Object> arg0) {
  34. // TODO Auto-generated method stub
  35. this.session = arg0;
  36. }
  37.  
  38. @Override
  39. public void setApplication(Map<String, Object> arg0) {
  40. // TODO Auto-generated method stub
  41. this.application = arg0;
  42. }
  43. }

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

  1. package struts2.login;
  2.  
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpSession;
  6.  
  7. import org.apache.struts2.ServletActionContext;
  8.  
  9. import com.opensymphony.xwork2.ActionSupport;
  10.  
  11. public class Login3Action extends ActionSupport{
  12. private HttpServletRequest request;
  13. private HttpSession session;
  14. private ServletContext application;
  15.  
  16. @Override
  17. public String execute() throws Exception {
  18. // TODO Auto-generated method stub
  19. this.request = ServletActionContext.getRequest();
  20. this.session = this.request.getSession();
  21. this.application = ServletActionContext.getServletContext();
  22. this.request.setAttribute("attribute", "request value servlet 相关的非IoC ");
  23. this.session.setAttribute("attribute", "session value servlet 相关的非IoC ");
  24. this.application.setAttribute("attribute", "application value servlet 相关的 非IoC ");
  25. return SUCCESS;
  26. }
  27.  
  28. }

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

  1. package struts2.login;
  2.  
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpSession;
  6.  
  7. import org.apache.struts2.interceptor.ServletRequestAware;
  8. import org.apache.struts2.util.ServletContextAware;
  9.  
  10. import com.opensymphony.xwork2.ActionSupport;
  11.  
  12. public class Login4Action extends ActionSupport
  13. implements ServletRequestAware , ServletContextAware{
  14. private HttpServletRequest request;
  15. private HttpSession session;
  16. private ServletContext application;
  17.  
  18. @Override
  19. public String execute() throws Exception {
  20. // TODO Auto-generated method stub
  21. this.request.setAttribute("attribute", "request value servlet 相关的 IoC ");
  22. this.session = this.request.getSession();
  23. this.session.setAttribute("attribute", "session value servlet 相关的 IoC ");
  24. this.application.setAttribute("attribute", "application value servlet 相关的 IoC ");
  25. return SUCCESS;
  26. }
  27.  
  28. @Override
  29. public void setServletRequest(HttpServletRequest arg0) {
  30. // TODO Auto-generated method stub
  31. this.request = arg0;
  32. }
  33.  
  34. @Override
  35. public void setServletContext(ServletContext arg0) {
  36. // TODO Auto-generated method stub
  37. this.application = arg0;
  38. }
  39. }

在Struts2的Action中获得request response session几种方法的更多相关文章

  1. struts2的action中获得request response session 对象

    在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态 ...

  2. struts2在action中获取request、session、application,并传递数据

    假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...

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

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

  4. Struts2 的Action中取得请求参数值的几种方法

    先看GetRequestParameterAction类代码:  Java代码 public class GetRequestParameterAction extends ActionSupport ...

  5. 在Struts2的Action中取得请求参数值的几种方法

    先看GetRequestParameterAction类代码: public class GetRequestParameterAction extends ActionSupport { priva ...

  6. Struts2 在Action中获取request、session、servletContext的三种方法

    首页message.jsp: <body> ${requestScope.req }<br/> ${applicationScope.app }<br/> ${se ...

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

    Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...

  8. 在struts2的action中操作域对象(request、session)

    在struts2的Action中,操作域对象一共有三种方式: 1.ActionContext(与servelt API无关联): //相当于request ActionContext.getConte ...

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

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

随机推荐

  1. Ajax中post后台.net MVC中Controller的路径问题。

    今天使用ajax的post方法,去访问mvc的controller,url的传值是 "//ProductCatalog/PostShareInfo",发现无论如何都访问不到. 我实 ...

  2. 【Alpha】阶段第十次Scrum Meeting

    [Alpha]阶段第十次Scrum Meeting 工作情况 团队成员 今日已完成任务 明日待完成任务 刘峻辰 登出接口 编写后端说明文档 赵智源 编写脚本实现测试的持续集成 前测试点页面跳转逻辑测试 ...

  3. oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  4. C#窗体随机四则运算 (第四次作业)

    ---恢复内容开始--- 增量内容:1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况,保证是小学水平不出现负数,比如不能出现5-8=-3这种情况:2)用 ...

  5. Beta Scrum Day 2 — 听说

    听说

  6. 2017 Summary

    几门课 基础电路与电子学 知道了一些二极管三极管的基本基本很基本的那种物理知识吧,但是毕竟我是从电信转专业过来的,所以说我内心就是逃避模电这样的课的.上课基本没听,后面只是死命复习了一周,考的还可以. ...

  7. jquery ajax 跨域问题

    前言:关于跨域CORS 1.没有跨域时,ajax默认是带cookie的 2.跨域时,两种解决方案: 1)服务器端在filter中配置 详情:http://blog.csdn.net/wzl002/ar ...

  8. iOS- 什么是GitHub?关于它的自我介绍「初识 GitHub」

    1 前言 我一直认为 GitHub 是程序员必备技能,程序员应该没有不知道 GitHub 的才对,我当初接触 GitHub 也大概工作了一年多才开始学习使用,我读者里很多是初学者,而且还有很多是在校大 ...

  9. 前端基础(http协议相关篇)

    网络协议篇: 1.http请求过程 DNS解析——tcp三次握手——建立tcp连接后发起http请求——服务器响应http请求 ——浏览器得到资源——浏览器渲染 2.http报文 通用首部:可以出现在 ...

  10. ubuntu下安装lamp环境

    使用普通用户来安装lamp环境: 1.安装apache: sudo apt-get install apache2