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的属性名- 属性值对。

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

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

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

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

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

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

 import java.util.Map;

 import javax.servlet.ServletContext;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction2 extends ActionSupport implements ServletRequestAware,
ServletContextAware,ServletResponseAware { private HttpServletRequest request; private ServletContext context; private HttpServletResponse response; public String login() throws Exception{
//1.获取表单的请求参数
System.out.println(request.getParameter("username")); //2.存取request 的Attribute
request.setAttribute("company","hzgg" ); //3.存取session 的Attribute
request.getSession().setAttribute("age", 50); //4.存取application的Attribute
context.setAttribute("info", "今天下午你们可以出去玩"); return SUCCESS; }
//实现ServletRequestAware接口必须实现的方法
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
//实现ServletContextAware接口必须实现的方法
public void setServletContext(ServletContext context) {
this.context=context;
}
//实现ServletResponseAware接口必须实现的方法
public void setServletResponse(HttpServletResponse response) {
this.response=response;
} }

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

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

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

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

jsp界面:

start.jsp

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

struts.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="hello" class="com.guigu.struts.action2.LoginAction3" method="login">
<result>/result.jsp</result>
</action>
</package>
</struts>
result.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<p>${company}</p>
<p>${age}</p>
<p>${info}</p>
</body>
</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. VS 在创建C#类时添加文件描述

    在新建一个C#类时,为了描述该类的功能.以及文件建立的相关信息,并保护自己的版权要在文件的开头添加一些信息.如下: /***************************************** ...

  2. 一些简单的ajax的特点,方法、属性。以及ajax的创建 请求

    1.ajax的特点,基本原理,属性. ajax:页面的局部刷新 Asynchronous JavaScript And Xml JavaScript:更新局部的页面 XML:一般用于请求数据和响应数据 ...

  3. py3.0第四天 函数,生成器迭代器等

    1.列表生成式,迭代器&生成器 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 > ...

  4. 扁平化promise调用链(译)

    这是对Flattened Promise Chains的翻译,水平有限请见谅^ ^. Promises对于解决复杂异步请求与响应问题堪称伟大.AngularJS提供了$q和$http来实现它:还有很多 ...

  5. Automated generation of test oracles using a model-driven approach

    一.基本信息 标题:Automated generation of test oracles using a model-driven approach 时间:2013 出版源:Information ...

  6. 基于面向方面和UML的实时系统建模研究

    一.基本信息 标题:基于面向方面和UML的实时系统建模研究 时间:2010 出版源:计算机技术与发展 领域分类:面向方向:实时系统:横切关注点:统一建模语言: 二.研究背景 问题定义:实时系统建模研究 ...

  7. C++代码审查---审查孙晓宁马踏棋盘谜题程序

    与孙晓宁同学结对审查,其代码地址如下:https://github.com/brunnhilder/-1/blob/master/%E9%A9%AC%E8%B8%8F%E6%A3%8B%E7%9B%9 ...

  8. Debian 9.x "stretch" 安装 vnStat 统计服务器流量

    vnStat 是一款开源的 Linux 下统计网卡流量的软件,可以很方便地查看当前.当天.当月的流量统计报告,下面我们介绍下在 Debian 9.x 下安装 vnstat 的简单方法 首先,使用 ip ...

  9. FPGA跨时钟域握手信号的结构

    FPGA跨时钟数据传输,是我们经常遇到的问题的,下面给出一种跨时钟握手操作的电路结构.先上图 先对与其他人的结构,这个结构最大的特点是使用 req 从低到高或者高到低的变化 来表示DIN数据有效并开始 ...

  10. Java基础知识提要

    1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等   2. 简单写出Java特 ...