1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java Web - EL表达式和JSTL标签库

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

时间:2022-07-27 21:29:09

相关推荐

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表达式在作用域对象中查找的优先级为(上高下低):

pageContextrequestsessionapplication

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

${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标签的使用,下面的网站,给出了总结,其中核心标签使用的比较多,应该作为学习重点

/jsp/jsp-jstl.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。