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 ...
随机推荐
- 返回上一页 html A标记代码
<a class="sjad" href="#" onClick="javascript:history.back(-1);"> ...
- C语言错题集
1.输入两个int型数a.b,求a/b的商c,不必考虑b为0的情况,输出c(保留两位小数) include<stdio.h> int main() { int a,b; float c; ...
- There is no getter for xxx 或者 will not be managed by Spring 解决
今天使用mysql 的sql查询语句的时候(我是用的是ssm框架) 下面是我的查询语句,条件是根据business_id 和card_status 两个参数获取值 select * from tb_ ...
- requests+正则爬取猫眼电影前100
最近复习功课,日常码农生活. import requests from requests.exceptions import RequestException import re import jso ...
- Codeforces 873 简要题解
文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 题意: 一个人要做nnn件事,时间花费分别为a1,a2,...,an,a1≤a2≤a3≤...≤ana_1,a_2,...,a_n, ...
- USB设备类学习笔记
usb audio class 版本目前有3个版本 分别是1.0,2.0,3.0:1.0针对各个厂家的设备具有不同的描述符,而2.0则将它们统一简化,3.0则是最新的,还没有与2.0作进一步比较:因 ...
- 将Paul替换成Ringo
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- PIO学习
边沿捕获 PIO可以对输入进行边沿捕获,它可以捕获上升沿.下降沿和双沿,当检测到边沿时PIO会把它存在edgecapture 寄存器之内: 打开Synchronously capture 时,会生成一 ...
- 排序算法(sorting algorithm) 之 选择排序(selection sort)
https://en.wikipedia.org/wiki/Selection_sort loop1: 4,6,1,3,7 -> 4,6,1,3,7 4,6,1,3,7 -> ,3,7 1 ...
- python项目1:自动解压并删除压缩包
目的:实现压缩包的自动解压及删除. 思路:获取压缩包 > 解压 > 删除压缩包 代码实现:此处代码实现前提为.py文件和压缩包在同一文件夹 # 导入需要的包 import os impor ...