07.EL表达式与JSTL

EL表达式概述

EL表达式是一种可以嵌套在jsp内部的一种表达式,它能代替jsp页面中输出脚本的编写,比<%= %>更为简单高效。

EL表达式的作用

  • 从域对象中查找指定的数据。
  • 内置对象使用
  • 执行运算符

EL表达式的语法

${
    
    EL表达式内容}

el表达式中使用.和[ ]进行数据导航。
.与[]效果差不多,但是如果存在特殊字符需要用[]获取,[]可以获取集合和数组中数据。
${ user.name} 和 ${user[“name”]} 一样
如果存在这样的na-me的属性需要使用[], ${user[“na-me”]}

EL表达式读取数据域中数据

四个数据域对象:

HttpServletContext  application;   整个项目
HttpSession         session;       一次会话
HttpServletRequest  requst ;        一次请求
HttpPageContext     pageContext;     当前页面
 <%
        application.setAttribute("name", "zhangsan");
        session.setAttribute("age", "21");
        request.setAttribute("sex", "男");
        pageContext.setAttribute("class", "java01");
         pageContext.setAttribute("name", "lisi");
        
%>
//第一种获取方式,指定从哪个域对象中取
    ${
    
    applicationScope.name}
    ${
    
    sessionScope.age}
    ${
    
    requestScope.sex}
    ${
    
    pageScope.class}
     ${
    
    pageScope.name}
//不指定域对象,它会从小到大的域对象中取寻找键,找到了就返回,如果找不到对应的键,返回空串-
${
    
    name}  lisi
${
    
    name}  “”
//会返回pageContext中数据:lisi

EL表达式读取对象

el表达式读取对象,对象的属性必须要有get方法才能读取,它是将get字符串后面的字符串当作可获取的键,get字符串后第一个首字母需大写。
如你有一个学生类,学生类中有一个name属性。

public class Student{
    
    
	private String name;
	//1.没有get,无法${student.name}获取
	public String name(){
    
    
		return name;
	}
	//2.有get,后面不是Name,后一个字母必须大写,无法${student.name}获取
	public String getname(){
    
    
		return name;
	}
	//可以${student.name}获取
	public String getName(){
    
    
		return name;
	}
	//可以通过${student.username}获取name属性值
	public String getUsername{
    
    
		return name;
	}
}

EL表达式读取map集合

EL表达式读取 map集合

<%
  Map<String, User> map= new HashMap<String, User>();
        map.put("u1", new User("baoqiang1",35,"male",new Birthday(1988,12,23)));
        map.put("u2", new User("baoqiang2",35,"male",new Birthday(1999,12,23)));
        map.put("u3", new User("baoqiang3",35,"male",new Birthday(1900,12,23)));
        request.setAttribute("map", map);
 %>
    ${
    
    requestScope.map.u1.name}
    ${
    
    map.u1.name}
    ${
    
    map.u3.birthday.month}

EL表达式-运算符


 <%--EL表达式的运算符--%>
    <%
        int num = 0;
        request.setAttribute("num", num);
    %>
    <%=num*10%>
    ${
    
    3+2}
    <%--El表达式使用的变量必须放在域中--%>
    ${
    
    num+1}
    <hr/>
    ${
    
    3>2}
    <hr/>
   <%--
     empty关键字
         String 类型:  空串和null都为空
         Java Bean对象:   null为空
         集合         :  集合中没有数据,则为空
   --%>
    <%
        String str = null;
        User user = null;
        ArrayList<String> list = new ArrayList<String>();
        list.add("hello");
        request.setAttribute("list", list);
    %>
    ${
    
    empty list}

Jstl概述

JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。
JSTL标准标准标签库有5个子库,目前常使用的是他的核心库
在这里插入图片描述

Jstl标签库的使用

  1. 引入jstl

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"   prefix="c"%>
  1. <c:if>标签
    起到java代码的判断的作用
    在这里插入图片描述
<%--使用JSTL来简化以上代码--%>
    <%
        int a = 200;
        int b = 500;
        request.setAttribute("a", a);
        request.setAttribute("b", b);
    %>
    <%--
       test:测试条件成立
       var:  用来保存条件的结果,true或者false
       scope: 表示将结果存到哪个域中
    --%>
    <c:if test="${a > b }" var="bl" scope="session">
        <h1 style="color: green">a大于b</h1>
        <div></div>
    </c:if>
    <c:if test="${!(a > b) }">
        <h1 style="color: red">a小于b</h1>
    </c:if>

forEach标签
起到java代码的for循环作用
在这里插入图片描述

<%--
     for标签:
        1:普通for
         for(int i=0; i<5; i++)
         begin: 表示索引开始
         end  :表示索引结束,包含结束值
         var  :循环变量  i,  jsp会自动的将该值存放在pageContext域中
         step :每一次循环的增量
 --%>
        <%
            request.getParameter("username");
            int num = 10;
            request.setAttribute("num", num);
        %>
        <c:forEach begin="0" end="${num}" var="i" step="1">
                <h1 style="color: red;">helloword${
    
    i}</h1>
        </c:forEach>

 <%--
 
    
           items="${list}" 从域中根据list这个键获取集合对象
           var="str"       每次循环时,jstl会自动将str的值存入pageContext域
           varStatus="vs"  这个参数会记录当前循环的一些状态信息
                    vs.count  当前这次迭代从0开始的迭代索引,可以获取当前循环的次数
                    vs.index  当前这次迭代从0开始的迭代索引。 
                    vs.current:当前这次迭代的(集合中的)项。 
                    first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。
          			last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。 
         			begin:begin属性的值。 
			        end:end属性的值 
         			step:step属性的值 
        --%>
  <%
            ArrayList<User> list2= new ArrayList<User>();
            list2.add(new User("liuyan1",33,"female",new Birthday(1991,12,21)));
            list2.add(new User("liuyan2",34,"female",new Birthday(1992,12,21)));
            list2.add(new User("liuyan3",38,"female",new Birthday(1993,12,21)));
            request.setAttribute("list2", list2);
 %>
 <c:forEach items="${list}" var="str" varStatus="vs">
             <%--${
    
    str}--%>
            现在是第${
    
    vs.count}次循环<br/>
 </c:forEach>
 
   <c:forEach items="${list2}" var="user">
                ${
    
    user.name} ----${
    
    user.birthday.year}<br/>
   </c:forEach>
``	`

猜你喜欢

转载自blog.csdn.net/lglglglglgui/article/details/108607994
今日推荐