在Struts2框架中使用Servlet的API
1. 在Action类中也可以获取到Servlet一些常用的API
* 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上。
* 提供JSP注册的页面,演示下面这三种方式
<h3>注册页面</h3>
<form action="${ pageContext.request.contextPath }/xxx.action" method="post">
姓名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" value="注册" />
</form> 2. 完全解耦合的方式(完全不需要Servlet的api)(使用的核心类为:ActionContext类)
* 如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API
* 一些常用的方法如下 * static ActionContext getContext() -- 获取ActionContext对象实例
(ActionContext是上下文,也就是明星和经纪人的关系,action相当于明星,什么都不用准备,而actionContext就相当于经纪人(上下文),经纪人去拿action需要的东西。)
* java.util.Map<java.lang.String,java.lang.Object> getParameters() -- 获取请求参数,相当于request.getParameterMap();
* java.util.Map<java.lang.String,java.lang.Object> getSession() -- 获取的代表session域的Map集合,就相当于操作session域。
* java.util.Map<java.lang.String,java.lang.Object> getApplication() -- 获取代表application域的Map集合
* void put(java.lang.String key, java.lang.Object value) -- 注意:向request域中存入值。(直接使用put是向request域中存放数据)
例:
1.创建一个Action(demo1Action),内容如下:
import java.util.Arrays;
import java.util.Map;
import java.util.Set; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; /*
* 完全解耦合方式,使用servlet的api
*/
public class demo1Action extends ActionSupport{
@Override
public String execute() throws Exception {
//完全解耦合方式
ActionContext context=ActionContext.getContext();
//封装所有参数到一个map集合中
Map<String, Object> map=context.getParameters();
//再写一个表单来获取参数表单为index.jsp //遍历获取数据
Set<String> keys=map.keySet();
for(String key:keys){
//因为从一个标签中获得的值不止一个,如爱好可能有多个,所以这里我们使用数组
String[] values=(String[]) map.get(key);
//姓名和密码只有一个,所以这里我们又强转为了字符串
System.out.println(key+"..."+Arrays.toString(values));
}
//如果向request对象中存入值
context.put("msg", "jack");//向request域中存放数据 request只有在请求转发时才有效
context.getSession().put("msg", "rose");//向session中存放数据。通过getSession获得Session域对象
context.getApplication().put("msg", "tom");//向应用域中存放数据。通过getAppication获得整个应用 return SUCCESS;
}
}
2.再写一个表单来获取参数表单为index.jsp,将获取到的数据存储到map集合中:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h3>完全解耦合的方式使用servlet的api</h3>
<form action="${ pageContext.request.contextPath }/demo1Action.action" method="post">
姓名<input type="text" name="username"/><br/>
密码<input type="text" name="password"/><br/>
<input type="submit" value="登录"> </form>
</body>
</html>
3.最后demo1Action返回值为SUCCESS,跳转到suc界面,所以书写suc.jsp文件,suc.jsp文件中的内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body> 使用el表达式获取值<br/>
${requestScope.msg}<br/>
${sessionScope.msg}<br/>
${applicationScope.msg}<br/> </body>
</html>
4.为了访问Action,需要对其进行配置,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" namespace="/" extends="struts-default"> <action name="demo1Action" class="com.huida.action.demo1Action">
<result name="success">/suc.jsp</result><!-- 从demo1Action中跳转到suc.jsp页面,默认的方式为请求转发的方式。如果在result标签中设定转发类型为重定向redirect,那么在request域中就不能通过put获取到值 -->
</action>
</package> </struts>
运行index.jsp后,在浏览器中的表单中输入姓名以及密码,然后点击提交。
在控制台输出如下内容,说明通过ActionContext的getparameters已经获取到表单中的数据:
同时浏览器跳转到suc.jsp页面中,浏览器显示内容如下,说明request域、session域、应用域已经获得了在action中放的数据:

通过配置文件我们可以看到,直接从action跳转到suc.jsp页面中,然后获得request域中的内容。而request只存在于请求转发过程中,所以从demo1Action中 跳转到suc.jsp页面,默认的方式为请求转发方式。如果在result标签中设定转发类型为重定向redirect,那么在request域中就不能通过put获取到值。
3. 使用原生Servlet的API的方式(通过ServletActionContext得到request)(核心类为ServletActionContext类)
* Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法
* 具体的方法如下
* getPageContext()
* getRequest()
* getResponse()
* getServletContext()
在Struts2框架中使用Servlet的API的更多相关文章
- Struts2框架中使用Servlet的API示例
1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...
- struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...
- 5.Struts2框架中的ServletAPI如何获取
1.完全解耦合的方式 如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API 一些常用的方法如下 * static A ...
- 请求在Struts2框架中的处理步骤
上图来源于Struts2官方站点,是Struts 2 的整体结构. 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 ...
- 一个请求在Struts2框架中的处理流程
1.客户端向Servlet容器发起一个请求,将请求封装为HttpServletRequest对象. 2.HttpServletRequest首先经过web.xml中配置的struts2的过滤器,以及s ...
- Android已有的原生Camera框架中加入自己的API的实现方案。
版权声明:本文为CSDN博主(天才2012)原创文章.未经博主同意不得转载. https://blog.csdn.net/gzzaigcn/article/details/25707389 在 ...
- 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)
1. Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值 2. 具体在Struts2中怎么使用呢?如下步骤 * 需要先引入Struts2的标签库(在JSP页面的最上面位置) > ...
- 关于用struts2框架中iframe对应的jsp页面的不到action的值的问题
我们做web项目经常会用到frameset.frame以及iframe,这大大方便了我们页面的构建以及模块功能的划分.但是,再使用这些技术的同时也会遇到各种各样的问题,其中一个就是子页面中得不到str ...
- 一个请求在Struts2框架中的处理的步骤
随机推荐
- 一个未完成的2.6.32-220内核踩内存crash分析记录
遇到一个crash,log如下: BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<ffffffff81 ...
- jQuery 知识体系
jQuery基础知识一 jQuery之知识二-选择器 [jQuery知识]jQuery之知识三-过滤器 [jQuery知识]jQuery之知识四-DOM和CSS操作 [jQuery知识]jQuery之 ...
- 混合app开发,h5页面调用ios原生APP的接口
混合APP开发中,前端开发H5页面,不免会把兼容性拉进来,在做页面的兼容性同事,会与原生app产生一些数据交互: 混合APP开发,安卓的兼容性倒是好说,安卓使用是chrome浏览器核心,已经很好兼容H ...
- Github好桑心,慢慢来吧,等待中
等了大半天还是没办法注册,在线求助...
- VIM+ctags+cscope
VIM+ctags+cscope用法: http://blog.csdn.net/hnllei/article/details/7407124 http://blog.csdn.net/luckywa ...
- React开发调试工具--react-developer-tools
1. 首先,下载react-developer-tools开发调试工具插件. 因为谷歌插件下载需要FQ,这里提供一个本地资源:https://www.crx4chrome.com/crx/3068/ ...
- Python+Appium自动化环境搭建
appium工作原理 appium 在android端工作流 client端也就是我们 test script是我们的webdriver测试脚本. 中间是起的Appium的服务,Appium在服务端起 ...
- 数据持久化PlayerPrefs
1.Unity3D中的数据持久化是以键值对的形式存储的,可以看作是一个字典 2.Unity3D中的值是通过键名来读取的,当值不存在时,返回默认值 3.在Unity中只支持int.float.strin ...
- Java拦截器+注解搭配使用
拦截器加注解可以实现登录权限验证等操作,我的应用场景也是为了验证这个,下面是简单的实现步骤 一.什么是拦截器? 拦截器是对action的一种拦截,可以在请求前后进行一些处理 可拦截controll ...
- 二、Blender/Python API总览
原文:https://docs.blender.org/api/blender_python_api_current/info_overview.html Python in Blender Ble ...