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)---Ation类访问servlet的更多相关文章

  1. struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装

    一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...

  2. Struts2框架(4)---Action类访问servlet

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

  3. struts2系列笔记(1)

    struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...

  4. Struts2系列笔记(2)---Struts.XML

    Struts2.xml 本篇博客主要讲Struts2.xml中package下的标签和标签属性,主要分以下四个部分说明: (1)action的配置基本属性 (2)同一个Action类中不同方法满足不同 ...

  5. Struts2系列笔记(7)---Struts2类型转换

    Struts2类型转换      struts2中内置了大量的类型转换器用来完成数据类型转换的问题,这篇随笔主要通过两个方面来写Struts类型转换 1:Struts2内置的类型转换器 2:如何自定义 ...

  6. struts2学习笔记 day02 获取参数 访问ServletAPI 结果类型

  7. Struts2.0笔记二

    Mvc与servlet 1.1   Servlet的优点 1.  是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的.所以掌握servle ...

  8. Struts2学习笔记三 访问servlet

    结果跳转方式 转发 <!-- 转发 --> <action name="Demo1Action" class="cn.itheima.a_result. ...

  9. Struts2访问Servlet API的几种方式

    struts2提供了三种方式访问servlet API:大致分为两类 1. ActionContext:  public static ActionContext getContext() :获得当前 ...

随机推荐

  1. HDU 3903 Trigonometric Function

    这题真难,并不会推理... #include<cstdio> #include<cstring> #include<cmath> #include<algor ...

  2. iOS开发使用MJRefresh进行刷新

    1.将MJRefresh下载后,拖进项目 MJRefresh地址: https://github.com/CoderMJLee/MJRefresh 2.添加头文件 #import "MJRe ...

  3. SQL SERVER 2000 数据恢复(分离数据库+附加数据库)

    一.分离数据库     SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上.分离数据库将从SQL Server 删除数据库,所以当点击“分离数据 ...

  4. UVa 706 & ZOJ 1146 LC-Display

    题目大意:给你一个数字n和字体大小s,输出数字的液晶显示.直接模拟,代码如下: #include <stdio.h> void draw(int n,int s,int row) { in ...

  5. iOS 错误及解决汇总

    1. iOS 错误 之 http请求 2. iOS 错误 之 Unexpected interface name 'HomeListCell': expected expression 3. iOS ...

  6. OC-Objection 学习笔记之一:简单的开始

    Objection 统一管理对象的引用问题,我想这就是这种技术的意义吧. 废话不说,咱们直接上步骤吧: 1:协议 我们的意识里要知道,一切围绕协议来进行. 下面的协议是一个视图的协议,该协议简单到不能 ...

  7. 1.4.2.4. SAVING(Core Data 应用程序实践指南)

    现在,要添加一个保存修改的方法.其实很简单,就是调用持久化存储协调器的save方法. - (void)saveContext { ) { NSLog(@"Running %@ '%@'&qu ...

  8. 【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

    HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expo ...

  9. Oracle11G 在线重定义

    create tablespace tbs1 datafile '/opt/oracle/oradata/haier/tbs1.dbf' size 500m autoextend on maxsize ...

  10. c#中struct和class的区别

    1.struct 是值类型,class是对象类型 2.struct 不能被继承,class可以被继承 3.struct 默认的访问权限是public,而class默认的访问权限是private. 4. ...