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. javascript之日期对象

    学习要点: 日期对象 将日期对象转换为字符串 将日期对象中的日期和时间转换为字符串 日期对象中的日期 日期对象中的时间 设置日期对象中的日期 设置日期对象中的时间 与毫秒相关的方法 一.日期对象 在j ...

  2. mongodb 3.x connect with credential

    package mongoDb; import java.net.UnknownHostException; import java.util.ArrayList; import java.util. ...

  3. 【解决】System.Web.Http.Description 缺失

    一.问题描述 使用visual studio 2013创建mvc4 api模板,然后build,run,broken,出错如下: Error 1 The type or namespace name ...

  4. bzoj2120: 数颜色 &&bzoj2453: 维护队列

    题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...

  5. bzoj1113

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1113 题解:单调栈 代码: #include<iostream> #includ ...

  6. UVa 10602 - Editor Nottoobad

    题目大意:有一个编辑器,它有两种命令,“重复上一个单词” 和 “删除前一个字母”,给出一系列字符串,求最少的敲击键盘的次数. 题目中强调第一个敲的单词必须是给的第一个单词,于是就考虑按照单词与第一个单 ...

  7. ksoap2- webservice

    1.概述 对于J2ME访问远端的Web Service,除了官方标准JSR 172,我们还有两种选择: l         kSOAP l         Wingfoot Wingfoot是由Win ...

  8. IOS 动画的两种方式

    方式一: [UIView animateWithDuration:1 animations:^{ //动画的内容 CGRect frame = CGRectMake([UIParam widthScr ...

  9. NGINX location 配置

    location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location. = 进 ...

  10. 几个获取Windows系统信息的Delphi程序

    1.获取windows版本信息 可以通过Windows API函数GetVersionEx来获得. 具体程序如下: Procedure Tform1.Button1Click(sender:TObje ...