javaee的OA项目(八)EL表达式和JSTL表达式 学习,是什么,为什么,如何使用的角度进行学习

2021-06-22 20:55:05 浏览数 (1)

目录

  • 回顾
  • 使用EL表达式和JSTL表达式 的 前提
  • EL表达式 是什么
  • JSTL表达式是什么
  • 为什么要使用表达式
  • EL表达式和JSTL表达式 区别
  • EL表达式原理
  • EL获取对象属性的原理
  • EL和JSTL常用标签(用案例进行学习)

回顾

利用estl语句进行计算一个班的男生和女生的人数。思路是,在jsp页面定义一个变量,之后判断遍历出来的学生的性别,如果是男,变量加一

以上是之前我们使用过的这些表达式,现在开始系统的学习

使用EL表达式和JSTL表达式 的 前提

后端返回到jsp页面的时候,需要使用JSTL/EL的前提条件是:xxx.setAttribute(); 也就是设置了数据,这个数据前端需要拿过来使用

EL表达式 是什么

E L(Expression Language)目的:为了JSP写起来更简单。灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。

使用JSTL/EL的前提条件是:xxx.setAttribute(); 这句话的意思是,只有后端在返回给jsp页面的时候,给设置了值,jsp页面要取出值的时候,我们就可以在jsp页面获取到后端传到前段的值

总结: 就是通过这个表达式获取到后端传到前段的数据

JSTL表达式是什么

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开源的JSP标签库,是由apache的jakarta小组来维护的。根据JSTL标签所提供的功能,可以将其分为5个类别。 核心标签 格式化标签 SQL 标签 XML 标签 JSTL 函数 使用JSTL/EL的前提条件是:xxx.setAttribute();

这些标签是人家定义的,我们只需要在jsp页面引入,使用人家的标签,我们就可以在jsp页面简单的操作后端传到前段的数据。

记住: 这个jstl有5个类型的标签库

引入的每一个标签库,里面都有自己的标签,我们学这个表达式,就是学习如何使用这些标签。

总结: 就是通过这个表达式,进行操作这个el表达式获取到的数据,比如遍历数据

为什么要使用表达式

如果我们不使用这个表达式,之前我们自己写的jsp页面,要获取后端传到前段的数据,需要自己写小脚本。就是这样

用以上的方式获取到数据,但是这样java代码和HTML代码就混在一起了,为了解决这个问题,就有了一个新的技术,就是这个表达式,只需要引入之后,使用人家规定的表达式,就可以轻松的获取到后端传到前段的数据。

总之: 就是使用表达式代替之前写小脚本

EL表达式和JSTL表达式 区别

EL表达式 是获取后端传回jsp页面的数据

jsp页面的以下这种:

JSTL表达式 是操作传回的数据,他就是一个标签库,根据这些标签,进行操作,比如遍历

这种标签的就是JSTL表达式

EL表达式原理

EL的四个范围和JSP的四个范围对应,分别为pageContextScope、requestScope、sessionScope,applicationScope。 也就是后端传回来的数据,jsp页面会使用这4个接收到,只要在jsp页面从这4个里面就可以获取到数据

jsp页面如果不写这4个作用域,直接获取

这样也是可以获取到的,底层会把4个里面都找一遍。

EL获取对象属性的原理

底层采用了反射机制 调用的是相应属性的getter方法,而不是属性

代码语言:javascript复制
request.setAttribute(“stu”, stu2);
${requestScope.stu.name }
//获取对象
Object value =request.getAttribute(“stu”);
//获取对象对应的类
Class clazz = value.getClass();
//通过属性获取属性对应的操作方法
Method method = clazz.getMethod("get" "N" "ame");
//开始执行
Object returnValue = method.invoke(value);

EL和JSTL常用标签(用案例进行学习)

我们说了,学习JSTL表达式,就是学习人家定义的标签咋使用,现在我们用案例进行学习标签,强化学习。

第一步:写一个实体类

第二步: 写一个jsp页面,将实体类导入,将jstl 标签库也导入

第三步,在jsp页面准备数据, 在小脚本里面创建对象,准备数据

代码语言:javascript复制
<body>
    	<%
    	//1.准备数据  
     	int n=70;//基本类型
     	double avgScore = 57.45678;//基本类型
     	//Student stu = null;
    	Student stu = new Student();//引用类型
    	stu.setId(1);
    	stu.setName("张晓红");
    	stu.setBirth(Date.valueOf("1999-12-12"));
    	
    	String [] strs = {"Java","Oracle","JSP","HTML"};//数组
    	String courses="Java,Oracle,JSP,HTML,Servlet";//特殊的字符串
    	String courses2="Java#Oracle#JSP#HTML#Servlet";//特殊的字符串
    	String str = null;
    	String str3 = "";
     	List list = new ArrayList();//分配空间,没有元素
     	list.add(90);
     	list.add(80);
     	List list2 =null;//没有分配空间
     	List list3 =new ArrayList();//分配空间,没有元素  size()==0
     	Map<String,String> map = new HashMap<String,String>();//Map
     	map.put("cn", "China");
     	map.put("fr", "France");

		//setAttribute
		request.setAttribute("r1",n);
		request.setAttribute("avgScore",avgScore);
    	request.setAttribute("stu",stu);
    	request.setAttribute("strs",strs);
    	request.setAttribute("courses",courses); 
    	request.setAttribute("courses2",courses2);  
    	request.setAttribute("now",new java.util.Date());     	
    	request.setAttribute("list", list);
    	request.setAttribute("list2", list2);  
    	request.setAttribute("list3", list3);    
        request.setAttribute("map", map);    	
    	 	
    	request.setAttribute("str", str);
    	request.setAttribute("str3", str3);
    	//2.使用JSTL和EL输出    	
    	 %>
    	
  
  </body>

第四步: 因为已经在小脚本里面 ,根据 request.setAttribute(“map”, map);这个语句设置了值,相当于后端在request对象里面设置了值,在jsp页面要获取,那么如何获取

后端在request里面获取了对象,前端用requestScope这就可以获取数据

代码语言:javascript复制
<h2>EL和JSTL表达式</h2>
		n:${requestScope.r1} <br/>

		分数:${requestScope.avgScore}<br/>

		分数:<fmt:formatNumber value="${requestScope.avgScore}" maxFractionDigits="3"></fmt:formatNumber><br/>     这个是进行格式化的操作,maxFractionDigits属性是设置保留几位小数



获取到对象里面的东西

		姓名:${stu.name} <br/>

		生日:${stu.birth}<br/>

		生日:<fmt:formatDate value="${stu.birth}" pattern="yyyy年MM月dd日"></fmt:formatDate><br/>    对生日进行格式化

		<hr/>

遍历strs这个数组
		<c:forEach items="${strs}" var="st">
			${st}--->
		</c:forEach>

		<hr/>
		<c:forEach items="${courses}" var="cou">
			${cou}--->
		</c:forEach>
		<hr/>
		<c:forEach items="${courses2}" var="cou2">
			${cou2}-->
		</c:forEach>
		<hr/>

"Java#Oracle#JSP#HTML#Servlet";//特殊的字符串
		<c:forTokens items="${courses2}" delims="#" var="cou">
			${cou}--->
		</c:forTokens>

		<hr/>
		<c:forEach items="${list}" var="li">
			${li}-->
		</c:forEach>
		<hr/>

获取键值对
		<c:forEach items="${map}" var="m">

			${m.key}-${m.value}

		</c:forEach>

		<hr/>




		每页显示
		<select>
			<c:forEach begin="10" end="50" step="10" var="size">
				<option>${size}</option>
			</c:forEach>
		</select>
		条记录

判断st是否为空   返回boolean值
		${empty st}      --> 等价于         (${st==null}||${st==''})
		${not empty  st}

0 人点赞