在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?
Struts2为我们提供了四种方式。
分别为
servlet 不相关的 非IoC 取得Request等对象的方式
servlet 不相关的 IoC 取得Request等对象的方式
servlet 相关的 非IoC 取得Request等对象的方式
servlet 相关的 IoC 取得Request等对象的方式
以下分别叙述。
首先请看struts.xml文件
文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="login" class="struts2.login.LoginAction">
<result name="success" >result.jsp</result>
</action>
<action name="login2" class="struts2.login.Login2Action">
<result name="success" >result.jsp</result>
</action>
<action name="login3" class="struts2.login.Login3Action">
<result name="success" >result.jsp</result>
</action>
<action name="login4" class="struts2.login.Login4Action">
<result name="success" >result.jsp</result>
</action>
</package>
</struts>
其中的LoginAction,Login2Action,Login3Action,Login4Action分别对应四种方式的Action。
文件名:result.jsp
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
request 属性是 ${requestScope.attribute}<br>
session 属性是 ${sessionScope.attribute}<br>
application 属性是 ${applicationScope.attribute}<br>
</html>
文件名:getrequest.jsp
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<a href="login.action">servlet 不相关的 非IoC 取得Request等对象的方式</a><br>
<a href="login2.action">servlet 不相关的 IoC 取得Request等对象的方式</a><br>
<a href="login3.action">servlet 相关的 非IoC 取得Request等对象的方式</a><br>
<a href="login4.action">servlet 相关的 IoC 取得Request等对象的方式</a><br>
</form>
</html>
然后分别叙述4种方式,
1,servlet 不相关的 非IoC 取得Request等对象的方式
这种方法先取得ActionContext,然后获取Map类型的request等对象
Action文件:
package struts2.login;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private ActionContext context;
private Map request;
private Map session;
private Map application;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
this.context = ActionContext.getContext();
this.request = (Map)this.context.get("request");
this.session = this.context.getSession();
this.application = this.context.getApplication();
this.request.put("attribute", "request value servlet 不相关的 非IoC ");
this.session.put("attribute", "session value servlet 不相关的 非IoC ");
this.application.put("attribute", "application value servlet 不相关的 非IoC ");
return SUCCESS;
}
}
2,servlet 不相关的 IoC 取得Request等对象的方式
这种方法,是实现特定的接口,由container来设定request等对象。请注意如下代码示例中红色文字的部分。
Action文件:
package struts2.login;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class Login2Action extends ActionSupport
implements RequestAware , SessionAware, ApplicationAware{
private Map request;
private Map session;
private Map application;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
this.request.put("attribute", "request value servlet 不相关的 IoC ");
this.session.put("attribute", "session value servlet 不相关的 IoC ");
this.application.put("attribute", "application value servlet 不相关的 IoC ");
return SUCCESS;
}
public void setRequest(Map<String, Object> arg0) {
// TODO Auto-generated method stub
this.request = arg0;
}
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub
this.session = arg0;
}
public void setApplication(Map<String, Object> arg0) {
// TODO Auto-generated method stub
this.application = arg0;
}
}
3,servlet 相关的 非IoC 取得Request等对象的方式
这种方法可以获取servlet相关的request等对象,也就是说这种方式取出的request对象不单单是设定属性的作用,而是可以获取http相关的信息。
取出方法,请参看代码中的蓝字部分。
Action文件:
package struts2.login;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Login3Action extends ActionSupport{
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
this.request = ServletActionContext.getRequest();
this.session = this.request.getSession();
this.application = ServletActionContext.getServletContext();
this.request.setAttribute("attribute", "request value servlet 相关的 非IoC ");
this.session.setAttribute("attribute", "session value servlet 相关的 非IoC ");
this.application.setAttribute("attribute", "application value servlet 相关的 非IoC ");
return SUCCESS;
}
}
4,servlet 相关的 IoC 取得Request等对象的方式
这种方法也可以获取servlet相关的request等对象,也就是说这种方式取出的request对象不单单是设定属性的作用,而是可以获取http相关的信息。
但是取出方法是通过接口进行实现,也就是由struts2的container来设定,请参看代码中的红字部分。
Action文件:
package struts2.login;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
public class Login4Action extends ActionSupport
implements ServletRequestAware , ServletContextAware{
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
this.request.setAttribute("attribute", "request value servlet 相关的 IoC ");
this.session = this.request.getSession();
this.session.setAttribute("attribute", "session value servlet 相关的 IoC ");
this.application.setAttribute("attribute", "application value servlet 相关的 IoC ");
return SUCCESS;
}
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
this.request = arg0;
}
public void setServletContext(ServletContext arg0) {
// TODO Auto-generated method stub
this.application = arg0;
}
}
分享到:
相关推荐
Struts2的Action中获得request response session几种方法
在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境的搭建是一个非常重要的步骤。本文将详细介绍如何在 Struts2+Spring+Hibernate 框架中搭建 Action 的单元测试环境。 首先,需要了解为什么需要对 ...
另外,按照惯例,在Struts1.x中只有“execute”方法能调用Action, 但在Struts2中并非必要,任何声明为public String methodName() 方法,都能通过配置来调用Action。 最后,和Struts1.x最大的革命性的不同是,...
而不像Struts1.x那样,必须把相应的Bean存到Page、Request或者Session中才能获取。 Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。 Struts 2无须继承任何类型或实现...
在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话 (Session)的一些信息, 甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应...
传值问题 在其中取值的方法有两种: #+映射名, 直接写映射名。...例如放置在session域或者request域中的数据,必须先指定作用域,然后再指定保存的对象. b.页面struts2标签保存的数据也需要使用#来获取
3:在action类中取得request和session对象的方法 Map session = ActionContext.getContext().getSession(); HttpServletRequest request = ServletActionContext.getRequest (); 设置它们的值的方法
在 Struts2 框架中,Velocity 模板引擎可以与 Struts2 集成,实现了显示层与程序代码的分离。 Velocity 模板引擎的优点在于,它可以使得开发人员快速开发显示层,同时也可以与 Struts2 框架集成,以实现显示层与...
struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet....
jsp+struts权限管理源代码。 package sunyang.functions.action; import java.util.List; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import sunyang.functions...
2. 在 Action 中,验证事务控制令牌,如果不匹配,则抛出错误。 3. 使用 TokenProcessor 类生成令牌,并将其保存在用户会话中。 protected String generateToken(HttpServletRequest request) { HttpSession ...
parameter="" //指定Actgion的配置参数,在Action类的execute()方法中,可以调用ActionMapping对象的getParameter()方法来读取该配置参数。(相当于初始化赋值) >>> prefix=""// 指定填充当前 Action 关联 FormBean...
2. 两种实现方式 81 3. 生命周期及状态转换 84 4. 线程调度 85 5. 线程同步 92 三. Jsp 101 (一) myeclipse上配置Tomcat服务器 101 (二) Jsp+servlet+bean版HelloWorld概览 105 (三) Jsp基本页面标签 116 1. 标签 ...
主要实现了用户的登录系统..并且验证了struts中的跳转..还有跳转到另一个action中的类型..跳转另一个action后显示出书籍信息......并且从request域中,session域和application整个应用程序域中获取信息..
• Before passing it to the Action class, Struts will also conduct form state validation by calling the validation() method on UserActionForm. Note: This is not always wise to do. There might be ways ...
6. 业务逻辑类将处理结果返回给 Action,Action 将处理结果保存在适当的作用域范围之内(session、request 等)。 7. Action 的 execute 方法向 ActionServlet 返回 ActionForward,指明下一步调用的 Action 或 JSP ...
9.2.2 Struts2框架中的OGNL 9.2.3 操作普通的属性与方法 9.2.4 访问静态方法与属性 9.2.5 访问数组 9.2.6 访问List、Set、M印集合 9.2.7 投影与选择 9.3 Struts2的标签库 9.3.1 数据标签的应用 9.3.2 控制标签的应用...
将FileActionForm直接作为业务层的接口入参,相当于将Web层传播到业务层中去,即将业务层绑定在特定的Web层实现技术中,按照分层模型学院派的观点,这是一种反模块化的设计,但在"一般"的业务系统并无需提供多种UI...
如果使用scope="session"或scope="request" 需要在web.xml中定义RequestContextListener ==============性能提升================= 1.二级缓存和查询缓存 二级缓存适用于产品查看功能.对产品对象采用二级缓存存储....
1、struts2对servlet封装(request,response) ,资源调配和资源的映射 2、框架设计的思想 istruts 配置,过滤器,反射 istruts.properties 3、starts2的使用思路 1、jar 2、配置文件 3、常用类 ...