JavaWeb 16 EL表达式与JSTL

阅读 164

2022-04-17

目录

一.jsp内置对象之域对象

1.1 概述

1.2 域对象

1.3 域对象的作用

二.EL表达式

2.1 什么是EL表达式

2.2 EL表达式的功能

2.3 EL表达式的语法

2.5 EL运算符

三.JSPL标签

3.1 JSPl中常用的标签

3.2 使用JSPL标签的步骤

3.3 使用JSPL标签


一.jsp内置对象之域对象

1.1 概述

主要负责在不同web资源之间进行数据交换。由于不同的web资源之间需要共享数据,所以就有了域对象。

1.2 域对象

pageContext:属性的作用范围仅限当前的jsp页面,如果跳到别的jsp页面无效(范围最小)

request:属性的作用范围仅限同一个请求(转发有效)

session:属性的作用范围仅限于一次会话,浏览器打开直到关闭称为一次会话(在此期间会话不失效)

application:属性的作用范围仅限于当前web应用,服务器为关闭或重启,数据有效(范围最大)

1.3 域对象的作用

 该四个域对象的作用都是用于存储数据。

1.4 域对象的使用方法

 保存数据:

pageContext.setAttribute(arg0, arg1)  arg0:名字  arg1:值

 application.setAttribute("msg1","你好啊我是application");
 session.setAttribute("msg2","我是session");
 request.setAttribute("msg3","我是requst");
 pageContext.setAttribute("msg4", "我是pageConext");

获取数据: 

  pageContext.getAttribute(""); 

application.getAttribute("msg1");
 session.getAttribute("msg2");
 request.getAttribute("msg3");
pageContext.getAttribute("msg4");

清除数据

removeAttribute("msg1") 

二.EL表达式

2.1 什么是EL表达式

  EL即Expression Language(表达式语言)

2.2 EL表达式的功能

   替代jsp页面中的复杂代码,其实就是代替<%= %>

2.3 EL表达式的语法

     ${bean.name} 实质是调用bean的getName()方法

     ${name} 

  注意::EL表达式必须是从域对象中取值,不能完全替代<%= %>的取值方式

2.4 EL表达式的运用 

  •   先在域对象中存储值
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

   <!-- 
    先将驱动包导入
    
    jsp内置对象之域对象:
    1.application 属性的作用范围仅限于在当前web项目中。(范围最大)
    2.session     属性的作用范围权限于一次会话,浏览器打开关闭为一次会话,如果重新在打开浏览器,原本在里面的数据都没有啦。
    3.request     属性的作用范围只限于同一个请求(转发才有效)
    4.pageContext 属性的作用范围只在当前页面有效(范围最小)
     这四个都可以存储数据
    -->
    
     <%
     application.setAttribute("msg1","你好啊我是application");
     session.setAttribute("msg2","我是session");
     request.setAttribute("msg3","我是requst");
   
     %>  
     <jsp:forward page="test02.jsp"></jsp:forward>
  •  使用EL表达式,取出域对象中的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("msg4","我是pageContext");
 
%>
 application:${msg1}
 <br>
 session:    ${msg2}
 <br>
 request:    ${msg3}
 <br>
 pageContext:${msg4}
</body>
</html>
  •  运行效果

 当我们在四个域对象中存入的属性名一样时 

  •   先往域对象中存入相同的属性名
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
     application.setAttribute("msg","application");
     session.setAttribute("msg","session");
     request.setAttribute("msg","requst"); 
%>
     
 <jsp:forward page="test04.jsp"></jsp:forward>
  •  用EL表达式取值
<%@page import="java.util.ArrayList"%>
<%@page import="com.yjx.pojo.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
  pageContext.setAttribute("msg","我是pageContext");
%>
  ${msg}

</body>
</html>
  •  呈现效果

      取出的值: 我是pageContext

      原因:他会从最小的域对象中取

  •  使用EL中的隐含对象(pageScope、requestScope、sessionScope、applicationScope)来取值 

   代码如下:

<%@page import="java.util.ArrayList"%>
<%@page import="com.yjx.pojo.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
  pageContext.setAttribute("msg","我是pageContext");
 
%>
  ${pageScope.msg}
  <br>
  ${requestScope.msg}
  <br>
  ${sessionScope.msg}
  <br>

</body>
</html>

2.5 EL运算符

  三元运算运用

  Empty运算符

  代码如下:

<%@page import="java.util.ArrayList"%>
<%@page import="com.yjx.pojo.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
  User u=new User(0,"zz","zz123");
  
  pageContext.setAttribute("user", u);
  List<User> user=new ArrayList();
  pageContext.setAttribute("u",user);
%>
 
  <!--三元运算符-->
  ${applicationScope.msg==null?"真":"假"}
  <br>
  用户名: ${user.name}
   <br>
  密码:${user.pwd.equals("")?"为空":"不为空"}
   <br>
   <%--Empty 判断集合中为空--%>
   ${empty u}
   <br>
   <%--not empty 判断集合中不为空--%>
   ${not empty u?"xx":"yy"}
</body>
</html>

三.JSPL标签

3.1 JSPl中常用的标签

  --通用标签:set out remove
  --条件标签:if
  --迭代标签:forEach 

3.2 使用JSPL标签的步骤

  • 先导入驱动包

    

  • 在页面中导入JSTL标签库
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

3.3 使用JSPL标签

  • JSTL中set标签 ,相当于pageContext.setAttribute("a",1)

  <c:set scope="page" var="a" value="1"></c:set>
  • JSTL中out标签的使用->    
  <c:out value="${a}"></c:out>
  •  JSTL中的remove使用

  <c:remove var="a" scope="page"/>
  •   条件标签if使用
 <!-- 条件标签if使用 -->
 <% 
  String yy="123";
  pageContext.setAttribute("yy",yy);
 %>
 
 <c:if test="${yy!=null}">
   <h1>欢迎登录</h1>  
 </c:if>
 
 <c:if test="${yy==null}">
  <h1>登录失败</h1>
 </c:if>
  •  迭代标签:forEach 
 <!-- 迭代标签:forEach  -->
  <%
     List<Shiwu> s=new ArrayList();
     for(int i=1;i<=5;i++){
         Shiwu sw=new Shiwu();
         sw.setId(i);
         sw.setName("娃哈哈"+i);
    	 s.add(sw);
     }
     
     pageContext.setAttribute("list",s);
  
  %>

今天的学习就到这里啦。

精彩评论(0)

0 0 举报