Struts2框架(4)---Action类访问servlet
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的更多相关文章
- Struts2框架之Action类的访问
1. 通过<action>标签中的method属性,访问到Action中的具体的方法. * 传统的配置方式,配置更清晰更好理解!但是扩展需要修改配置文件等! * 具体的实例如下: * 页面 ...
- Struts2框架(3)---Action类的3种书写方式
Action类的3种书写方式 本文主要写有关写Action类的3种书写方式: (1)第一种 Action可以是POJO (简单模型对象) 不需要继承任何父类 也不需要实现任何接口 (2)实现Acti ...
- Struts2系列笔记(4)---Ation类访问servlet
Ation类访问servlet Ation类有三种方式servlet: (1)间接的方式访问Servlet API ---使用ActionContext对象 (2) 实现接口,访问Action时完 ...
- Struts2中的Action类(解耦方式,耦合方式)
一.解耦方式 特点:对web资源进行了封装,便于单元测试. 实现:ActionContext和接口方式 1.ActionContext 特点:Action执行的上下文对象.保存了执行Action所需要 ...
- Struts2 之 Action 类访问 WEB 资源
接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...
- struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...
- Struts2框架里面action与前端jsp页面进行交互路径问题---》一个对话框里面有很多超链接,进行相应的跳转
一个对话框里面有很多超链接,右边是点击超链接跳转到的相应页面(在一个页面上就相当于点击该超链接时候,就把该简短页面置顶):这个问题困扰我两天:还请大神给我解决,也没有解决,我仔细对比了相关路径,后面添 ...
- Struts2框架(5)---result结果集
result结果集 上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集 在Struts.xml中的result元素指的是:指定动作类的动作方法执 ...
- struts2框架 转载 精华帖
一.Struts2简介 参考<JavaEE 轻量级框架应用与开发—S2SH> Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Strut ...
随机推荐
- mysql触发器trigger 实例详解
mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html) MySQL好像从5.0.2版本就开始支持触发器的功能 ...
- java中的值传递和引用传递有什么区别呀?
值传递: (形式参数类型是基本数据类型和String):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参 ...
- Hibernate中的实体规则、对象状态和进阶-一级缓存
一.hibernate中的实体规则 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 (1)代理主键 (2)自然主键 二.hibernate中的对象状态 1.对象分为三种状态 2.三种状态的转 ...
- gson的特殊用法
1.gson包在处理 字符串转 Map 或者 List 的方法. List memberList = gson.fromJson(str,new TypeToken<List>() {}. ...
- shell脚本学习-文件包含
跟着RUNOOB网站的教程学习的笔记 和其他语言一样,shell也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件.shell文件包含的语法有两种形式 . filename # ...
- TopicsExtraction with NMF & LDA
""" ================================================================================= ...
- nmap 介绍
原文地址:http://drops.wooyun.org/tips/2002 原文地址:http://infotechbits.wordpress.com/2014/05/04/introductio ...
- 性能测试---CPU内存部分
CPU内存的测试可以通过top命令来测试 ,如下是我写的bat脚本,其中的测试进程可以替换为你自己需要测试的进程. @echo offecho============================= ...
- Shell文本操作-5
- python基础自学 第一天
python的概述 python的创始人:吉多·范罗苏姆 1991年,第一个python解释器诞生,用C语言实现,并能调用C语音的库文件 解释器(解释型语言和编 译型语言的区别) 把其他语言翻译成计算 ...