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

一.EL表达式

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

1.语法

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

2.操作符:操作:属性,不是对象

. : 使用方便
[] : 如果是常量属性,需要使用双引号/单引号 引起来;比点操作符更加强大(可以访问数据,获取变量值)

  • []强大之处:
  • a.可以容纳一些 特殊符号 (. ? -)
  • b.[]可以容纳 变量属性 (可以动态赋值)
  • String x =“a”; $ {requestScope.a}等价于$ {requestScope[“a”]}等价于${requestScope[x]}
  • c.可以处理数组:${requestScope.arr[0] }
  • 获取map属性
    Map 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并且将首字母小写} //上面的就是

4.各内置对象的作用域

<%// 向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 :

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

其中prefix=“c” :前缀

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

1.通用标签库

1.赋值

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


${requestScope.name }

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

${requestScope.student.sname}  //取出studen对象sname属性值

给map对象赋值

${requestScope.countries.cn}  //取出countries对象cn属性值

注意 可以给不存在的变量赋值 (但不能给不存在的对象赋值)

2.显示
传统EL:$ {requestScope.student }
c:out方式: c:out显示不存在的数据:

  • true: //将a标签内容以文字形式显示
  • false: //显示链接

3.:删除属性

//赋值
${a} // 赋值后显示
//删除
${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++)
r e q u e s t S c o p e . n a m e s " > − {requestScope.names }" > - requestScope.names">{name }-

//相当于 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详细总结一

你可能感兴趣的:(jsp,servlet,java)