EL表达式的基本使用

     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()方法变为数字,然后再进行比较. 

    

猜你喜欢

转载自blog.csdn.net/qq1019648709/article/details/80079063
今日推荐