Java Web - EL表达式和JSTL标签库

在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在request中写入键值对),session,ServletContext对象来实现。那么在JSP中如何使用这些数据?

一 传统方式的数据获取

传统方式直接在JSP页面中使用java脚本段语句,例如使用请求转发过来的数据:

对于普通的字符串

<p><%=request.getParameter("key")%></p>
<p><%=request.getAttribute("key")%></p>

对于对象而言

<p><%=((User)request.getAttribute("key")).getName()%></p>

对于字符串List集合而言

<p><%=((List)request.getAttribute("key")).get(0)%></p>

对于对象List集合而言

<p><%=((User)((List)request.getAttribute("key")).get(0)).getName()%></p>
//or
<p><%=((List<User>)request.getAttribute("key")).get(0).getName()%></p>

对于key和value都是字符串的Map集合而言

<p><%=((Map)request.getAttribute("key")).get("mapKey")%></p>

对于key为字符串value为对象的Map集合而言

<p><%=((User)((Map)request.getAttribute("key")).get("mapKey")).getName()%></p>

使用传统方式,可以看到缺点有以下这些:

  • 需要导入包
  • 需要强转
  • 获取数据的代码过于麻烦

所以我们可以使用EL表达式来取代上面传统方式,目的在于简化JSP的数据获取,它也可以配合JSTL来使用,JSTL将在下面讲解。

使用EL表达式获取作用域中的数据有一个需要注意的地方:只能使用作用域中的数据,也就是只能取session,pageContext,request,application对象中的数据,他们是JSP九大内置对象中的四种,如果找到则显示,否则不显示,也没有其他动作。

二 使用EL表达式在JSP中获取数据

EL表达式语法:
${表达式}

对于request对象的特殊性:

我们知道,request对象,可能原本就包含一些数据,也就是用户提交的一些数据,对于这些数据我们需要用下面的语法来获取数据:

  • param.键名
    对于同键不同值的情况,例如多选框:
  • paramvalues.键名 返回数组

通过setAttribute方法存储到作用域对象中的数据

如果存储的是普通字符串则直接返回。

  • ${键名}

但是如果是对象,则返回对象
普通对象

  • $(键名.属性名.属性名…)

集合对象

  • list集合 ->>>>${键名[角标]}
  • map集合 ->>>>${键名.map集合存储的键名}

所以传统方式的查询可以改成:

对于普通的字符串

<p>${param.uname}</p>
<p>${str}</p>

对于对象而言

<p>${userName.name}</p>

对于字符串List集合而言

<p>${listName[0]}</p>

对于对象List集合而言

<p>${listName[0].name}</p>

对于key和value都是字符串的Map集合而言

<p>${mapName.mapKey}</p>

对于key为字符串value为对象的Map集合而言

<p>${mapName.mapKey.name}</p>

EL表达式在作用域对象中查找的优先级为(上高下低):

  • pageContext
  • request
  • session
  • application

如果在高优先级中找到的话,下面的作用域就不再查找了。如果需要指定查找的作用域,则需要这样写:

${pageScope.hello}
${requestScope.hello}
${sessionScope.hello}
${applicationScope.hello}

三 EL表达式的其他作用

EL表达式不单可以用来获取数据,也可以有其他用途

1 运算

逻辑运算

${a?man:woman}

这里到作用域中查看a所对应的值,如果为true则为man,否则为woman

算术运算

${1+"2"} //输出为3

+表示加法运算,不表示字符连接

EL的空值判断

request.setAttribute("s", "");
request.setAttribute("s1", new User());
request.setAttribute("s2", new ArrayList());
request.setAttribute("s3", new HashMap());
${empty s} //返回true
${empty s1} //返回false,因为User对象中的数据有默认值
${empty s2} //返回true
${empty s3} //返回true
2 获取请求头数据
${header}//返回所有请求头数据
${header["user-agent"]} //返回指定键名的请求头数据
//同键不同值
${headerVlues["accept-language"][0]} 
3 获取Cookie数据
//我们假设cookie中有这么一项: cookie:uid=1
${cookie} //返回所有cookie对象的map集合
${cookie.uid} //返回指定的cookie对象
${cookie.uid.name} //返回cookie对象存储数据的值 uid
${cookie.uid.value} //返回cookie对象存储数据的值 1

四 JSTL标签库

我们常常会避免在JSP中的HTML代码域写过多的java逻辑代码,因为在JSP中写业务逻辑的时候比较复杂,不单单是看着复杂,而且写完后也不好修改。因此JSTL就诞生了,JSTL将提升在JSP页面逻辑代码的编码效率。它的作用就像是让我们在JSP中编写代码更加像在编写java代码一样。在学习后JSTL后,你应该不用在JSP的HTML代码域中掺和java代码了。

JSTL是EL表达式的扩展,是一种标签语言,不过它不是JSP的内置标签,所以需要我们自己导入JAR包,来识别这种标签。

关于JSTL标签的使用,下面的网站,给出了总结,其中核心标签使用的比较多,应该作为学习重点
https://www.runoob.com/jsp/jsp-jstl.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值