Struts2_006_Servlet API解耦的访问方式web资源
来源:互联网 发布:魅思cms视频系统 编辑:程序博客网 时间:2024/06/05 01:16
简介
- 为了避免与 Servlet API 耦合在一起, 方便 Action 做单元测试, Struts2 对 HttpServletRequest, HttpSession 和 ServletContext 进行了封装, 构造了 3 个 Map 对象来替代这 3 个对象, 在 Action 中可以直接使用 HttpServletRequest, HttpServletSession, ServletContext 对应的 Map 对象来保存和读取数据.
具体
- ActionContext 是 Action 执行的上下文对象, 在 ActionContext 中保存了 Action 执行所需要的所有对象, 包括 parameters, request, session, application 等.
- 获取 HttpSession 对应的 Map 对象:
- public Map getSession()
- 获取 ServletContext 对应的 Map 对象:
- public Map getApplication()
- 获取请求参数对应的 Map 对象:
- public Map getParameters()
- 获取 HttpServletRequest 对应的 Map 对象:
- public Object get(Object key): ActionContext 类中没有提供类似 getRequest() 这样的方法来获取 HttpServletRequest 对应的 Map 对象. 要得到 HttpServletRequest 对应的 Map 对象, 可以通过为 get() 方法传递 “request” 参数实现
测试代码
TestActionContext.java
package top.itcourse.action.context;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import java.util.Map;import com.opensymphony.xwork2.ActionContext;/** * Action类 * @author mac *//* * 通过 ActionContext 访问 Web 资源 * 1.ServletContext的属性设置: * 1.1.获取ActionContext对象:ActionContext.getContext() * 1.2.获取ServletContext对象的Attribute的Map:调用ActionContext对象的getApplication方法 * 1.3.通过Map设置属性:put(key,value) * 1.4.通过Map获取相应的属性:get(key) * * 2.Session类似。 * * 3.request: * 3.1.获取的时候是调用ActionContext对象的get("request")方法,并强转成Map * 3.2.其它类似 * * 4.请求参数 * 4.1.其它类似 * 4.2.调用ActionContext对象的getParameters方法 * 4.3.通过get方法获取参数数组(返回的是数组) * 4.4.不能写入请求参数 * * 说明: * 都没有直接得到相关的对象,都是通过封装后的方法,去操作的部分方法(属性等) */public class TestActionContext { public TestActionContext() { } /* * public class ActionContext extends Object implements Serializable: * ActionContext是执行的Action的上下文。每个上下文基本上是一个对象的容器,一个操作需要执行,如会话,参数,区域设置等。 * ActionContext是线程本地的,这意味着存储在ActionContext中的值在每个线程中是唯一的。 * 这样做的好处是,您不需要担心用户特定的操作上下文,您只需获取它: * ActionContext context = ActionContext.getContext(); * 最后,由于线程本地使用,您不需要担心使您的操作线程安全。 */ // action方法:ok public String save() { /* * public static ActionContext getContext(): * 返回特定于当前线程的ActionContext。 * 返回: * 当前线程的ActionContext永远不为null。 */ // 0.获取ActionContext对象 ActionContext actionContext = ActionContext.getContext(); /* * public Map < String,Object > getApplication(): * 在servlet环境或通用应用程序级别Map中返回ServletContext的Map。 * 返回: * 一个ServletContext或通用应用程序级的Map * 源码: * public Map<String, Object> getSession() { * return (Map<String, Object>)get(SESSION); * } */ // 1.获取application的Map,并向其中添加、获取属性 Map<String, Object> applicationMap = actionContext.getApplication(); // 获取内容,在jsp中通过application对象设置的 if (applicationMap.get("keyJSP") != null) { System.out.println("application: " + applicationMap.get("keyJSP")); //get方法,获取属性值 } //ServletContext中的get、set属性的方法,可以直接通过Map的get、put方法使用(没有办法) applicationMap.put("keyAction", "Action类中设置的我:" + new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA).format(new Date())); // 在index页面去获取出来 // 2.获取session的Map,并向其中添加、获取属性 Map<String, Object> sessionMap = actionContext.getSession(); if (applicationMap.get("keyJSP") != null) { System.out.println("session:" + sessionMap.get("keyJSP")); //get方法,获取属性值 } sessionMap.put("keyAction", "Action类中设置的我:" + new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA).format(new Date())); // 在index页面去获取出来 // 3.获取request的Map,并向其中添加、获取属性(注意,request这里要强制转换) Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request"); requestMap.put("keyAction", "Action类中设置的我:" + new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA).format(new Date())); // 在index页面去获取出来 // 4.获取请求参数对应的Map,并获取指定的参数值 Map<String, Object> parametersMap = actionContext.getParameters(); /* * public HttpParameters getParameters() * 在servlet环境中返回HttpServletRequest参数的映射,否则返回一般的Map参数。 * 返回: * 在Servlet环境中使用HttpServletRequest参数或多部分映射的映射,或者其他参数的通用Map。 */ // 这里get返回的都是一个String类型的数组 System.out.println("name: " + ((String[])parametersMap.get("name"))[1]); //只能读,不能写,但是写入不报错 return "ok"; }}
index.jsp
<%@page import="java.util.Locale"%><%@page import="java.text.SimpleDateFormat"%><%@page import="java.util.Date"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>2017</title> <!-- 导入jQuery文件 --> <script src="js/jquery-1.10.1.js" type="text/javascript" charset="utf-8"></script> <!-- script书写位置 --> <script type="text/javascript"> </script> </head> <body> <a href="access.action?name=Mushroom&name=test">测试一下</a> <br /><br /> <!-- application --> <c:if test="${applicationScope.keyAction != null }"> <c:out value="application: "></c:out> </c:if> <!-- 如果value不是null,那么就显示value的值,否则就显示标签体的内容(这里就是空) --> <!-- 结果:value (在Action类中通过application的Map设置的) --> <c:out value="${applicationScope.keyAction }"></c:out> <!-- 这里设置,在Action类中获取 --> <% if( application.getAttribute("keyJSP") == null ) { application.setAttribute("keyJSP", "jsp中设置的我:" + new SimpleDateFormat("yyyy年MM月dd日",Locale.CHINA).format(new Date())); } %> <br /><br /><br /> <!-- session --> <c:if test="${sessionScope.keyAction != null }"> <c:out value="session: "></c:out> </c:if> <c:out value="${sessionScope.keyAction }"></c:out> <!-- 这里设置,在Action类中获取 --> <% if( session.getAttribute("keyJSP") == null ) { session.setAttribute("keyJSP", "jsp中设置的我:" + new SimpleDateFormat("yyyy年MM月dd日",Locale.CHINA).format(new Date())); } %> <br /><br /><br /> <!-- request --> <c:if test="${requestScope.keyAction != null }"> <c:out value="request: "></c:out> </c:if> <c:out value="${requestScope.keyAction }"></c:out> <!-- 这里设置,在Action类中获取 --> <% if( request.getAttribute("keyJSP") == null ) { request.setAttribute("keyJSP", "jsp中设置的我:" + new SimpleDateFormat("yyyy年MM月dd日",Locale.CHINA).format(new Date())); } %> </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> <!-- 这是struts.xml文件的模板 --> <package name="default" extends="struts-default"> <action name="access" class="top.itcourse.action.context.TestActionContext" method="save"> <result name="ok">index.jsp</result> </action> </package> </struts>
效果
其它
- 源码下载
关注下方公众号,回复:Servlet API解耦的访问方式web资源.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top
阅读全文
0 0
- Struts2_006_Servlet API解耦的访问方式web资源
- Struts2_007_Servlet API解耦的访问方式web资源之Aware
- Struts2两种解耦访问WEB资源的方式
- 访问当前web应用资源的方式
- Action访问web资源的方式
- Servlet 访问WEB资源的方式
- Servlet API解耦的访问方式
- 访问Servlet API,访问web资源
- struts2学习笔记(六) Action访问web资源的方式
- Struts2获取Web容器资源的方式 访问request,session
- 访问web-inf下jsp资源的几种方式
- Structs2通过耦合的方式访问WEB资源
- Struts中访问Servlet对象的方式(与Servlet API解耦的访问方式)
- ActionContext类-与Servlet API解耦的访问方式
- Struts与Servlet API解耦的访问方式
- Struts2通过ActionContext解耦的方式获取WEB资源
- Web资源的工作方式
- WCF 的 Web 访问方式
- CorelDRAW弄什么封面都是很简单的事呢
- Eclipse/MyEclipse安装配置Ivy
- 基数树(radix tree)
- Java对象池技术的原理及其实现
- 扎心i++与--i
- Struts2_006_Servlet API解耦的访问方式web资源
- 洛谷10月月赛R2·浴谷八连测R3 -Chtholly-
- BeanShell
- 进程间通讯:消息队列
- windows激活原理
- caffe的matlab、python接口配置
- echarts后台与前台json数据交互问题
- 如何调试处于D状态的进程
- MyBatis config和mapper代码提示