JAVAWEB——EL表达式&JSTL

一、 EL技术(表达式语言)

1. EL 表达式概述

EL(Express Lanuage):表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写

2. EL从域中取出数据(EL最重要的作用)

  • jsp脚本:<%=request.getAttribute(name)%>

  • EL表达式替代上面的脚本:${requestScope.name}

  • EL最主要的作用是获得四大域中的数据,格式${EL表达式}

  • EL获得pageContext域中的值:${pageScope.key}

  • EL获得request域中的值:${requestScope.key}

  • EL获得session域中的值:${sessionScope.key}

  • EL获得application域中的值:${applicationScope.key}

  • EL从四个域中获得某个值${key}
    ——同样是依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找

案例一:

<body>
	<%--模拟域中的数据--%>
	<%
	//存储一个字符串
		request.setAttribute("School", "安徽信息工程学院");
		User user1 =new User();
		user1.setId("1");
		user1.setUsername("gyf");
		user1.setPassword("123");
		//存储一个对象
		session.setAttribute("user1", user1);
		
		//存储一个集合
		List<User> list =new ArrayList<User>();
		list.add(new User("2","zyl","456"));
		list.add(new User("3","zhangsan","789"));
		application.setAttribute("UserList", list);
	%>
	<%--脚本方式取出域中的值--%>
	<%
	  	request.getAttribute("school");
		//取对象需要进行强转
	  	User u1=(User)session.getAttribute("user1");
	  	out.write(u1.toString());
	 %>
	 <%--使用el表达式获取域中的值--%>
	 <%--省去get方法,其次对于集合,采用数组的形式,下表表示第几个对象--%>
	 ${
    
    requestScope.School}
	 ${
    
    sessionScope.user1.name}
     ${
    
    applicationScope.list[1].name}
     <%--使用el表达式全域查找我想要的值--%>
     ${
    
    company}
     ${
    
    user.name}
     ${
    
    list[1].name}
	 
</body>

3. EL的内置对象(11个)

获取JSP中域中的数据

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

接收参数

相当于request.getParameter()request.getParameterValues()

  • param
  • paramValues

获取请求头信息

相当于request.getHeader()

  • header
  • headerValues

获取全局初始化参数

相当于this.getServletContext().getInitParameter(name)

  • initParam

WEB开发中cookie

相当于request.getCookies()cookie.getName()以及cookie.getValue()

WEB开发中的pageContext

相当于jsp中的pageContextpageContext可以获得其他八大对象

  • ${pageContext.request.contextPath}

相当于

  • <%=pageContext.getRequest().getContextPath%>

案例一:

新建一个form.jsp,将数据提交到form2.jsp中

<%@ page contentType="text/html;charset=UTF-8"
language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/EL/form2.jsp" method="post">
    <input type="text" name="username"><br/>
    <input type="password" name="password"><br/>
    <input type="checkbox" name="hobby" value="zq">足球
    <input type="checkbox" name="hobby" value="pq">排球
    <input type="checkbox" name="hobby" value="ppq">乒乒球<br/>
    <input type="submit" value="提交"><br/>
</form>
</body>
</html>

该案例主要阐述,我们应该动态获取应用名称。页面跳转的时候就不会出现图片加载不全的问题: "${pageContext.request.contextPath}/EL/form2.jsp"(重点)

案例二:

<%@ page contentType="text/html;charset=UTF-8"
language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--获得表单参数--%>
    <%request.getParameter("username");%>
    <%--使用el获取参数--%>
    ${
    
    param.username}
    ${
    
    header["User-Agent"]}
    ${
    
    initParam.AAA}
    <%--cookie.name--%>
    ${
    
    cookie.name.value}
    //<%--通过el表达式获取request对象--%>
    ${
    
    pageContext.request}
    ${
    
    pageContext.servletContext}
   // <%--动态获取web名称--%>
   // <%--<%request.getContextPath()%>--%>
   // <%--获取项目和wb应用名称--%>
    ${
    
    pageContext.request.contextPath}
</body>
</html>

效果图下:
在这里插入图片描述

4. EL执行表达式

EL表达式可以进行运算
例如:

  • ${1+1}
  • empty表示判定,某个对象是不是空的。是null就返回true
  • ${empty user}
  • ${user==null?true:false}

二、 JSTL技术

1. JSTL概述

JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库

标签库 标签库的URI 前缀
Core http://java.sun.com/jsp/jstl/core c
I18N http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
XML http://java.sun.com/jsp/jstl/xml x
Functions http://java.sun.com/jsp/jstl/functions fn

2. JSTL下载与导入

从Apache的网站下载JSTL的JAR包。进入 http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/网址下载 JSTL的安装包。jakarta-taglibs-standard-1.1.2.zip,进行解压。此时,在lib目录下可以看到两个JAR文件,分别为jstl.jarstandard.jar。 其中,jstl.jar文件包含JSTL规范中定义的接口和相关类,standard.jar文件包含用于 实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)
在这里插入图片描述

3. JSTL核心库的常用标签

  • <c:if test=””>标签

其中test是返回boolean的条件

案例:用户登陆主页,登陆成功显示用户名称

  <!-- 用户没有登录 -->
   <c:if test="${empty user}">
      <li><a href="login.jsp">登录</a></li>
      <li><a href="register.jsp">注册</a></li>
   </c:if>
   <!-- 用户已经登录 -->
   <c:if test="${!empty user}">
      <li>${
    
    user.name }</li>
      <li><a href="#">退出</a></li>
   </c:if>
  • <c:forEach>标签

使用方式有两种组合形式

第一种:

<%--forEach模拟
    for(int i=0;i<=5;i++){
    
    
        System.out.println(i);
    }
--%>
<c:forEach begin="0" end="5" var="i">
    ${
    
    i}
</c:forEach>

效果图下:
在这里插入图片描述
第二种:

<%--模拟增强for productList---List<Product>
   for(Product product:productList){
    
    
        System.out.println(product.getName());
    }
--%>
<%--items:一个集合或数组 var:代表集合中的某一个元素--%>
<c:forEach items="${
    
    productList}" var="product">
    ${
    
    product.name}
</c:forEach>

练习:

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="com.gds.bean.User"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!--遍历List<String>的值  -->
	<%
		List<String> strList =new ArrayList<String>();
			strList.add("1");
			strList.add("2");
			strList.add("3");
			strList.add("4");
			strList.add("5");
		request.setAttribute("strList", strList);
	%>
	<h1>取出strList的数据</h1>
	<c:forEach items="${strList}"  var="str">
		${
    
    str}
	</c:forEach>
	<!-- 遍历List<User>的值 -->
	<%
		List<User> users =new ArrayList<User>();
		User user1 =new User();
		user1.setId("1");
		user1.setUsername("zhangsan");
		user1.setPassword("123");
		User user2 =new User();
		user1.setId("2");
		user1.setUsername("lisi");
		user1.setPassword("456");
		users.add(user1);
		users.add(user2);
		request.setAttribute("users", users);
	%>
	<h1>取出users的数据</h1>
	<c:forEach items="${users}" var="user">
		${
    
    user }
	</c:forEach>
	<!-- 遍历Map<String,String>的值 -->
	<% 
	Map<String, String> strMap = new HashMap<String, String>();
    strMap.put("name","zyl");
    strMap.put("age","18");
    strMap.put("addr","anhui");
    strMap.put("email","[email protected]");
    session.setAttribute("strMap",strMap);
	%>
	<h1>取出map的数据</h1>
	<c:forEach items="${strMap}" var="str">
			${
    
    str.key}==${
    
    str.value}
	</c:forEach>
	<!-- 遍历Map<String,User>的值 -->
	<%    
    Map<String, User> userMap = new HashMap<String,User>();
    userMap.put("user1",user1);
    userMap.put("user2",user2);
    request.setAttribute("userMap",userMap);
	%>
	<h1>取出userMap中的数据</h1>
	<c:forEach items="${userMap}" var="entry">
    ${
    
    entry.key}:${
    
    entry.value.name}:${
    
    entry.value.password}
	</c:forEach>
	
</body>
</html>

效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Mr_GYF/article/details/109185799