EL表达式
EL语法
-
1、EL语法由 $ 开始,跟上花括号{},在花括号中填写表达式
-
2、EL中使用 . 和 [] 运算符来存取数据
-
3、如果域对象的属性名中有特殊字符(如 . 等),则使用 [] 运算符会很方便
-
4、EL存取变量的方法很简单,例如${username},他的意思是出某一范围中名称为username的变量,因为我们并没有指定哪一个范围中的username,所以它的默认值会从page范围找,如果找不到,再依次到request、session、application中找,如果在中途找到username,就直接回传,不再继续找下去,但是如果全部范围内都为找到,那么就会回传null。
-
5、自动搜索顺序:
属性范围 | 在EL中的名称
— | —
Page | PageScope
Request | RequestScope
Session | SessionScope
Application | ApplicationScope -
5、指定取出哪一个范围内的变量
范例 | 说明 |
---|---|
${PageScope.username} | 取出Page范围内的username变量 |
${RequestScope.username} | 取出Request范围内的username变量 |
${SessionScope.username} | 取出session范围内的username变量 |
${ApplicationScope.username} | 取出application范围内的username变量 |
- 6、与范围有关的隐含变量
其中pageScope、requestScope、sessionScope、applicationScope 都是EL的隐含对象,可以很容易猜出他们的意思 - 7、与输入有关的隐含变量
- param:用于获取某一个请求参数
- paramValue:用于获取多个请求参数
- 8、其它隐含对象
- cookie
- header和headerValues:获取请求头
- initParam:可以获取当前web应用的初始化参数
- pageContext:pageContext即为PageContext对象,只要是只读取属性,就能一直读下去
- 获取contextPath
${pageContext.request.contextPath} 或 ${pageContext.session.id} 或
- 9、EL的关系运算符:关系运算符只能放在EL表达式中,如:
//这样写是错误的
${param.password} == ${param.password1}
//正确写法
${${param.password} == ${param.password1}}
- 10、empty 运算符:empty可以作用于一个运算符,若该集合不存在或该集合为空,其结果都返回true
简单标签(自定义标签)
- 自定义标签可以降低jsp开发的复杂度和维护量,利用自定义标签可以软件开发人员和页面设计人员合理分工 ,将具有共用特性的tag库用于不同的项目,体现了软件复用的思想
- 什么是自定义标签?
使用户自定义的一种jsp标记,当一个含有自定义标签的jsp页面被jsp引擎编译为servlet时,tag标签转化成了对一个称为标签处理类的对象的操作。于是当jsp页面被jsp引擎转化为servlet后,实际上tag标签被转化成了对tag类的处理的操作。
- 自定义标签定义:请参考idea项目JavaWeb_day01中的tag
- 通常情况下开发简单标签,只需要继承SimpleTagSupport类就行了
- 若标签存在标签体jsp引擎将把标签体封装成一个JspFragment对象,调用setJspBody()方法将JspFragment对象传递给标签处理器对象,若标签体为空,JSP引擎将不会调用setJspBody()。调用getJspBody()方法得到jsp页面的标签体对象jspFragment,调用jspFragment的invoke(Writer)方法,Writer为标签体内容的字符输出流,指定标签体的输出位置,如果invoke参数为null,将会将标签体的内容输出到页面。
- 来指定标签体的类型,可以有如下三种类型:
- empty:表示没有标签体
- scriptless:标签体可以包含 el表达式和jsp动作元素,但不能包含jsp脚本元素(如:<%=reques.getParamter(“name”)%>)
- tagdependent:标签体将不会被解析,即直接将标签体中的代码原封不动的传给标签解析类。
- 带有父标签的自定义标签:所有子标签相当于父标签的标签体
EL的自定义函数
- 在EL表达式中调用某个Java类的静态方法,但是这个静态方法需要在web项目中配置才能被EL表达式使用。这个Java类必须被public修饰,而且要配置的方法必须是 public 修饰的 static 方法
- EL自定义函数是为了简化jsp页面操作字符串。
JSTL:JSP标准标签库
- 五大类:1、核心标签库,2、I18N格式标签库,3、SQL标签库,
4、XML标签库,5、函数标签库 - 核心标签库
-
1、表达式操作
- 1.1、<c:out> :主要用来显示数据的内容,如<%=request.getParamter(“name”)%>
- <c:out> 的四个属性:
属性名 | 属性值代表的意思 | 值类型
—|---|—
value | 表示要显示出来的值 |Object
default | 如果value的值为空,则显示dafault的值|Object
escapeXml | 是否转换特殊字符,如 < 转换为<
|boolean- 1.2、<c:set> :主要用来将变量存储至JSP范围中或是JavaBean的属性中
-
2、流程控制<c:if>、<c:choose>、<c:when>、<c:otherwise>
*<c:if>:可以储存比较结果 -
3、迭代操作
- <c:forEach>
- <c:forEach>的属性
属性名 属性值代表什么 属性值是否可以是EL表达式 属性值的类型 属性的默认值 var 存放到指定的成员 否 String 无 items 被迭代的集合对象 是 集合或数组 无 varStatus 用来存放现在指到的相关成员的信息 否 String 无 begin 开始的位置 是 int 0 end 结束的位置 是 int 最后一个成员 step 每次迭代的间隔数 是 int 1 - varStatus:可以获取当前迭代元素的索引(index:集合从0开始),第几个(count:从1开始),是否是最后一个(last),是否是第一个(first)。
-
迭代遍历list集合
<% List<Customer> list = new ArrayList<>(); list.add(new Customer("1")); list.add(new Customer("2")); list.add(new Customer("3")); list.add(new Customer("4")); list.add(new Customer("5")); pageContext.setAttribute("list", list); %> <%-- ites表示要迭代的集合对象,var表示将每次遍历的对象,赋值给customer,后面就可以对其进行操作 --%> <c:forEach items="${pageScope.list}" var="customer"> ${customer.id} <br> </c:forEach>
-