jsp详细总结二(EL表达式,JSTL)

一.EL表达式

做用:EL :为了消除jsp中的Java代码html

1.语法java

${EL表达式}
a.EL不须要导包
b.在el中调用属性,实际上是调用的getXxx()方法
${范围.对象.属性.属性的属性 }
${requestScope.student.address.schoolAddress }数组

2.操做符:操做:属性,不是对象浏览器

. : 使用方便
[] : 若是是常量属性,须要使用双引号/单引号 引发来;比点操做符更增强大(能够访问数据,获取变量值)session

  • []强大之处:
  • a.能够容纳一些 特殊符号 (. ? -)
  • b.[]能够容纳 变量属性 (能够动态赋值)
  • String x =“a”; $ {requestScope.a}等价于$ {requestScope[“a”]}等价于${requestScope[x]}
  • c.能够处理数组:${requestScope.arr[0] }
  • 获取map属性
    Map<String,Object> map = new HashMap<>();
    map.put(“cn”,“中国”);
    map.put(“us”,“美国”);
    request.setAttrubute(“map”,map);
    ${requestScope.map.cn}

3.经过EL获取JSP 九大内置对象
${pageContext }
${pageContext.request }
${pageContext.sessoin }
${pageContext.方法名去掉()和get而且将首字母小写} //上面的就是app

4.各内置对象的做用域jsp

<%// 向page做用域存入内容
    pageContext.setAttribute("name", "张三"); // 同一页面中的信息
    request.setAttribute("name", "李四");    // 一次请求有效的信息(例如servlet存入结果,jsp获取结果)
    session.setAttribute("name", "王五"); // 每一个用户(浏览器)独有的信息(例如购物车信息)
    application.setAttribute("name", "赵六"); // 适合放全局信息(城市信息, 类别信息)
    %>
 
    <!-- 从page做用域获取内容-->
    <%= pageContext.getAttribute("name")%>
    <!--  从page做用域获取内容(推荐) -->
    ${ pageScope.name}
 
    <!-- 从request做用域取-->
    <%= request.getAttribute("name")%>
    <!-- 从request做用域取(推荐)-->
    ${ requestScope.name}
 
    <!-- 从session做用域取值 -->
    <%= session.getAttribute("name")%>
    <!-- 从session做用域取值(推荐) -->
    ${ sessionScope.name}
 
    <!-- 从application做用域取值 -->
    <%= application.getAttribute("name")%>
    <!-- 从application做用域取值(推荐) -->
    ${ applicationScope.name}
 
    <hr/>
    <!-- 在el表达式取做用域变量时,不加前缀,先搜索pageScope, 再搜索requestScope, 继续搜索sessionScope, 再搜索applicationScope-->
    ${ name}

二.JSTL (比EL更增强大)

  • 须要引入2个jar :jstl.jar standard.jar

引入tablib :spa

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

其中prefix=“c” :前缀.net

核心标签库: 通用标签库、条件标签库、 迭代标签库code

1.通用标签库

1.<c:set>赋值

i:
在某个做用域之中(4个范围对象),给某个变量赋值
<%-- request.setAttribute(“name”, “zhangsan”) ; --%>

<c:set var=“name” value=“zhangsan” scope=“request”/>
${requestScope.name }

<c:set var=“变量名” value=“变量值” scope=“4个范围对象的做用域”/>

给普通对象赋值
在某个做用域之中(4个范围对象),给某个对象的属性复制 (此种写法,不能指定scope属性)

${requestScope.student.sname}  //取出studen对象sname属性值
<c:set target="${requestScope.student}" property="sname"  value="zxs" />

给map对象赋值

${requestScope.countries.cn}  //取出countries对象cn属性值
<c:set target="${requestScope.countries}" property="cn"  value="中国" />

<c:set target=“对象” property=“对象的属性” value=“赋值” />

注意 <c:set>能够给不存在的变量赋值 (但不能给不存在的对象赋值)

2.<c:out>显示
传统EL:$ {requestScope.student }
c:out方式:<c:out value ="$ {requestScope.student }"
c:out显示不存在的数据:<c:out value="$ {requestScope.stu}>" default=“zs-23”>

  • true:<c:out value=‘百度’ default=“当value为空的,显示的默认值” escapeXml=“true” /> //将a标签内容以文字形式显示
  • false:<c:out value=‘百度’ escapeXml=“false” /> //显示连接

3.<c:remove >:删除属性

<c:set var=“a” value=“aaa” scope=“request”/> //赋值
${a} // 赋值后显示
<c:remove var=“a” scope=“request”/> //删除
${a} //删除后再显示

2.条件标签库

1.选择
单重选择

<c:if test="${6>2}" var = "result" scope="request" ></c:if>

if else if… esle if… else /switch

<c:choose>
	<c:when test="${requestScope.role == '老师'}">
				老师代码 .... 
	 </c:when>
	<c:when test="${requestScope.role == '学生'}">   ==能够用 eq 代替
				学生代码....
	</c:when>
	<c:otherwise>  
				管理员其余人员....
	 </c:otherwise>
</c:choose>

3.迭代标签库(循环)

for(int i=0;i<5;i++)
<c:forEach var=“name” items=" r e q u e s t S c o p e . n a m e s " > − {requestScope.names }" > - requestScope.names">{name }-
</c:forEach>

//至关于 for(int i=0;i<5;i++)
<c:forEach begin="0" end="5" step="1" varStatus="status" >
	${status.index}
</c:forEach>

//至关于for(String str:names)
<c:forEach var="name" items="${requestScope.names}">
	${name}
</c:forEach>

<c:forEach var="student" items="${requestScope.students }" >
		${student.sname }-${student.sno }	
</c:forEach>

jsp详细总结一

相关文章
相关标签/搜索