EL如果要想使用必须结合标志位的操作完成,所谓的标志位在Java WEB里面一共有四种:page(pageContext),request,session,application(四种属性范围).EL是针对于四种属性范围取值的支持,有了EL之后,在页面中就不应该再出现getAttribute()方法.
范例:观察基本操作
<%
request.setAttribute("msg", "hello");
%>
<%
if(request.getAttribute("msg")!=null){
%>
<%=request.getAttribute("msg") %>
<%
}
%>
这样的做法为了避免出现空异常,这是古老的写法,下面是EL表达式实现
<%
request.setAttribute("msg", "hello");
%>
${msg}
如果属性不存在则会使用空字符串("")代替null;
从此之后只要是编写jsp,并且取得属性的时候不允许再使用getAttribute()方法了,而使用${}的EL语法完成.
EL基础语法
通过演示可以发现,EL中的基本结构"${属性名称}",但是对于属性范围一共存在有四种,那么如果四种属性范围里面都有msg的属性名称会如何呢?<%
pageContext.setAttribute("msg", "page");
request.setAttribute("msg", "request");
session.setAttribute("msg","ssion");
application.setAttribute("msg", "application");
%>
${msg}
默认情况下会按照page(pageContext)-request-session-application的顺序查找属性的内容,但是这样的顺序是不可靠的.所以此时最好的解决方案是直接设置要查找的范围
<%
pageContext.setAttribute("msg", "page");
request.setAttribute("msg", "request");
session.setAttribute("msg","ssion");
application.setAttribute("msg", "application");
%>
${pageScope.msg}
${requestScope.msg}
${sessionScope.msg}
${applicationScope.msg}
以上只能说是为不同范围的同名属性的访问给了一个解决方案,但是从实际使用来讲,不建议设置属性使用重名,这样访问也会变得非常的方便.
EL之中除了可以接收四种属性范围的内容之外,也可以输出请求参数,格式:"${param.参数名称}".
范例:观察参数输出
<h1>参数:{param.msg}</h1>
<h1>参数:<%request.getParameter("msg"); %></h1>
结果
参数:
参数:null
在整个EL里面最为重要的是提供三目运算,可以自动的进行包装类或字符串的"=="比较
<h1>参数:${param.msg=='hello'?"欢迎":"拜拜"}</h1>
<h1>参数:<%request.getParameter("msg"); %></h1>
在直接编写的Scriptlet代码的时候,以上的"=="半段根本就无啊发使用;
范例:观察三目
<h1>参数:${param.msg==100?"欢迎":"拜拜"}</h1>//http://localhost:8080/ELProject/show.jsp?msg=100
如果此时的代码要通过Scriptlet完成编写,那么就需要先接收参数,而后参数内容使用Integer.parseInt()方法变为数字,然后再进行比较.