在struts2中关于ActionContext介绍

session值,获取从表单提交的数据信息 
action类中代码如下: 
ActionContext ac=ActionContext.getContext(); 
Map map=ac.getSession(); 
map.put("username", username); 
map.put("password", password); 

ActionContext ac=ActionContext.getContext();访问session 
ac.getSession().put(,);从action中访问session 
当用户注册后,其用户注册后的值存放在set方法中,此时已经存放于值栈中 
值栈存放着action中所有的值。 
Map map=ac.getSession();把用户名,密码等放在session中; 
map.put("", );就是放在session中的值 
map.put()存放session值 
session返回map对象; 
参数属性值 
值栈ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack") 
(★★注意:request.getAttribute("struts.valueStack") ;其中”struts.valueStack“严格划分大小写★★) 
session是 map类型 

jsp页面获取session值  
<% 
    ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack") ; 
    if(vs!=null){ 
    String username=vs.findString("username"); 
    String password=vs.findString("password"); 
    out.println(username); 
    } 
    
    %> 
另一中方法:使用“$”符号,获取session中变量值。如上:${username } 

ActionContext介绍  

对请求(Request)的参数(Param),使用拦截器框架自动调用一些get()和set()方法设置到对应的Action的字段中,在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest)、响应(HttpServletResponse)操作。 

ActionContext是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),存放Action在执行时需要用到的对象。上下文(webwork)中放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等,webwork将Servlet相关数据转换为与Servlet无关的Map对象(即ActionContext),使xwork的Action实现与web层、逻辑层与表现层分离。 

每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样Action就可以在多线程中使用。 

通过ActionContext取得HttpSession: 
Map session = ActionContext.getContext().getSession(); 
这里的session就是Map类型的对象;原因:WebWork框架将与Web相关的很多对象重新进行了包装,这里将HttpSession对象重新包装成了一个Map对象,提供给Action使用,而不用直接和底层的HttpSession打交道。也正是框架的包装,让我们的Actoion可以完全的和Web层解藕。 

如果Action需要直接与JavaServlet的HttpSession、HttpServletRequest等一些对象进行操作,如何处理? 
ServletActionContext 
ServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了ActionContext,它提供了直接与JavaServlet相关对象访问的功能,它可以取得的对象有: 
1、javax.servlet.http.HttpServletRequest:HTTPservlet请求对象 

2、javax.servlet.http.HttpServletResponse;:HTTPservlet相应对象 

3、javax.servlet.ServletContext:Servlet 上下文信息 

4、javax.servlet.ServletConfig:Servlet配置对象 

5、javax.servlet.jsp.PageContext:Http页面上下文 
例: 
1、取得HttpServletRequest对象: 

HttpServletRequest request = ServletActionContext. getRequest(); 

2、取得HttpSession对象: 

HttpSession session = ServletActionContext. getRequest().getSession(); 

ServletActionContext和ActionContext有着一些重复的功能,原则上如果ActionContext能够实现的功能,那最好就不使用ServletActionContext,让Action尽量不要直接去访问JavaServlet的相关对象。 
使用ActionContext时要注意:不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值