EL表达式源码解读(作用域)

EL表达式源码解读(作用域)

eg.${param.name}为例说明
底层代码如下:

if (base == null && property != null) {//base是
            int idx = Arrays.binarySearch(SCOPE_NAMES, property.toString());
            if (idx >= 0) {
                PageContext page = (PageContext) context
                        .getContext(JspContext.class);
                context.setPropertyResolved(true);
                switch (idx) {
                case APPLICATIONSCOPE:
                    return ScopeManager.get(page).getApplicationScope();
                case COOKIE:
                    return ScopeManager.get(page).getCookie();
                case HEADER:
                    return ScopeManager.get(page).getHeader();
                case HEADERVALUES:
                    return ScopeManager.get(page).getHeaderValues();
                case INITPARAM:
                    return ScopeManager.get(page).getInitParam();
                case PAGECONTEXT:
                    return ScopeManager.get(page).getPageContext();
                case PAGESCOPE:
                    return ScopeManager.get(page).getPageScope();
                case PARAM:
                    return ScopeManager.get(page).getParam();
                case PARAM_VALUES:
                    return ScopeManager.get(page).getParamValues();
                case REQUEST_SCOPE:
                    return ScopeManager.get(page).getRequestScope();
                case SESSION_SCOPE:
                    return ScopeManager.get(page).getSessionScope();
                }
            }

EL表达式的解析器,会根据传入的字符串表达式(即this.image)与上下方来解析表达式
EL表达式源码解读(作用域)_第1张图片
最后会返回一个Map数据 EL表达式源码解读(作用域)_第2张图片
这个Map是参数的键值Map,根据键获取值,键是property的值(name),然后把返回的结果当前参数传入到write()方法中,最后页面就输出EL表达式的值了EL表达式源码解读(作用域)_第3张图片

你可能感兴趣的:(JavaWeb)