Struts2值栈和OGNL

1、首先关于Struts2框架:java

    ①特色:web

     一、通用性app

     二、可扩展性框架

        struts2能够自定义类型转换器(尚待深刻)、自定义拦截器。jsp

     三、非侵入式ui

        不会污染其余模块spa

    ②配置code

    一、Web工程的web.xml文件配置filter拦截器(拦截*.action请求)xml

    二、struts.xml首先要关联约束文档对象

 <package name="default" namespace="/" extends="strutd-default">
     <action name="saveBook" class="com.atguigu.bean.Book" method="save">
         <result name="toDetailPage">detailpage.jsp</result>
    </action>
</package>

标签package的做用是定义一个功能模块,其name属性做为标识是必填项,便于其余package引用,extends是继承了默认的配置。namespace也采用了默认配置,若是采用自定义名称空间,则访问这个package中定义的action时,必须在路径中加上名称空间值。

action对应着请求,class属性指定处理请求的类,method属性为处理请求的具体方法,result则对应响应,注意其name属性值。

    ③Action类

    类中的set方法是注入请求参数,get方法做用是在jsp文件中利用EL表达式取出数据显示出来。固然,在标签action中指定了method的属性值为save,这个save就是Action类中处理请求的具体方法,此方法有固定的格式:

            1)public 权限

            2)String返回值类型

           3) 没有参数

 

2、值栈

Struts2中的request对象不是Servlet容器建立的request对象了。

 public class StrutsRequestWrapper extends HttpServletRequestWrapper{
 public Object getAttribute(String key){
  if(key==null){
    throw new NullPointerException("You must specify a key value");
  }
  if(){
    return super.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));
       if(!alreadyIn&&!key.contains("#")){
        try{
             ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.TRUE);
             ValueStack stack=ctx.getValueStack();
             if(stack!=null){
                  attribute=stack.findValue(key);
       }catch(Exception e){
          ...
       }finally{
      ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.FALSE);
     }
    }
   }
  }
  return attribute;
 }
}

它修改了getAttribute()方法,但除了request以外,获取的response和ServletContext对象依然是原生的,太晚了,明天继续,但愿本身能坚持下来

相关文章
相关标签/搜索