EL(Expression Language)
EL内置11个对象
四大域对象 : pageContext requestScope sessionScope applicationScope
param//等同于 request.getParamter();
paramValues//等同于 request.getParamterValues();
header//request.getHeader();
headerValues//等同于 request.getHeaders();
initParamrequest.getHeaders(name)// this.getServletContext().getInitParameter();
cookie//等同于 request.getCookies();
pageContext// pageContext获得其他八大对象
//主要用作取值 简化jsp页面java代码
request.getAttribute("test"); 等同于 ${requestScope.test}
//同理${} 也可以取出其他域数据
${pageContextScope.test}--取出pageContext域名为test的值
${sessionScope.test}--取出session域名为test的值
${application.test}--取出application域名为test的值
//简写方式 依次从pageContext session application找值 找到后停止向后寻找
${test}
//request.setAttribute("text","value");
${requestScope.test}--value
/*
* User user = new User();
* user.setName = "lilei";
* session.setAttribute("text",user);
*/
${sessionScope.user.name}--lilei
/*
* List<User> list = new List<User>();
* User user_1 = new User();
* User user_2 = new User();
* user_2.setName = "lilei";
* application.setAttribute("text",list);
*/
${application.list[1].name}--lilei 下标从0开始
${header["host"]} 等同于 ${header.host}
而对象的参数有
'}' '.' '[' '>' 'gt' '<' 'lt' '>=' 'ge' '<=' 'le' '==' 'eq'
'!=' 'ne' '&&' 'and' '||' 'or' '*' '+' '-' '/' 'div' '%' 'mod'
时必须使用[]取值
${header["User-Agent"]}
常用
${pageContext.request.contextPath} 等同于 request.getContextPath();
//getRequest();获取的是ServletRequest 而不是HttpServletRequest 不能直接获取ContextPath
<%=pageContext.getRequest().getContext()%>//不能实现
${1+1}--页面显示2
${1==1?true:false}--页面显示true
//判断对象是否为null 为null返回true
${empth ""}--空字符串不为null 但是EL表达式识别为null 除此之外全都与java对应
EL没有处理业务逻辑能力 只能作显示数据使用 so ?
JSTL(JavaServer Pages Standard Tag Library) 一套库的集合 共有五套
标签库 | 标签库的URI | 前缀 |
---|---|---|
Core | http://java.sun.com/jsp/jstl/core | c |
I18N | http://java.sun.com/jsp/jstl/fmt | fmt |
SQL | http://java.sun.com/jsp/jstl/sql | sql |
XML | http://java.sun.com/jsp/jstl/xml | x |
Functions | http://java.sun.com/jsp/jstl/functions | fn |
使用jstl处理业务逻辑 除Core外已经废弃 项目需要导入jstl.jar和standard.jar
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
使用jsp的taglib指令 引入jstl
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
jstl常用标签
<!-- 判断标签 -->
<c:if test=""></c:if>--test属性值为 boolean值 为true时进入标签体
<!-- 循环标签 -->
传统写法及其于java代码的对应关系
/*
* for(int i=0;i<=5;i++){System.out.println(i);}
*/begin--起始数值 end--结束数值 var--begin至end 每次循环会赋值给var(相当于i++)
<c:forEach begin="0" end="5" var="i"></c:forEach><!--注意注意此时是<=5-->
常用写法及其于java代码的对应关系
/*
* for(User user:users){System.out.println(i);}
*/items--集合或数组 var--items中的每一项赋值给var(放在pageContext域) varStatus--循环的状态和次数
<c:forEach items="${users}" var="user" varStatus="vs">--不用做非空判断 不会有空指针问题
${vs.count}<!--此时代表循环的次数 作页面序号作用-->+${user.username}
</c:forEach>