JavaWeb学习——EL和JSTL标签库

El 表达式学习

什么是 EL 表达式

全称Expression Language,一种写法非常简介的表达式。语法简单易懂,便于使用。表达式语言的灵感来自于 ECMAScript 和
XPath 表达式语言

EL 表达式的作用

作用:让 jsp 书写起来更加的方便。简化在 jsp 中获取作用域或者请求数据的写法。也会搭配 Jstl 来进行使用

使用 EL 表达式

语法结构:${expression},提供.和[ ]两种运算符来存取数据

  • a) 使用 EL 表达式获取请求数据
    • i. 获取用户请求数据
    • ii. 获取请求头数据
    • iii. 获取 Cookie 数据
  • b) 使用 EL 表达式获取作用域数据
    • i. 获取作用域数据
    • ii. 作用域查找顺序
    • iii. 获取指定作用域中的数据
  • c) 使用 EL 表达式进行运算
    • i. 算术运算
    • ii. 关系运算
    • iii. 逻辑运算
  • d) EL 表达式空值判断 empty
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


<%--
	传统方法获取作用域的缺点:
		1.需要导包
		2.需要强转
		3.获取数据的代码过于麻烦
	使用EL表达式获取作用域数据
		作用:获取作用域对象中的数据
			注意:获取的是pageContext、request、session、application四个对象中的数据,其他数据一概不加理会
				找到了则获取返回,找不到则什么也不做,也不报错
		语法:
			${表达式}
			表达式:
				1.获取请求数据(getParameter())
					request对象存储了请求数据——》param.键名		返回值
					request对象存储了请求数据——》paramValues	返回的是数组
				2.通过setAttribution方法存储到作用域对象中的数据
					${键名}	返回键名所对应的值
					注意:
						1。如果存储普通字符串直接返回值
						2.如果存储的是对象,返回对象
							获取对象中的数据:
								1.普通对象:
									${键名。属性名。属性名...}
								2.集合对象
									List集合——》${键名[下标]}
									map集合——》${键名.map集合中的键名}
									
				
									
	作用域的查找顺序
		pageContext——》request——》session——》application
		注意:
			每次查找都是从小到大进行查找,找到了则获取,不在继续找了
			
	EL表达式 逻辑运算:
		${逻辑表达式} 
		${算术表达式}
		${关系表达式}
		三目运算
		注意:
			+表示加法运算,不表示字符连接,使用EL表达式进行字符连接会报错。
			
	EL空值判断
		${empty 键名}
		作用:
			判断键名对象的值是否存在有数据
	EL获取请求头信息和Cookie信息
		请求头信息
			${header}——》返回所有的请求头数据
			${header["键名"]}——》返回指定键名的请求头数据
			${headerValues["键名"]}——》返回指定的键名(同键不同值)的数据
		请求cookie信息
			${cookie}——》返回存储了所有 cookie对象的map集合
			${cookie。键名}——》返回指定的cookie对象
			${cookie.键名.name}——》返回指定的cookie对象的键
			${cookie.键名.value}——》返回指定的cookie对象的值
			
						

--%>

<%--使用el获取作用域中的数据--%>
<!-- 1.获取请求数据(getParameter()) -->
<b>${param.name}</b></br>
<b>${paramValues.age}</b></br>
<!-- 如果存储普通字符串直接返回值 -->
<b>${names}</b></br>
<!-- 存储的是对象,返回对象 -->
<b>${person.name}</b></br>
<b>${person.addr.country}</b></br>
<!-- List集合 -->
<b>${list[0]}</b></br>
<b>${list[0].addr}</b></br>

<!-- map集合 -->
<b>${map.one}</b></br>
<b>${map.one.age}</b></br>

<h3>EL的作用域查找顺序</h3>
<%
	pageContext.setAttribute("hello", "hello page");
	request.setAttribute("hello", "hello request");
	session.setAttribute("hello", "hello session");
	application.setAttribute("hello", "hello application");
 %>
 
 ${pageScope.hello}——》${requestScope.hello}——》${ssesionScope.hello}——》${applicationScope.hello}
 
 <h3>EL表达式和逻辑运算</h3>
 
${1+2}——${1*2}——${1-2 }——${1/2}——${4>2 }——${sex == 1?'男':'女'}——————${1+"2" }

<h3>EL的空值判断</h3>
<b>${empty t1}</b><br>
<b>${empty t2}</b><br>
<b>${empty t3}</b><br>
<b>${empty t4}</b><br>

<h3>EL的获取请求头和cookie对象信息</h3>
<b>${header}</b><br>
<b>"User-Agent:"   ${header["user-Agent"]} </b><br>
<b>${cookie}</b><br>
<b>${coolie.JSESSIONID}</b><br>

<b></b><br>
<b></b><br>
 

package com.servlet;


import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class eltest extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
       req.setCharacterEncoding("utf-8");
       resp.setContentType("text/html;charset=utf-8");
       
       req.setAttribute("names", "田坤");
       
       Person p = new Person("田坤", 18, new Address("中国", "陕西", "西安"));
       req.setAttribute("person", p);
       
       List<Person> lp = new ArrayList<Person>();
       lp.add(p);
       req.setAttribute("list", lp);
       
       Map<String,Person> map = new HashMap<String, Person>();
       map.put("one", new Person("宋旭东", 18, new Address("中国", "陕西", "西安")));
       req.setAttribute("map", map);
       
       //   / ——》表示该项目
       req.getRequestDispatcher("/el.jsp?name=田坤&age=18").forward(req, resp);
       
       //EL的空值判断
       req.setAttribute("t1", "");
       req.setAttribute("t2", new Person());
       req.setAttribute("t3", new ArrayList<String>());
       req.setAttribute("t4", new HashMap<String,Person>());

    }
}

JSTL标签库

在菜鸟教程里面有详细的说明

菜鸟驿站JSTL学习

使用JSTL需要导入核心标签库

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="com.servlet.Address"%>
<%@page import="com.servlet.Person"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!-- 导入JSTL的jar包 -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
	JSTL学习:
		作用:
			提高在jsp中的逻辑代码的编写效率,使用标签。
		使用:
			JSTL的核心标签库(重点)
			JSTL的格式化标签库(讲解)
			JSTL的SQL标签库(了解)
			JSTL的函数标签库(了解)
			JSTL的XML标签库(了解)
		JSTL的核心 标签库:
			1、导入jar包
			2、声明jstl标签库的引入(核心标签库)
				<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
			3、内容:
				基本标签:
					<c:out value="数据" default="默认值"></c:out>
						数据可以为常量值也可以是EL表达式。
						作用:将数据输出给客户端。
					<c:set var="hello" value="hello pageContext" scope="page"></c:set>
						作用:存储数据到作用域对象中
						var:表示存储的键名
						value:表示存储的数据
						scope:表示要存储的作用域对象 page request session application
					<c:remove var="hello" scope="page"/>
						作用:删除作用域中的指定键的数据。
						var:表示要删除的键的名字
						scope:表示要删除的作用域(可选)
						注意:
							如果在不指定作用域的情况使用该标签删除数据,会将四个作用域对象中的符合要求的数据全部删除。
				逻辑标签:
					<c:if test="${表达式}">
							前端代码
					</c:if>
						作用:进行逻辑判断,相当于java代码的单分支判断。
						注意:
							逻辑判断标签需要依赖于EL的逻辑运算,也就是表达式中涉及到的数据必须从作用域中获取。
					<c:choose>
						<c:when test="">执行内容</c:when>
						<c:when test="">执行内容</c:when>
						...
						<c:otherwise>执行内容</c:otherwise>
					</c:choose>
						作用:用来进行多条件的逻辑判断,类似java中的多分支语句
						注意:
							条件成立只会执行一次,都不成立则执行otherwise	
				循环标签:
					<c:forEach begin="1" end="4" step="2">
							循环体
					</c:forEach>
					作用:
						循环内容进行处理
					使用:
						begin:声明循环开始位置
						end:声明循环结束位置
						step:设置步长
						varStatus:声明变量记录每次循环的数据(角标,次数,是否是第一次循环,是否是最后一次循环)
								注意:数据存储在作用域中,需要使用EL表达式获取。
								例如:${vs.index}--${vs.count}--${vs.first}--${vs.last}	
						items:声明要遍历的对象。结合EL表达式获取对象
						var:声明变量记录每次循环的结果。存储在作用域中,需要使用EL表达式获取。
--%>


<c:out value="我是OUT"></c:out>  
<c:set var="str" value="string" scope="page"></c:set>
<c:out value="${str}"></c:out>
<!-- IF单分支 -->
<c:set var="a" value="12" scope="page"></c:set>
<c:if test="${a>2}">
	<b>啦啦啦。。。</b>
</c:if>

<!-- 多分枝逻辑判断 -->
<br>
<c:set var="s1" value="11"></c:set>
<c:choose>
	<c:when test="${s1>90}">
		<b>大奖励</b>
	</c:when>
	<c:when test="${s1<=90&&s1>=60 }">
		<b>小奖励</b>
	</c:when>
	<c:when test="${s1<60&&s1>40 }">
		<b>男女混合双打</b>
	</c:when>
	<c:otherwise>
		<b>你完了</b>
	</c:otherwise>
</c:choose>

<!-- 循环 -->
<br>
<c:forEach begin="1" end="8" step="1" varStatus="s">
	<b>${s.index}--- ${s.count} --- ${s.first} --- ${s.last}</b><br>
</c:forEach>

<%
	//遍历List
	List<Person> lp = new ArrayList<Person>();
	lp.add(new Person("田坤",18,new Address("中国","陕西","西安")));
	lp.add(new Person("宋旭东",18,new Address("中国","陕西","西安")));
	request.setAttribute("lp", lp);
	
	//遍历MAP
	
	Map<String,Person> m = new HashMap();
	m.put("one",new Person("田坤",18,new Address("中国","陕西","西安")));
	m.put("two",new Person("宋旭东",18,new Address("中国","陕西","西安")));
	request.setAttribute("m", m);
 %>
 
 
 <c:forEach items="${lp}" var="l">
 	${l.name}---${l.age}----${l.addr.country}<br> 
 </c:forEach>

 <br>
 <c:forEach items="${m }" var="s">
 		${s.key}---${s.value}<br>
 		${s.value.addr.city }<br>
 </c:forEach>
 



猜你喜欢

转载自blog.csdn.net/qq_41965731/article/details/88983908
今日推荐