Struts2 request

来源:互联网 发布:南京网络问政江北新区 编辑:程序博客网 时间:2024/06/03 22:52


request

Struts2中调用<%request.getAttribute(“”);%>是调用的不是HttpServletRequest对象,而是

调用org.apache.struts2.dispatcher.StrutsRequestWrappergetAttribute()方法;

源代码如下:

publicObject getAttribute(String key) {

       if (key ==null) {

           thrownew NullPointerException("You must specify a key value");

       }

 

       if (disableRequestAttributeValueStackLookup || key.startsWith("javax.servlet")) {

           // don't bother with the standardjavax.servlet attributes, we can short-circuit this

           // see WW-953 and the forums post linked inthat issue for more info

           returnsuper.getAttribute(key);

       }

 

       ActionContext ctx = ActionContext.getContext();

       Object attribute = super.getAttribute(key);

 

       if (ctx !=null && attribute ==null) {

           boolean alreadyIn =isTrue((Boolean) ctx.get(REQUEST_WRAPPER_GET_ATTRIBUTE));

 

           // note: we don't let # come through orelse a request for

           // #attr.foo or #request.foo could cause anendless loop

           if (!alreadyIn && !key.contains("#")) {

               try {

                   // If not found, then try the ValueStack

                   ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.TRUE);

                   ValueStack stack =ctx.getValueStack();

                   if (stack !=null) {

                       attribute =stack.findValue(key);

                   }

               } finally {

                   ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.FALSE);

               }

           }

       }

       return attribute;

   }

0 0