Action类访问servlet

Action类有三种方式servlet:

(1)间接的方式访问Servlet API  ---使用ActionContext对象

(2)  实现接口,访问Action时完成注入

(3)直接通过ServletActionContext获得Servlet的API

下面我来讲第一种:

  (1)间接的方式访问Servlet API  ---使用ActionContext对象

Struts2中提供了一个ActionContext类(当前Action的上下文对象),通过这个类可以访问Servlet API。下面是该类中提供的几个常用方法:

     1.public static ActionContext getContext() :获得当前Action的ActionContext实例。
     2.public Object get(Object key) :此方法类似于调用HttpServletRequest的getAttribute(String name)方法。
     3.public void put(Object key, Object value) :此方法类似于调用HttpServletRequest 的setAttribute(String name, Object o)。 
     4. public Map getParameters() :获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap() 方法。  
     5. public Map getSession() :返回一个Map对象,该Map对象模拟了HttpSession实例。 
     6. public void setSession(Map session) : 直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名-属性值对。 
     7. public Map getApplication() :返回一个Map对象,该对象模拟了该应用的ServletContext实例。 

8. public void setApplication(Map application) :直接传入一个Map实例,将该Map实例里

的key-value对转换成application的属性名- 属性值对。

  1. import java.util.Map
  2. import com.opensymphony.xwork2.ActionContext;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. public class LoginAction1 extends ActionSupport{
  5.  
  6. public String login() throws Exception{
  7. //获取ActionContext
  8. ActionContext actionContext =ActionContext.getContext();
  9. //1.获取表单的请求参数
  10. Map<String, Object> parameters=actionContext.getParameters();
  11. //因为用户名username可能有多个,所以返回数组
  12. String [] values =(String[]) parameters.get("username");
  13. System.out.println("用户名是:"+values[0]);
  14.  
  15. //2.存取request 的Attribute
  16. actionContext.put("company", "雨点的名字"); //相当于request.setAttribute("","");
  17. System.out.println(actionContext.get("company"));
  18.  
  19. //3.存取session 的Attribute
  20. Map<String, Object> sessionMap=actionContext.getSession();
  21. sessionMap.put("age", 11);//相当于session.setAttribute("","");
  22. System.out.println(sessionMap.get("age"));
  23.  
  24. //4.存取application的Attribute
  25. Map<String, Object> applicationMap=actionContext.getApplication();
  26. applicationMap.put("info", "下周考试第二阶段");
  27. System.out.println(applicationMap.get("info"));
  28. return SUCCESS;
  29. }
  30. }

 (2)  实现接口,访问Action时完成注入

如果是实现结构注入一般需要实现3个接口

(1)ServletContextAware:      实现此接口的Action可直接访问Web应用的ServletContext实例;

(2)ServletRequestAware: 实现此接口的Action可直接访问Web应用的HttpServletRequest实例;

(3)ServletResponseAware:   实现此接口的Action可直接访问Web应用的HttpServletResponset实例

  1. import java.util.Map;
  2.  
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.ServletResponse;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import org.apache.struts2.interceptor.RequestAware;
  8. import org.apache.struts2.interceptor.ServletRequestAware;
  9. import org.apache.struts2.interceptor.ServletResponseAware;
  10. import org.apache.struts2.util.ServletContextAware;
  11.  
  12. import com.opensymphony.xwork2.ActionContext;
  13. import com.opensymphony.xwork2.ActionSupport;
  14.  
  15. public class LoginAction2 extends ActionSupport implements ServletRequestAware,
  16. ServletContextAware,ServletResponseAware {
  17.  
  18. private HttpServletRequest request;
  19.  
  20. private ServletContext context;
  21.  
  22. private HttpServletResponse response;
  23.  
  24. public String login() throws Exception{
  25. //1.获取表单的请求参数
  26. System.out.println(request.getParameter("username"));
  27.  
  28. //2.存取request 的Attribute
  29. request.setAttribute("company","hzgg" );
  30.  
  31. //3.存取session 的Attribute
  32. request.getSession().setAttribute("age", 50);
  33.  
  34. //4.存取application的Attribute
  35. context.setAttribute("info", "今天下午你们可以出去玩");
  36.  
  37. return SUCCESS;
  38.  
  39. }
  40. //实现ServletRequestAware接口必须实现的方法
  41. public void setServletRequest(HttpServletRequest request) {
  42. this.request=request;
  43. }
  44. //实现ServletContextAware接口必须实现的方法
  45. public void setServletContext(ServletContext context) {
  46. this.context=context;
  47. }
  48. //实现ServletResponseAware接口必须实现的方法
  49. public void setServletResponse(HttpServletResponse response) {
  50. this.response=response;
  51. }
  52.  
  53. }

   (3)使用ServletActionContext工具类访问Servlet API

在ServletActionContext工具类中常用的几个方法(都是静态方法):

(1)PageContext getPageContext():          取得应用的PageContext对象;
(2)HttpServletRequest getRequest():       取得该应用的HttpServletRequest对象;
(3)HttpServletRequest getResponse():    取得该应用的HttpServletResponse对象;
(4)ServletContext getServletContext():   取得该应用的ServletContext对象。
  1. import org.apache.struts2.ServletActionContext;
  2. import com.opensymphony.xwork2.ActionSupport;
  3.  
  4. public class LoginAction3 extends ActionSupport {
  5.  
  6. public String login() throws Exception {
  7. // 1.获取表单的请求参数
  8. String username= ServletActionContext.getRequest().getParameter("username");
  9. System.out.println(username);
  10.  
  11. // 2.存取request 的Attribute
  12. ServletActionContext.getRequest().setAttribute("company", "haha");
  13.  
  14. // 3.存取session 的Attribute
  15. ServletActionContext.getRequest().getSession().setAttribute("age", 40);
  16.  
  17. // 4.存取application的Attribute
  18. ServletActionContext.getServletContext().setAttribute("info", "今天下课你们可以约会去了");
  19.  
  20. return SUCCESS;
  21. }
  22. }

下面我来写一个用第三种方法实现访问servlet,从jsp到struts.xml在到Action类,最后从页面显示结果供大家学习:

jsp界面:

start.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. </head>
  5. <body>
  6. <form action="${pageContext.request.contextPath }/hello.action">
  7. 姓名:<input type="text">
  8. <input type="submit" value="提交">
  9. </form>
  10. </body>
  11. </html>

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. <struts>
  6. <package name="default" extends="struts-default">
  7. <action name="hello" class="com.guigu.struts.action2.LoginAction3" method="login">
  8. <result>/result.jsp</result>
  9. </action>
  10. </package>
  11. </struts>
  1. result.jsp
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. </head>
  5. <body>
  6. <p>${company}</p>
  7. <p>${age}</p>
  8. <p>${info}</p>
  9. </body>
  10. </html>

  运行结果如下:

当点击提交的时候

发现数据已经从Action类中转发到了界面

这篇文章就讲到这里,欢迎大家指点和点评!

  

Struts2框架(4)---Action类访问servlet的更多相关文章

  1. Struts2框架之Action类的访问

    1. 通过<action>标签中的method属性,访问到Action中的具体的方法. * 传统的配置方式,配置更清晰更好理解!但是扩展需要修改配置文件等! * 具体的实例如下: * 页面 ...

  2. Struts2框架(3)---Action类的3种书写方式

    Action类的3种书写方式 本文主要写有关写Action类的3种书写方式: (1)第一种 Action可以是POJO (简单模型对象)  不需要继承任何父类 也不需要实现任何接口 (2)实现Acti ...

  3. Struts2系列笔记(4)---Ation类访问servlet

    Ation类访问servlet Ation类有三种方式servlet: (1)间接的方式访问Servlet API  ---使用ActionContext对象 (2)  实现接口,访问Action时完 ...

  4. Struts2中的Action类(解耦方式,耦合方式)

    一.解耦方式 特点:对web资源进行了封装,便于单元测试. 实现:ActionContext和接口方式 1.ActionContext 特点:Action执行的上下文对象.保存了执行Action所需要 ...

  5. Struts2 之 Action 类访问 WEB 资源

    接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...

  6. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性

    有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...

  7. Struts2框架里面action与前端jsp页面进行交互路径问题---》一个对话框里面有很多超链接,进行相应的跳转

    一个对话框里面有很多超链接,右边是点击超链接跳转到的相应页面(在一个页面上就相当于点击该超链接时候,就把该简短页面置顶):这个问题困扰我两天:还请大神给我解决,也没有解决,我仔细对比了相关路径,后面添 ...

  8. Struts2框架(5)---result结果集

    result结果集 上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集 在Struts.xml中的result元素指的是:指定动作类的动作方法执 ...

  9. struts2框架 转载 精华帖

    一.Struts2简介 参考<JavaEE 轻量级框架应用与开发—S2SH> Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Strut ...

随机推荐

  1. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  2. java中的值传递和引用传递有什么区别呀?

    值传递: (形式参数类型是基本数据类型和String):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参 ...

  3. Hibernate中的实体规则、对象状态和进阶-一级缓存

    一.hibernate中的实体规则 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 (1)代理主键 (2)自然主键 二.hibernate中的对象状态 1.对象分为三种状态 2.三种状态的转 ...

  4. gson的特殊用法

    1.gson包在处理 字符串转 Map 或者 List 的方法. List memberList = gson.fromJson(str,new TypeToken<List>() {}. ...

  5. shell脚本学习-文件包含

    跟着RUNOOB网站的教程学习的笔记 和其他语言一样,shell也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件.shell文件包含的语法有两种形式 . filename  # ...

  6. TopicsExtraction with NMF & LDA

    """ ================================================================================= ...

  7. nmap 介绍

    原文地址:http://drops.wooyun.org/tips/2002 原文地址:http://infotechbits.wordpress.com/2014/05/04/introductio ...

  8. 性能测试---CPU内存部分

    CPU内存的测试可以通过top命令来测试 ,如下是我写的bat脚本,其中的测试进程可以替换为你自己需要测试的进程. @echo offecho============================= ...

  9. Shell文本操作-5

  10. python基础自学 第一天

    python的概述 python的创始人:吉多·范罗苏姆 1991年,第一个python解释器诞生,用C语言实现,并能调用C语音的库文件 解释器(解释型语言和编 译型语言的区别) 把其他语言翻译成计算 ...