1。访问或添加request/session/application属性
将前一篇文件中的TestAction中的代码修改为如下所示:
public class TestAction {
public String execute() {
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "应用范围");// 往ServletContext里放入app
ctx.getSession().put("ses", "session范围");// 往session里放入ses
ctx.put("req", "request范围");// 往request里放入req
return "success";
}
}
result.jsp中的代码修改为:
<body>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</body>
然后访问testAction,reault.jsp页面显示的内容为:
应用范围
session范围
request范围。
在上面的程序中也可以向request/session/application添加集合对象,然后使用jstl标签<c:forEach>在jsp页面迭代,就像使用servlet和jsp编程一样的方式。
2。获取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象
方式一、与Servlet解耦合的非IOC方式
获取的scope对象与容器无关,通过ActionContext获取。
public class TestAction {
ActionContext context;
Map<String,Object> request;
Map<String,Object> session;
Map<String,Object> application;
@SuppressWarnings("unchecked")
public String execute() throws Exception {
context=ActionContext.getContext();
//request= (Map)context.get("request");
session=context.getSession();
application=context.getApplication();
context.put("req", "request范围");// 往request里放入req
//request.put("req", "requst属性");//或者使用这种方式
session.put("ses", "sesion属性");
application.put("app", "application属性");
return "success";
}
}
result.jsp中的代码修改为:
${requestScope.req}
${sessionScope.ses}
${applicationScope.app}
<h4>以下使用scope.getAttribute的形式来接受</h4>
request: <%=request.getAttribute("req") %><br>
session: <%=session.getAttribute("ses") %><br>
application:<%=application.getAttribute("app") %><br>
页面访问显示结果为:
requst属性 sesion属性 application属性
以下使用scope.getAttribute的形式来接受
request: requst属性
session: sesion属性
application:application属性
ActionContext中的部分源码如下所示:
public class ActionContext implements Serializable{
Map<String, Object> context;
public ActionContext(Map<String, Object> context) {
this.context = context;
}
public void setApplication(Map<String, Object> application) {
put("com.opensymphony.xwork2.ActionContext.application", application);
}
public Map<String, Object> getApplication() {
return ((Map) get("com.opensymphony.xwork2.ActionContext.application"));
}
public void setSession(Map<String, Object> session) {
put("com.opensymphony.xwork2.ActionContext.session", session);
}
public Map<String, Object> getSession() {
return ((Map) get("com.opensymphony.xwork2.ActionContext.session"));
}
public Object get(String key) {
return this.context.get(key);
}
}
分析:通过ActionContext的getContext静态方法得到ActionContext对象,然后ActionContext对象调用get方法来获取一个存储在Map中的对象。
方式二、与Servlet解耦合的IOC方式
实现指定接口,由struts2框架运行时注入:(在struts2框架运行时会自动注入值)
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
public class TestAction implements RequestAware,SessionAware,ApplicationAware {
Map<String, Object> request;
Map<String, Object> session;
Map<String, Object> application;
public String execute() throws Exception {
request.put("req", "requst属性");
session.put("ses", "sesion属性");
application.put("app", "application属性");
return "success";
}
public void setRequest(Map<String, Object> request) {
System.out.println("request:" + request.getClass().getName());
this.request=request;
}
public void setSession(Map<String, Object> session) {
System.out.println("session:" + session.getClass().getName());
this.session=session;
}
public void setApplication(Map<String, Object> application) {
System.out.println("application:" + application.getClass().getName());
this.application=application;
}
}
当访问testAction时,控制台打印出的信息如下所示:
application:org.apache.struts2.dispatcher.ApplicationMap
session:org.apache.struts2.dispatcher.SessionMap
request:org.apache.struts2.dispatcher.RequestMa
RequestAware接口的源码如下所示:其他接口的源码类似。
public interface RequestAware
{
public abstract void setRequest(Map<String, Object> paramMap);
}
方式三、与Servlet耦合的非IOC方式
通过ServletActionContext.类直接获取:
public class TestAction {
HttpServletRequest request;
HttpSession session;
ServletContext application;
public String execute() throws Exception {
request = ServletActionContext.getRequest();
session = request.getSession();
application = ServletActionContext.getServletContext();
request.setAttribute("req", "requst属性");
session.setAttribute("ses", "sesion属性");
application.setAttribute("app", "application属性");
return "success";
}
}
方式四、与Servlet耦合的IOC方式
实现指定接口,由struts2框架运行时注入:(在struts2框架运行时会自动注入值)
public class TestAction implements ServletRequestAware,ServletResponseAware,ServletContextAware{
private ActionContext context;
private HttpServletRequest request;
private HttpServletResponse response;
HttpSession session;
ServletContext application;
public String execute() throws Exception {
context=ActionContext.getContext();
session=request.getSession();
request.setAttribute("req", "requst属性");
session.setAttribute("ses", "sesion属性");
application.setAttribute("app", "application属性");
return "success";
}
public void setServletRequest(HttpServletRequest request) {
System.out.println("HttpServletRequest测试:"+request);
this.request=request;
}
public void setServletContext(ServletContext application) {
System.out.println("ServletContext测试:"+application);
this.application=application;
}
public void setServletResponse(HttpServletResponse response) {
System.out.println("HttpServletResponse测试:"+ response);
this.response=response;
}
}
在访问此action时,控制台打印的信息如下所示:
HttpServletRequest测试:org.apache.struts2.dispatcher.StrutsRequestWrapper@1acfa31
HttpServletResponse测试:org.apache.catalina.connector.ResponseFacade@15dd910
ServletContext测试:org.apache.catalina.core.ApplicationContextFacade@47a0d4
ServletRequestAware的接口源码如下所示:
public interface ServletRequestAware
{
public abstract void setServletRequest(HttpServletRequest paramHttpServletRequest);
}
分享到:
相关推荐
一个Demo告诉你struts2如何创建 request response session application
struts2访问application、session以及request等web资源的示例代码
NULL 博文链接:https://fish198398.iteye.com/blog/785319
本文讲述了serlvet API无耦合的方式
NULL 博文链接:https://aimilin6688.iteye.com/blog/1279546
2.修改题目1,将提交的“用户名信息”保存到request中,“密码信息”保存到session中,而“用户是否已经注册的判定信息”保存在application中,并在显示页面中,分别从request、session和application中获取数据并...
一:访问或添加request/session/application属性 代码如下:public String scope() throws Exception{ ActionContext ctx = ActionContext.getContext(); ctx.getApplication().put(“app”, “应用范围”);//往...
RequestMap,SessionMap,ApplicationMap, AttributeMap. struts提供两种方式访问session,request ,response,ActionContext 使用。 获得作用域及参数响应对象及三种符号说明
监听器 servlet application /session /request 6/8 个 1、拦截器 定义拦截器的包 <package name="myPackage" extends="struts-default"> 定义拦截器的核心 定义拦截器类 ...
主要实现了用户的登录系统..并且验证了struts中的跳转..还有跳转到另一个action中的类型..跳转另一个action后显示出书籍信息......并且从request域中,session域和application整个应用程序域中获取信息..
8.7.2 使用M印类型的request、session、application 8.8 疑难解惑 8.8.1 Struts Prepare And Execute Filter过滤器 8.8.2 struts.xml文件配置出错 8.9 精彩回顾 第9章 庖丁解牛 ——揭密Struts2高级技术 9.1 本章...
清单 2 web.xml 中 session 的配置 <session-config> <session-timeout>100</session-timeout> </session-config> 然而,现实中的 session 范围更像是“鸡肋”,把大量数据放入 session 会导致严重的效率问题,
2) 利用JavaMail API发送邮件的过程中,()能获取正确的session对象。 a) Session mailsession=Session.getInstance(); b) Session mailsession=Session.getInstance(objProperties); c) Session mailsession...
此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...
ActionForm maintains the session state for the Web application. ActionForm is an abstract class that is sub-classed for each input form model. When I say input form model, I am saying ActionForm ...
主要介绍Struts2中访问Web元素的方法,希望能给大家做一个参考。
Struts2中WebWork框架使用XWork基于HTTP参数名执行操作和调用,将每个HTTP参数名处理为OGNL(对象图形导航语言)语句,而OGNL将: user.address.city=Bishkek&user['favoriteDrink']=kumys 转换为: action....
Servlets和JSP核心技术 卷2 内容还是很详细的,看过卷1的人可以继续用这本书深造,呵呵 目录: Chapter 1. Using and Deploying Web Applications Section 1.1. Purpose of Web Applications Section 1.2. ...
Servlets和JSP核心技术 卷2 内容还是很详细的,看过卷1的人可以继续用这本书深造,呵呵 目录: Chapter 1. Using and Deploying Web Applications Section 1.1. Purpose of Web Applications Section 1.2. ...
Class.forName("org.apache.struts.action.ActionServlet"); supportStruts = true; } catch (ClassNotFoundException ex) { } try { Class.forName("javax.naming.Name"); supportJNDI = true; } catch ...