【java基础】JSTL之EL表达式

EL 表达式语言简介

EL 是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点。在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request 请求参数通常会以 String 类型来发送,在得到时使用的 Java 语言脚本就应该是 request.getParameter(“XXX”) ,这样的话,对于实际应用还必须进行强制类型转换。而 EL 就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用 EL 表达式取得的值,而不用关心它是什么类型。

并且使用EL表达式非常简便,不需要进入任何jar包,只要jsp/servlet容器实现了J2EE1.4/sevlet2.4/JSP2.0规范就可以。

EL表达式-牛刀小试

在后台servlet中给request设值:

//普通字符串
request.setAttribute("hello", "Hello World");

在JSP页面取值:

①普通jsp脚本方式取值

<%=request.getAttribute("hello") %>

②使用EL表达式取值

${hello }

整体jsp代码:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
    <h1>测试EL表达式</h1>
    <hr>
    <li>普通字符串</li><br>
    hello(jsp脚本):  <%=request.getAttribute("hello") %> <br>
    hello(el表达式,语法:$和{}):   ${hello } <br>
</body>
</html>

EL 表达式必须以“ ${XXX} ”来表示,其中“ XXX ”部分就是具体表达式内容。


EL表达式完整示例:

Servlet代码:

/**
 * 测试el表达式
 * @author Administrator
 *
 */
public class JstlElServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //普通字符串
        request.setAttribute("hello", "Hello World");

        //实体的存取
        Group group = new Group();
        group.setName("动力节点603班");

        User user = new User();
        user.setUsername("张三");
        user.setAge(23);
        user.setGroup(group);
        request.setAttribute("user", user);

        //map测试
        Map map = new HashMap();
        map.put("k1", "v1");
        map.put("k2", "v2");
        request.setAttribute("map", map);

        //字符串数组
        String[] strArray = new String[]{"a", "b", "c"};
        request.setAttribute("str_array", strArray);

        //对象数组
        User[] users = new User[10];
        for (int i=0; i<users.length; i++) {
            users[i] = new User();
            users[i].setUsername("张三_" + i);
        }
        request.setAttribute("users", users);

        //list集合
        List userList = new ArrayList();
        for (int i=0; i<10; i++) {
            User usr = new User();
            usr.setUsername("李四_" + i);
            userList.add(usr);
        }
        request.setAttribute("userList", userList);

        //empty
        request.setAttribute("v2", "");
        request.setAttribute("v3", new ArrayList());
        request.setAttribute("v4", "12345");
        request.setAttribute("v5", null);

        request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
    }

}

JSP代码:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
    <h1>测试EL表达式</h1>
    <hr>
    <li>普通字符串</li><br>
    hello(jsp脚本):<%=request.getAttribute("hello") %><br>
    hello(el表达式,语法:$和{}):${hello }<br>
    hello(el表达式,el的内置对象pageScope,requestScope,sessionScope,applicationScope)<br>
    如果不指定范围,它的搜索顺序为pageScope~applicationScope):${requestScope.hello }<br>
    hello(el表达式,指定范围从session取得):${sessionScope.hello }<br>
    <p>
    <li>结构,采用存取器.进行导航</li><br>
    姓名:${user.username }<br>
    年龄:${user.age }<br>
    所属组:${user.group.name }<br>
    <p>
    <li>map</li><br>
    map.k1:${map.k1 }<br>
    map.k2:${map.k2 }<br>
    <p>
    <li>字符串数组,采用[]下标</li><br>
    strArray[1]:${str_array[1] }<br>
    <p>
    <li>对象数组,采用[]下标</li><br>
    users[5].username:${users[5].username }<br>
    <p>
    <li>list,采用[]下标</li><br>
    userList[6].username:${userList[6].username }<br>
    <p>
    <li>el表达式对运算符的支持</li><br>
    1+1=${1+1 }<br>
    10/5=${10/5 }<br>
    10 div 5=${10 div 5 }<br>
    10 % 3=${10 % 3 }<br>
    10 mod 3 = ${ 10 mod 3 }<br>
    <p>
    <li>测试empty,是否为空,如果为空返回true,不为空返回false</li><br>
    v1:${empty v1}<br>
    v2:${empty v2}<br>
    v3:${empty v3}<br>
    v4:${empty v4}<br>
    v5:${empty v5}<br>

</body>
</html>

页面显示:

这里写图片描述


EL 表达式的默认变量

一个 EL 表达式包含变量和操作符两个内容。任何存在于 JSP 作用范围的 JavaBean 都可以被转化成 EL 表达式来使用,它所包含的默认变量如下:

pageScope 、 requestScope 、 sessionScope 、 applicationScope

如果不指定范围,el默认的搜索顺序为pageScope—>applicationScope。如果知道变量在哪个对象里,则可以直接从对象中取得跳过搜索的过程。比如上面的例子,取hello字符串还可以写: ${requestScope.hello }



通过这些事例,可以看到我们完全无需管理变量的类型转换,在表达式内部都已经处理了。有了 EL 表达式,在 JSP 页面的编程变得更灵活,也更容易,简化JSP页面的功能。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值