0
点赞
收藏
分享

微信扫一扫

JavaWeb 16 EL表达式与JSTL

Python芸芸 2022-04-17 阅读 164
javahtmlweb

目录

一.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 条评论