一、源码:

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. Three.js 类的粗略总结和实现

    类 1.Cameras 照相机,包括很多种类型的摄像机类,包括正交类型和投影类型的摄像机 2.Core 核心对象 3.Lights 光照,包括点光,环境光,镜面光等等 4.Loaders 专门用来加载 ...

  2. MySQL的五种日期和时间类型

          MySQl中有多种表示日期和时间的数据类型.其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践.它们的对比如下:YEAR ,字节数 ...

  3. Codeforces Round #354 (Div. 2) C. Vasya and String 二分

    C. Vasya and String 题目连接: http://www.codeforces.com/contest/676/problem/C Description High school st ...

  4. 移动端适配之REM

    随着手机等移动设备的普及,移动端带来的流量已经不可忽视,一个网站不只是只有pc的页面就足够了,移动端的适配已经势在必行.但是移动设备种类繁多,屏幕尺寸也千奇百怪,能不能找到一种方式可以适配所有的手机屏 ...

  5. Jmeter学习之— 参数化、关联、断言、数据库的操作

    一. Jmeter参数化1. 文件参数化解释:创建测试数据,将数据写入TXT文件文件中,然后Jmeter从文件中读取数据.例如用户注册操作:1. 首先在Jmeter下创建一个线程组,如下图: 2. 然 ...

  6. 伟大的通信使者——JSON(JavaScript版本)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表 ...

  7. AES advanced encryption standard 2

    /* * FIPS-197 compliant AES implementation * * Copyright (C) 2006-2007 Christophe Devine * * Redistr ...

  8. 《Unix内核源码剖析》

    <Unix内核源码剖析> 基本信息 作者: (日)青柳隆宏 译者: 殷中翔 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115345219 上架时间:2014-2 ...

  9. 微软企业库Unity学习笔记

    本文主要介绍: 关于Unity container配置,注册映射关系.类型,单实例.已存在对象和指出一些container的基本配置,这只是我关于Unity的学习心得和笔记,希望能够大家多交流相互学习 ...

  10. MAC 10.10 开机登录无敌风火轮问题解决方式

    查明是第三方输入法引起的问题,我用的是搜狗输入法.所以把搜狗卸载就好了.(注意是卸载,不是单纯的从输入源里移除) 操作的思路是,首先要进入计算机,才干进行操作. 办法是开机进入单机模式,删除苹果一个文 ...