示例 2 : 作用域优先级 示例 3 : JavaBean概念 示例 4 : 获取JavaBean的属性 示例 5 : 结合JSTL的<c:forEach 示例 6 : 取参 示例 7 : eq
不同版本的tomcat是否默认开启对EL表达式的支持,是不一定的。
所以为了保证EL表达式能够正常使用,需要在<%@page 标签里加上isELIgnored="false" 使用EL表达式,非常简单 比如使用JSTL输出要写成 <c:out value="${name}" /> 但是用EL只需要 ${name} <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="name" value="${'gareen'}" scope="request" />
通过标签获取name: <c:out value="${name}" /> <br>
通过 EL 获取name: ${name}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:set var="name" value="${'gareen'}" scope="request" /> 通过标签获取name: <c:out value="${name}" /> <br> 通过 EL 获取name: ${name}
EL表达式可以从pageContext,request,session,application四个作用域中取到值,如果4个作用域都有name属性怎么办?
EL会按照从高到低的优先级顺序获取 pageContext>request>session>application <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="name" value="${'gareen-pageContext'}" scope="page" />
<c:set var="name" value="${'gareen-request'}" scope="request" />
<c:set var="name" value="${'gareen-session'}" scope="session" />
<c:set var="name" value="${'gareen-application'}" scope="application" />
4个作用域都有name,优先获取出来的是 : ${name}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:set var="name" value="${'gareen-pageContext'}" scope="page" /> <c:set var="name" value="${'gareen-request'}" scope="request" /> <c:set var="name" value="${'gareen-session'}" scope="session" /> <c:set var="name" value="${'gareen-application'}" scope="application" /> 4个作用域都有name,优先获取出来的是 : ${name}
EL可以很方便的访问JavaBean的属性,那么JavaBean是什么呢?
JavaBean的标准 1. 提供无参public的构造方法(默认提供) 2. 每个属性,都有public的getter和setter 3. 如果属性是boolean,那么就对应is和setter方法 比如示例代码中的Hero类,默认提供了一个无参的public的构造方法。 同时每个属性都有getter和setter package bean;
public class Hero {
public int id;
public String name;
public float hp;
public int damage;
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 float getHp() {
return hp;
}
public void setHp(float hp) {
this.hp = hp;
}
public int getDamage() {
return damage;
}
public void setDamage(int damage) {
this.damage = damage;
}
}
获取JavaBean的属性,只需要通过.符号操作就可以了。
像这样 ${hero.name} ,就会自动调用getName方法了 注: 如果属性是boolean类型,那么就会自动调用isXXX方法了 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" import="bean.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
Hero hero =new Hero();
hero.setName("盖伦");
hero.setHp(616);
request.setAttribute("hero", hero);
%>
英雄名字 : ${hero.name} <br>
英雄血量 : ${hero.hp}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" import="bean.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% Hero hero =new Hero(); hero.setName("盖伦"); hero.setHp(616); request.setAttribute("hero", hero); %> 英雄名字 : ${hero.name} <br> 英雄血量 : ${hero.hp} <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
List<String> heros = new ArrayList<String>();
heros.add("塔姆");
heros.add("艾克");
heros.add("巴德");
heros.add("雷克赛");
heros.add("卡莉丝塔");
request.setAttribute("heros",heros);
%>
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
<td>编号</td>
<td>英雄</td>
</tr>
<c:forEach items="${heros}" var="hero" varStatus="st" >
<tr>
<td>${st.count}</td>
<td>${hero}</td>
</tr>
</c:forEach>
</table>
EL表达式还可以做到request.getParameter("name") 这样的形式获取浏览器传递过来的参数
先把jstl.jsp代码改为如例所示,然后访问如下地址 http://127.0.0.1/jstl.jsp?name=abc 可以观察到获取了参数 name <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%>
${param.name}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%> ${param.name} <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
request.setAttribute("killNumber", "10");
%>
c:if 的用法,运行结果:
<c:if test="${killNumber>=10}">
超神
</c:if>
<c:if test="${killNumber<10}">
还没超神
</c:if>
<br>
c:choose 的用法,运行结果:
<c:choose>
<c:when test="${killNumber>=10}">
超神
</c:when>
<c:otherwise>
还没超神
</c:otherwise>
</c:choose>
<br>
EL表达式eq的用法,运行结果:
${killNumber ge 10? "超神":"还没超神" }
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2022-01-05
IF循环中结构体里,这几个符号是啥意思,看不明白。{ %> <% },麻烦解释一下。
2021-04-20
这个三目表达式,可以嵌套吗?
2020-09-14
兄弟们 你们最后四个表达式可以用吗,为什么我这里用不了?
2020-05-29
只能通过get方法获取属性值
2020-01-22
听说jsp马上要淘汰了,就过一遍好了。
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 15 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|