表达式语言EL

表达式语言的语法

EL表达式以 ${ 开头并以 }结束。如下:

${expression} ,${x+y}

它也常用来连接两个表达式。对于一系列的表达式,它们的取值将是从左到右进行,计算结果的类型为String,并且连接在一起。

${2+6}${5+5} //810

[] 和 . 运算符

EL表达式可以返回任意类型的值,如果EL表达式的结果是一个带有属性的对象,则可以利用 [] 或者 . 运算符来访问该属性。" [ ] " 和 " . " 运算符类型;" [ ] " 是比较规范的形式," . "运算符则比较快捷。

为了访问对象的属性,可以使用一下任意一种形式:

${object["propertyName"]}
${object.propertyName}

但是如果propertyName不是有效的Java变量名,只能使用 [] 运算符。如:

${header["host"]} ✔
${header.host} ✔
${header["accept-language"]} ✔
${header.accept-language} ✖ 因为accept-language不是有效的java变量名

如果访问对象属性的属性则可以继续:

${object["a"]["b"]}
${object.a.b}

取值规则

EL表达式的取值是从左到右进行的。对于expr-a[ expr-b ] 形式的表达式,其EL表达式的取值方法如下:

1.先计算expr-a 得到value-a

2.如果value-a为null,则返回null

3.然后计算expr-b得到value-b

4.如果value-b为null,则返回null

访问JavaBean

利用 " . "或 " [] " 运算符,都可以访问bean属性。

EL隐式对象

在JSP页面中,可以利用JSP脚本来访问JSP隐式对象。但是,在免脚本的JSP页面中,则不可能访问这些隐式对象。EL允许通过一组它自己的隐式对象来访问不同的对象。

对象描述
pageContext这是当前JSP的avax.servlet.jsp.PageContext
initParam用于获取上下文参数的值。
param用于获取请求参数的值。
paramValues可以获取一个请求参数的多个值。(当key对应的value是数组时,${ paramValues.selected[0] })
header表示一个包含所有请求标题的Map。
cookie可以用来获取一个cookie。(${ cookie.jsessionid.value })
applicationScope包含了ServletContext对象中所有属性的Map。
sessionScope包含了HttpSession对象中所有属性的Map
requestScope包含了当前HttpservletRequest对象中所有的属性的Map。
pageScope包含了全页面范围内的所有属性的Map

其他EL运算符

+,- ,* ,/(div) , %(mod) ,&&(and) , || (or) , ! (not) , == (eq) , != (ne) ,>(gt) , >=(ge) , <(lt) ,<= (le) , empty x(检验x是否为空)

应用:

Employee类:

public class Employee2 {
    private int id;
    private String name;
    private Address address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

EmployeeServlet类:

@WebServlet(name = "EmployeeServlet",urlPatterns = "/employee")
public class EmployeeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Address address = new Address();
        address.setCity("jinan");
        address.setCounty("China");

        Employee2 employee2 = new Employee2();
        employee2.setAddress(address);
        employee2.setId(2018);
        employee2.setName("Veng");

        request.setAttribute("employee",employee2);

        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/employee.jsp");
        requestDispatcher.forward(request,response);
    }
}

employee.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
    employee: ${requestScope["employee"]["name"]} , ${employee["address"]["city"]}

</body>
</html>

禁用脚本

实现免脚本的JSP页面

为了关闭JSP页面的脚本元素,要使用到jsp-property-group 元素以及url-pattern 和scripting-invalid 两个子元素。url-pattern元素定义禁用脚本要应用的URL样式(即禁用哪个jsp页面)。

例(将一个应用程序中所有的JSP页面的脚本关闭):

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
</jsp-config>

注意:在部署描述符中只能有一个jsp-config元素。如果已经为禁用EL而定义了一个jsp-property-group,就必须在同一个jsp-config元素下,为禁用脚本而编写jsp-property-group.

禁用EL计算

  • 可以用page指令的isELIgnored属性设置为true。

    <%@page isELIgnored="true" %>
    
  • 可以在部署描述符中使用jsp-property-group元素。其中还必须有url-pattren 和 el-ignored 两个子元素。

    <jsp-config>
        <jsp-property-group>
            <url-pattern>employee.jsp</url-pattern>
            <el-ignored>true</el-ignored>
        </jsp-property-group>
    </jsp-config>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值