一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述struts2在action中获取requestsessionapplication,并传递数据相关的知识,希望能为你提供帮助。
假设仅仅是通过request、session、application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下:
ScopeAction.java:
package com.itheima.action; import com.opensymphony.xwork2.ActionContext; public class ScopeAction { public String execute() { /* * 我们这里不通过字段(加入setXXX、getXXX方法)传递数据,我们想着通过域(request、session、application) * 传递数据。怎么样才干做到呢?struts2採用低侵入式,action与servlet没有不论什么关联,怎么才干获取域并传递数据呢, * 这时就用到了ActionContext类 */ ActionContext context = ActionContext.getContext(); context.getApplication().put("application", "application域"); //通过ServletContext域传递数据 context.getSession().put("session", "session域"); //通过Session域传递数据 context.put("request", "request域"); //通过Request域传递数据 return "success"; } }
struts2.xml:
< action name="scopeAction_*" class="com.itheima.action.ScopeAction" method="{1}"> < result name="success"> /msg.jsp< /result> < /action>
msg.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> ${applicationScope.application }< br/> ${sessionScope.session }< br/> ${requestScope.request }< br/> < /body> < /html>
地址栏:
文章图片
=============================================================================================
【struts2在action中获取requestsessionapplication,并传递数据】上述方式没有获取到域对象。这里我们也能够通过其它方法获取域对象:
在上述的ScopeAction中加入例如以下方法:
public String doexe() { HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("request", "请求域"); ServletContext context = ServletActionContext.getServletContext(); context.setAttribute("application", "应用域"); HttpSession session = request.getSession(); session.setAttribute("session", "会话域"); //HttpServletResponse response = ServletActionContext.getResponse(); return "success"; }
其它和上述不变。然后地址栏中输入:
文章图片
===============================================================================================
另外另一种方式就是通过框架注入:
Scope2Action.java:
package com.itheima.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import org.apache.struts2.util.ServletContextAware; public class Scope2Action implements ServletRequestAware, ServletResponseAware, ServletContextAware{ private HttpServletRequest request; private HttpServletResponse response; private ServletContext servletContext; @Override public void setServletContext(ServletContext arg0) { this.servletContext = arg0; } @Override public void setServletResponse(HttpServletResponse arg0) { this.response = arg0; } @Override public void setServletRequest(HttpServletRequest arg0) { this.request = arg0; } public String execute() { request.setAttribute("request", "请 求 域"); request.getSession().setAttribute("session", "会 话 域"); servletContext.setAttribute("application", "应 用 域"); return "success"; } }
struts2.xml:
< action name="scope2Action" class="com.itheima.action.Scope2Action"> < result name="success"> /msg.jsp< /result> < /action>
推荐阅读
- Android高级控件(下)
- android Service中多线程交互
- Android requestLayout 和 invalidata , postInvalidate 比较
- Android 获取虚拟按键的高度
- Android studio 报错 gradel project sync failed Error:Cause: peer not authenticated
- Android 获取Activity当前view
- Android面试过程描写叙述
- 设计模式 - 模板方法模式(template method pattern) Applet 具体解释
- Android 关于软键盘