JSTL和EL入门

547 El表达式原理讲解

01 EL表达式介绍

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

使用JSTL/EL的前提条件是:xxx.setAttribute();

${requestScope.msg} 相当于

<%

Object msg = request.getAttribute(“msg”);

if(msg!=null){

out.print(msg);

}

%>

02 EL表达式原理

直接写{msg} 底层实现!

EL的四个范围和JSP的四个范围对应,分别为pageContextScope、requestScope、sessionScope,applicationScope

Object value = null;
value = pageContext.getAttribute(key);
if(value==null){
       value = request.getAttribute(key);
       if(value==null){
             value = session.getAttribute(key);
              if(value == null){
                     value = application.getAttribute(key);
                      if(value==null){
                             value= "";
   } } }}return value;

加上作用域比较好!

03 EL获取对象属性的原理

${requestScope.emp.pwd} 底层如何实现?

<%

Employee emp = request.getAttribute(“emp”);

//获取对象对应的类

Class clazz = emp.getClass();

//通过属性获取属性对应的操作方法

Method method = clazz.getMethod(“get”+“P”+“wd”);

//开始执行

Object returnValue = method.invoke(emp);

%>

反射封装!

548 JSTL原理

01 JSTL表达式介绍

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开源的JSP标签库,是由apache的jakarta(雅加达)小组来维护的。

5个类别:

核心标签

格式化标签

SQL 标签

XML 标签

JSTL 函数

在这里插入图片描述

使用JSTL/EL的前提条件是:xxx.setAttribute();

如何下载最新版本的jstl这两个包?

maven仓库:https://mvnrepository.com/

在这里插入图片描述

549 JSTL练习A

1 引入jstl素材
<%@page import="com.bjsxt.entity.Employee"%>
<%@page import="java.sql.Date"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'jstlel.jsp' starting page</title>
    
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">    
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="This is my page">
   <!--
   <link rel="stylesheet" type="text/css" href="styles.css">
   -->

  </head>
  
  <body>
       <%
       //1.准备数据  
       int n=70;//基本类型
       double avgScore = 57.45678;//基本类型
       //Student stu = null;
       Employee  emp=new Employee();//引用类型
       emp.setEid(1);
       emp.setEname("张晓红");
       emp.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",emp);
       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>
</html>
2 使用JSTL和EL输出
分数:${r1}
分数:${requestScope.r1}
分数:70 分数:70
分数: ${requestScope.avgScore}
分数: 57.45678
如何保留两位小数?
分数:<fmt:formatNumber value="${requestScope.avgScore}"
							 maxFractionDigits="2" 
		></fmt:formatNumber>
分数: 57.45678 分数:57.46
姓名:${requestScope.stu.ename}
姓名:张晓红
出生年月:${requestScope.stu.birth}
出生年月:1999-12-12
不想输出1999-12-12 想输出1999年12月12日怎么做?
出生年月:<fmt:formatDate value="${requestScope.stu.birth}"
					   pattern="yyyy年MM月dd日"></fmt:formatDate>
出生年月:1999年12月12日

在这里插入图片描述

550 JSTL练习B

数组

String [] strs = {“Java”,“Oracle”,“JSP”,“HTML”};

<c:forEach items="${strs}" var="s">
 ${s}------------>
</c:forEach>
Java------------> Oracle------------> JSP------------> HTML------------>
特殊的字符串

String courses=“Java,Oracle,JSP,HTML,Servlet”;

<c:forEach items="${courses}" var="cou">
 ${cou}------------------------->
</c:forEach>
Java-------------------------> Oracle-------------------------> JSP-------------------------> HTML-------------------------> Servlet------------------------->
怎么实现的?
String courses2="Java#Oracle#JSP#HTML#Servlet";//特殊的字符串
<c:forEach items="${courses2}" var="cou">
			${cou}--------->
		</c:forEach>
Java#Oracle#JSP#HTML#Servlet--------->
发现#分割是不行的!这是为什么呢?
不是每一种牛奶都叫特伦舒!
如果字符串是逗号(,)分割是可以遍历取值,其他情况是不可以遍历的!
如何分割#?delims(分割)
 <c:forTokens items="${courses2}" delims="#" var="cou">
	  ${cou}--------->
  </c:forTokens>
Java---------> Oracle---------> JSP---------> HTML---------> Servlet--------->

551 JSTL练习C

List

List list = new ArrayList();//分配空间,没有元素
list.add(90);
list.add(80);

<c:forEach items="${list}" var="cou">
 ${cou}----->
</c:forEach>
90-----> 80----->
map

Map<String,String> map = new HashMap<String,String>();//Map
map.put(“cn”, “China”);
map.put(“fr”, “France”);

<c:forEach items="${map}" var="cou">
   ${cou}----->
</c:forEach>
cn=China-----> fr=France----->
如何取键值对?
<c:forEach items="${map}" var="cou">
			${cou.key}----->${cou.value}
		</c:forEach>
cn----->China fr----->France
下拉框

每页显示

5 10 15 20

条记录数

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

在这里插入图片描述

每页显示
<select>
   <c:forEach begin="10" step="5" end="40" var="size" varStatus="vs">
      <option>${vs.count}--${vs.index}</option>
   </c:forEach>
</select>
条记录数

在这里插入图片描述

<c:forEach items="${list}" var="cou" varStatus="vs">
 ${cou}----->${vs.count}++++++${vs.index}
</c:forEach>
90----->1++++++0 80----->2++++++1
vs.index-->代表下标!
${not empty str}
false
${not empty str3}
false
${not empty list2}
false
${not empty list3}
false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值