EL表达式

来源:互联网 发布:解压缩zip linux 编辑:程序博客网 时间:2024/06/06 12:47

一、原理

        在得到页面请求的时候,Tomcat服务器会把JSP文件转换成.java文件存放在work\Catalina目录下,然后编译成.class文件执行。当读取.jsp文件发现“${”开头的样式就表明是EL表达式,Tomcat会将其进行转换,如果没有“}”反括号,则抛出异常。

二、使用范围

         EL表达式只有在JSP页面才可以正确被执行。如果在JSP中引用一个外部文件(如:js),在外部文件中使用EL表达式是无法被服务器识别的,因为服务器不会去加载他们的内容,没有对其编译。而在jsp文件的任何地方都可以使用EL(如标签里面、JavaScript里面、字符串里、双引号里等)。

三、使用设置

        如果所有页面都要使用EL,则首先查看web.xml,如果在<jsp-config/>里有个<el-ignored>false</el-ignored>标签就可以。如果部分页面需要EL,则在相应的jsp添加<%@page isELIgnored=”false”%>

四、格式

        EL可以使用${student.name}或${student[“name”]}两种方式,如果属性名带有特殊字元(”.” 、“,” 、“-“)等非字母或数字者,就一定要用[]。

五、隐含物件(Implicit Objects)

        共11个,除了pageContext是JavaBean物件,对应于javax.servlet.jsp.PageContext型态外,其余均对应java.util.Map型态。

        1+4个域对象(方便获得存在于域对象中的属性,并获得域对象的引用)。

(1)pageContext

        JSP页的上下文,对应于JSP页面中的pageContext对象,可以用于访问JSP隐式对象(如request,response,session,servletContext,out等)。       

<html>   <body>       <% session.setAttribute("session_value","1234567890"); %>        請求方法(get/post): ${pageContext.request.method} <br>        請求參數: ${pageContext.request.queryString}<br>        使用者IP: ${pageContext.request.remoteAddr}<br>        使用者國別: ${pageContext.response.locale.country}<br>           session名稱: ${pageContext.session.valueNames[0]}   请求的URL(不包括参数):${pageContext.request.requestURL}   服务的webApplication名称:${pageContext.request.contextPath}   用户名称:${pageContext.request.remoteUser}   Session是否为new:${pageContext.session.new}   </body></html>
(2)pageScope:代表page域中用于保存属性的map对象

(3)requestScope:代表request域中用于保存属性的map对象

(4)sessionScope:代表session域中用于保存属性的map对象

(5)applicationScope:代表application域中用于保存属性的map对象

<html>     <body>         <%         pageContext.setAttribute("testing","PageContext");         request.setAttribute("testing","Request");         session.setAttribute("testing","Session");         application.setAttribute("testing","Application");         %>         pageScope : ${pageScope.testing}<br>         requestScope : ${requestScope.testing}<br>         sessionScope : ${sessionScope.testing}<br>         applicationScope : ${applicationScope.testing}    </body></html>
【4个关于请求的对象(获取请求参数)】

(6)param:表示一个保存了所有请求参数的Map对象

<html>    <body>        <form action="">            姓名:<select name="userName" size="1">            <option value="ZS">张三</option>            <option value="LS">李四</option>             </select><br>            年龄:<input type="text" name="userAge"><br>            <input type="submit" value="Submit">            <br>               你輸入的資料為:<br>               ${param.userName} 今年 ${param.userAge} 岁        </form>    </body></html>
(7)paramValues:同上,它对于某个请求参数,资料不只一个时,返回的是一个字符串数组

<html>    <body>        <form action="">            参与人员:            <input type="checkbox" name="people" value="ZS"/>张三            <input type="checkbox" name="people" value="LS"/>李四            <input type="checkbox" name="people" value="WW"/>王五            <br>            <input type="submit" value="Submit">            <br>               你選的產品有:<br>               ${paramValues.people[0]} ${paramValues.people[1]} ${paramValues.people[2]}        </form>    </body></html>
(8)header:表示一个保存了所有http请求头字段的Map对象
<html>    <body>      使用者的语言:${header["accept-language"]}    </body></html>
(9)headerValues:同上,返回字符串数组。当同一标头名称拥有不同的值时,则需使用这个
<html>    <body>        <fmt:requestEncoding value="Big5"/>        Connection : ${headerValues["connection"][0]}<br>    </body></html>
(10)cookie:表示一个保存了所有cookie的Map对象,将cookie名称映射到单个cookie对象
<html>    <body>        <fmt:requestEncoding value="Big5"/>        名字:${cookie["username"].value}          <%           Cookie cookie = new Cookie ("username","Ted");  ---將Ted這名字存到cookie中,名稱為username           cookie.setMaxAge(30);   ---生命週期30秒           response.addCookie(cookie);        %>    </body></html>
(11)initParam:表示一个保存了所有web应用初始化参数的map对象

  • 我们可以在web.xml文件中设定系统的预设参数:

<context-param>     <param-name>mynameis</param-name>      <param-value>Ted</param-value></context-param><context-param>      <param-name>myoffice</param-name>      <param-value>Taiwan</param-value></context-param>

  • 在JSP中使用:

<html>    <body>        <fmt:requestEncoding value="Big5"/>        名字 : ${initParam.mynameis}<br>        辦公室在 : ${initParam.myoffice}    </body></html>
六、EL运算

(1)    算数运算:+、-、*、/(or div)、%(or mod)

(2)    逻辑运算:and、or、not

(3)    关系运算:Less-than(<or lt)、Greater-than(>or gt)、Less-than-or-equal(<=or le)、Greater-than-or-equal(>=or ge)、Equal(

= = or eq)、NotEqual(!= or ne)











0 0