一、源码:

struts.xml文件:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5.  
  6. <struts>
  7. <constant name="struts.action.extension" value="action,do," />
  8. <constant name="struts.devMode" value="true" />
  9. <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  10.  
  11. <package name="default" namespace="/" extends="struts-default">
  12. <default-action-ref name="default" />
  13.  
  14. <action name="test1" class="org.Test.action.TestAction1"
  15. method="test">
  16. <result>/success.jsp</result>
  17. </action>
  18.  
  19. <action name="test2" class="org.Test.action.TestAction2"
  20. method="test">
  21. <result>/success.jsp</result>
  22. </action>
  23.  
  24. <action name="test3" class="org.Test.action.TestAction3"
  25. method="test">
  26. <result>/success.jsp</result>
  27. </action>
  28.  
  29. <action name="test4" class="org.Test.action.TestAction4"
  30. method="test">
  31. <result>/success.jsp</result>
  32. </action>
  33.  
  34. <action name="default">
  35. <result>/index.jsp</result>
  36. </action>
  37. </package>
  38. </struts>

success.jsp页面:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>成功</title>
  8.  
  9. <meta http-equiv="pragma" content="no-cache">
  10. <meta http-equiv="cache-control" content="no-cache">
  11. <meta http-equiv="expires" content="0">
  12. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  13. <meta http-equiv="description" content="This is my page">
  14.  
  15. </head>
  16.  
  17. <body>
  18. ${requestScope.name}
  19. ${sessionScope.name}
  20. ${applicationScope.name}
  21. <br>
  22. </body>
  23. </html>

方法一:通过ServletActionContext来訪问

TestAction3.java文件:

  1. package org.Test.action;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.Map;
  6.  
  7. import javax.servlet.ServletContext;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import javax.servlet.http.HttpSession;
  11.  
  12. import org.apache.struts2.ServletActionContext;
  13. import org.apache.struts2.interceptor.ApplicationAware;
  14. import org.apache.struts2.interceptor.RequestAware;
  15. import org.apache.struts2.interceptor.SessionAware;
  16.  
  17. import com.opensymphony.xwork2.ActionSupport;
  18.  
  19. public class TestAction3 extends ActionSupport {
  20. private HttpServletRequest request;
  21. private HttpServletResponse response;
  22. private HttpSession session;
  23. private ServletContext application;
  24.  
  25. public TestAction3(){ //构造函数内获取四个对象
  26. this.request = ServletActionContext.getRequest();
  27. this.response = ServletActionContext.getResponse();
  28. this.session = this.request.getSession();
  29. this.application = ServletActionContext.getServletContext();
  30. }
  31.  
  32. public String test() throws IOException {
  33. System.out.println("TestAction3:test");
  34. this.request.setAttribute("name", "Jack");
  35. this.session.setAttribute("name", "Rose");
  36. this.application.setAttribute("name", "Dean");
  37.  
  38. return SUCCESS;
  39. }
  40.  
  41. }

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzUzOTM0Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

说明:

1.TestAction3的

类中:定义真实类型的request,response,session,application对象

构造方法中:通过ServletActionContext获取request,response和application。session可由request.getSession();得到

test()方法中:用setAttribute方法设置属性

2.success.jsp:通过EL语言查看request,session,application对象的name属性的值

方法二:IOC(控制反转),通过实现接口ServletRequestAware,ServletResponseAware, ServletContextAware来訪问

TestAction4.java文件:

  1. package org.Test.action;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.Map;
  6.  
  7. import javax.servlet.ServletContext;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import javax.servlet.http.HttpSession;
  11.  
  12. import org.apache.struts2.ServletActionContext;
  13. import org.apache.struts2.interceptor.ApplicationAware;
  14. import org.apache.struts2.interceptor.RequestAware;
  15. import org.apache.struts2.interceptor.ServletRequestAware;
  16. import org.apache.struts2.interceptor.ServletResponseAware;
  17. import org.apache.struts2.interceptor.SessionAware;
  18. import org.apache.struts2.util.ServletContextAware;
  19.  
  20. import com.opensymphony.xwork2.ActionSupport;
  21.  
  22. public class TestAction4 extends ActionSupport implements ServletRequestAware,
  23. ServletResponseAware, ServletContextAware {
  24. private HttpServletRequest request;
  25. private HttpServletResponse response;
  26. private HttpSession session;
  27. private ServletContext application;
  28.  
  29. @Override
  30. public void setServletResponse(HttpServletResponse response) { //实现接口的set方法。初始化response
  31. this.response = response;
  32. }
  33.  
  34. @Override
  35. public void setServletRequest(HttpServletRequest request) {
  36. this.request = request;
  37. }
  38.  
  39. @Override
  40. public void setServletContext(ServletContext application) {
  41. this.application = application;
  42. }
  43.  
  44. public String test() throws IOException {
  45. this.session = this.request.getSession();
  46.  
  47. System.out.println("TestAction4:test");
  48. this.request.setAttribute("name", "学渣");
  49. this.session.setAttribute("name", "学霸");
  50. this.application.setAttribute("name", "学神");
  51.  
  52. return SUCCESS;
  53. }
  54.  
  55. }

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzUzOTM0Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

说明:

1.通过实现接口的set方法来实例化request,response,application对象。而TestAction4本身并没有对三个对象进行实例化。session由request.getSession();进行实例化。

struts2学习笔记(3)---Action中訪问ServletAPI获取真实类型的Servlet元素的更多相关文章

  1. struts2学习笔记(2)---Action中訪问ServletAPI获取Map类型的Servlet元素

    源码: strust.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  2. struts2学习笔记之八:Action中方法的动态调用

    方法一:action名称+!+方法名称+后缀 Action类中增加addUser()和delUser()方法, package com.djoker.struts2; import org.apach ...

  3. 在struts2中訪问servletAPI

    在struts2中訪问servletAPI,通俗点也就是使用servlet中的两个对象request对象和response对象. 前几天看到一个CRM项目的源代码,里面使用request对象和resp ...

  4. Struts2学习笔记(六)——Action处理请求参数

    在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...

  5. Struts2学习笔记(三)——Action详解

    Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的. 1.Action的创建方式 1) POJO类(PlainOldJavaObjects简单 ...

  6. Struts2学习笔记(五)——Action访问Servlet API

    在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1 ...

  7. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  8. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  9. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

随机推荐

  1. Windows Server 2008 R2下将nginx安装成windows系统服务

    一直在Linux平台上部署web服务,但是最近的一个项目,必须要用windows,不得已再次研究了nginx在windows下的表现,因为Apache httpd在Windows下表现其实也不算太好, ...

  2. cookie、sessionStorage、localStorage 详解

    转自--http://www.cnblogs.com/fly_dragon/p/3946012.html cookie Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的 ...

  3. 理解JavaScript中BOM和DOM的关系

    JavaScript 有三部分构成,ECMAScript,DOM和BOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,IE和其他的浏览器风格迥异.对象是JavaScript最重要的API,包含 ...

  4. linux 定时任务 crontab 详细解释(转)

    cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务:  引用:  /sbin/service crond start //启动服务  /sbin/service cr ...

  5. 深入理解 Java中的 流 (Stream)

    首先,流是什么? 流是个抽象的概念.是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备能够是文件,网络,内存等. 流具有方向性,至于是输入 ...

  6. TIF、JPG图片手动添加地理坐标的方法

    题目:为TIF.JPG图片添加地理坐标/平面直角坐标. 图片来源:GOOGLE EARTH.(当然也可以是其他知道四角点坐标的图片) 截图工具:GEtscreen(此软件截图时可以自动生成图片四角点坐 ...

  7. StringUtils类常用方法介绍

    StringUtils方法包的位置:org.apache.commons.lang.StringUtils StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 ...

  8. Android之判断当前网络状态

    /** * 检测网络是否可用 * @return */ public boolean isNetworkConnected() { ConnectivityManager cm = (Connecti ...

  9. Android之LogUtil

    提供debug与release的时候是否屏蔽打印信息,把信息选择性的进行保存,可以是否自动保存crash的堆栈信息.来自github上的一个开源项目,https://github.com/syxc/L ...

  10. 基于libhid/libusb进行开发

    操作环境:ubuntu,基于libhid/libusb进行开发   libusb介绍: libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源 ...