structs2如何获取web资源
来源:互联网 发布:张亮中餐厅知乎 编辑:程序博客网 时间:2024/05/16 02:20
什么是web资源?
web资源指的是HttpServletRequest、HttpSession、ServletContext等原生的Servlet API。
如何访问web资源
- 和Servlet API解耦的方式:只能访问到有限的Servlet API对象,且只能访问其有限的方法。
- 通过ActionContext方法
- 实现XxxAware接口
- 和Servlet API耦合的方式:可以访问更多的Servlet API对象,且能访问其原声的方法。
- 通过ServletActionContext方法
- 实现ServletXxxAware 接口
通过ActionContext访问web资源
下面举的例子是以ActionContextest为Action类,input.jsp为显示页面,访问URL为: ".../input?otherParam=otherParamValue"
ActionContextest代码示例
package com.actiontest;import java.util.Map;import com.opensymphony.xwork2.ActionContext;public class ActionContextest { public ActionContextest() { } public String execute(){ ActionContext actionContext = ActionContext.getContext(); /* * 通过getApplication方法获取Application对象的Map对象。 */ Map<String, Object> applicationMap = actionContext.getApplication(); /* * 通过put方法可以向application域中传入参数 */ applicationMap.put("name", "icebear"); /* * 通过get方法可以获取参数 */ String name = (String)applicationMap.get("name"); System.out.println("name:" + name); /* * 通过getSession方法获取Session对象的Map对象。 */ Map<String, Object> sessionMap = actionContext.getSession(); /* * 通过put方法可以向session域中传入参数 */ sessionMap.put("age", 11); /* * 通过get方法可以获取参数 */ int age = (Integer)sessionMap.get("age"); System.out.println("age:" + age); /* * request的Map对象直接通过get方法传递request参数获取。 */ @SuppressWarnings("unchecked") Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request"); /* * 通过put方法传递参数 */ requestMap.put("sex", "male"); /* * 通过get方法获取参数 */ String sex = (String)requestMap.get("sex"); System.out.println("sex:" + sex); /* * parameter的Map对象通过getParameters方法获取 。 */ Map<String, Object> paramsMap = actionContext.getParameters(); /* * 可以通过put方法传入参数,但是该参数无法在转发的时候转发到另一个页面,即在jsp页面中无法通过 * EL表达式获取该参数,所以实际上该方法没什么用。 */ paramsMap.put("param", "paramValue"); /* * 可以通过get方法获取参数,其中param是上面的参数,而otherParam是URL传递过来的参数。 * 通过URL传递的参数可以在转发的jsp页面中通过EL表达式获取到。 */ Object param = paramsMap.get("param"); Object otherParam = paramsMap.get("otherParam"); System.out.println("param:" + param); /* * 要注意的是,通过URL传递的参数可以是多个,所以实际上是一个数组对象。 */ System.out.println("OtherParam:" + ((String[])otherParam)[0]); return "success"; }}
效果如下:
通过实现XxxAware接口访问web资源
下面例子的action类为ActionTestAware,显示页面为MyJsp.jsp,URL为: .../MyJsp.jsp?param=thisisparam
代码示例:
package com.actiontest;import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;import org.apache.struts2.interceptor.ParameterAware;import org.apache.struts2.interceptor.RequestAware;import org.apache.struts2.interceptor.SessionAware;public class ActionTestAware implements ApplicationAware, SessionAware, RequestAware, ParameterAware{ public String execute(){ /* * 通过实现XxxAware接口的方式比较简单,步骤如下: * * 1. 让action类实现ApplicationAware、SessionAware、RequestAware、ParameterAware接口 * * 2. 定义相应的成员变量,application、session、request、parameter,类型都为Map。 * * 3. 重写setApplication、setSession、setRequest、setParameter方法。 * * 4.之后在方法里面就可以直接调用这些对象了。 * */ application.put("name", "ice_bear"); System.out.println("name:" + application.get("name")); session.put("age", 12); System.out.println("age:" + session.get("age")); request.put("sex", "female"); System.out.println("sex:" + request.get("sex")); System.out.println("parameter:" + parameter.get("param")[0]); return "success"; } private Map<String, Object> application; private Map<String, Object> session; private Map<String, Object> request; private Map<String, String[]> parameter; @Override public void setParameters(Map<String, String[]> parameter) { this.parameter = parameter; } @Override public void setRequest(Map<String, Object> request) { this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = session; } @Override public void setApplication(Map<String, Object> application) { this.application = application; }}
效果如下:
PS:需要提一下的是,在声明对象的时候不能给对象任何值,空值也不行,不然struct2实例化的对象会被覆盖掉。
PS:这里实际上是structs2帮我们调用setXxx方法。
ActionContext VS XxxAware
两个方式相比,我更倾向于用实现XxxAware接口的方式来访问web资源,因为使用ActionContext对象访问意味着你每创建一个方法就要实例化一个ActionContext类对象,然后再用这个类对象去实例化响应的域对象。然而用实现XxxAware的方法当你一次创建对象之后都可以使用,更能体现java对象复用的思想。
通过ServletActionContext访问
具体使用方法和上面一样所以这里只贴出相关的创建对象的方法:
代码示例
public class TestActionContext { public String execute(){ //创建HttpServletRequest对象 HttpServletRequest request = ServletActionContext.getRequest(); //创建HttpSession对象 HttpSession session = request.getSession(); //创建ServletContext对象 ServletContext servletContext = ServletActionContext.getServletContext(); return "succes"; }}
通过ServletXxxAware方法访问
代码示例
public class TestServletActionAware implements ServletResponseAware, ServletContextAware, ServletRequestAware{ public String execute(){ System.out.println(request.getClass()); System.out.println(response.toString()); System.out.println(servletContext.getClass()); return "success"; } private ServletRequest request; private ServletContext servletContext; private ServletResponse response; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } @Override public void setServletResponse(HttpServletResponse response) { this.response = response; }}
- structs2如何获取web资源
- Structs2 HelloWorld-02 访问web资源
- Structs2通过耦合的方式访问WEB资源
- 关于如何在java的web应用获取服务器资源。
- strtus2 web资源获取
- Struts2 Web 资源获取
- 如何获取资源分?
- platform_get_resource 如何获取资源
- platform_get_resource 如何获取资源
- platform_get_resource 如何获取资源
- platform_get_resource 如何获取资源
- .在java和java web程序中的含义以及如何获取web资源
- Struts2获取web资源对象
- struts2获取web资源方式
- 如何获取 res 中的资源
- 如何获取CSDN资源分
- Android 数组资源如何获取
- FindResource 如何获取自定义资源
- Selenium模拟选课
- How to fix exception: Failed to instantiate SLF4J LoggerFactory?
- iOS 网络编程大小端格式
- mysql:GTID复制切换成传统复制
- 校园网一键登录注销
- structs2如何获取web资源
- Kinect2的安装以及关于OpenNI2遇到的问题(OpenNI2显示no devices found)
- iOS开发中AFNetworking中如何设置https请求(使用自建证书)
- eclipse的maven项目部署到tomcat
- Ajax实现页面局部刷新
- 二进制理解
- 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
- JavaScript自执行函数
- PHP 7 和 PHP5 foreach 迭代指针移动区别