13.1 jsp标签技术 el表达式

一。标签技术

1. 标签技术概述

在jsp页面中有HTML语句和java语句相互嵌套,如果java的逻辑代码和页面的HTML组成代码都十分复杂,两者有掺杂在一起,页面的可读性和可维护性都将降低。为了解决这个问题,产生了标签技术。用它来替换页面中的java语句,这样页面中只会出现HTML代码,整体的可读性和可维护性都会提升。

2. 常用的JSP标签技术

jsp标签

sun公司提供的标签技术 - 目前用的比较少

el表达式

便捷易用 - 使用非常广泛 - 但只是表达式无法实现复杂功能

jstl标签库

提供了大量强大的标签支持,是目前应用最广泛的标签库

自定义标签

sun提供的标签库开发接口,允许开发人员自己来开发特定功能的标签 - 通常用在框架级别的开发中,普通开发人员很少使用

其他第三方标签

二。EL表达式

1. EL表达式概述

EL Expression Language  表达式语言

在jsp页面内的<%= JSP脚本表达式%>   都可以使用EL表达式来替换。

EL具有获取数据、执行运算、获取常用开发对象、调用java方法这四方面的功能

在javaee5及其以上版本中,都已经默认包含了el表达式的相关开发包,无需手动导入。

2. 使用方式

语法:${  el表达式  }

可以获取常量、变量、数组、列表、映射、javabean等中的数据

3. EL特点:

EL表达式不能设置值,只能获取值

EL表达式只能获取域中的属性

EL表达式不能遍历

在jsp脚本表达式中使用p.getXxx()方法获取的数据,在el表达式中都可以使用${p.xxx}的方式来获取。详情往下面看

获取常量

<hr><h1>EL获取常量</h1>
<%= 123 %>
${123 }
<%= 123.321 %>
${123.321 }
<%= "abc" %>
${"abc" }
<%= true %>
${true }
<%= false %>
${false }

获取变量

a.获取指定域中的属性

<h3>el表达式获取域中的变量</h3>
      <%
          pageContext.setAttribute("name", "朴大胖", PageContext.APPLICATION_SCOPE); //设置Application域的变量
          pageContext.setAttribute("name", "曹二胖", PageContext.SESSION_SCOPE);
          pageContext.setAttribute("name", "李三瘦", PageContext.REQUEST_SCOPE);
          pageContext.setAttribute("name", "丽丽", PageContext.PAGE_SCOPE);

       %>
      <%=pageContext.getAttribute("name") %>  //获取pageContext域中的属性
      <%=request.getAttribute("name") %>
      <%=session.getAttribute("name") %>
      <%=application.getAttribute("name") %>
      ${pageScope.name}
      ${requestScope.name}
      ${sessionScope.name }
      ${applicationScope.name }

el表达式中的四大作用域-----分别对应jsp表达式中scope对域的区分


el表达式


jsp脚本表达式(pageContext设置域属性的时候用到)


pageScope


PAGE_SCOPE


requestScope


REQUEST_SCOPE


sessionScope


SESSION_SCOPE


applicationScope


APPLICATION_SCOPE

c. 获取变量 - 自动搜寻域

当通过el获取变量时,el会自动在四大作用域中按照由小到大的顺序搜寻指定名称的域属性,一旦获取直接返回,如果四大作用域中都没有找到,则返回一个空字符串

<h3>自动搜寻域</h3>
      <%=pageContext.findAttribute("name") %>
      ${name}

d.获取数组中的数据

<h3>获取数组中数据</h3>
      <%
          String[] names ={"殷天正","谢逊","韦一笑","黛绮丝"};
          pageContext.setAttribute("names", names);  //el只能读取域中的元素
       %>
       ${names[0]} //殷天正
       ${names[1]}  //谢逊
       ${names }  //数组地址值

e.获取链表中的数据

            <h3>获取链表中的数据</h3>
                   <%
                       List<String> list = new LinkedList<String>();
                       list.add("aaa");
                       list.add("bbb");
                       list.add("ccc");
                       pageContext.setAttribute("l", list);
                    %>
                    ${l[0]} //aaa
                    ${l} //["aaa","bbb","ccc"]

f.获取映射中的数据

<h3>获取映射中的数据</h3>
        <%
            Map<String,String> map = new HashMap<String,String>();
            map.put("name", "曹洋");
            map.put("age", "18");
            map.put("wife","丽丽");
            map.put("addr", "安徽");
            request.setAttribute("map", map);
            request.setAttribute("w", "wife");
         %>
         ${map}   //{wife=丽丽, age=18, name=曹洋, addr=安徽} 
         ${map.name} //曹洋
         ${map["wife"] }  //丽丽
        [wife]: ${map[w]} // [wife]: 丽丽

g. 获取javabean中的数据

在一个类中,如果存在私有化属性,这些属性包含get或set任意一个方法,则这些私有化的属性就可以称之为javabean属性,类中存在这些属性,这个类就是javabean的类。 javabean会自动实现序列化接口 Serializable ,实现序列化接口就可以向磁盘上写入东西了

                   <h3>获取javabean中的数据</h3>

                          <%
                                 Person p = new Person("曹洋",18,"女");

                                 pageContext.setAttribute("p",p);
                           %>

                           <%=p.getName() %>
                           ${p.name} //此处的name式getName() 去掉get N小写 去掉方法括号

i. 在jsp脚本表达式中使用p.getXxx()方法获取的数据,在el表达式中都可以使用${p.xxx}的方式来获取。

ii. 如果javabean中的getXxx()方法发生了修改,则el表达式也要随之修改。

例如:

getName()    ${p.name}

getNamex()   ${p.namex}

6. 获取执行运算的结果

a. 算术运算

<h4>算术运算</h4>

                  ${3+2}  <!-- 5 -->
                                      ${3-2}  <!-- 1 -->
                                      ${3/2 } <!-- 1.5 -->
                                      ${3*2 } <!-- 6 -->
                                      ${3%2 } <!--1 -->
                                      ${3+"2"} <!-- 5 -->
                                      ${3-"2" } <!-- 1 -->
                             <!--  ${3+"a" } 运算报错 -->

能运算就运算,数值型不能和字母型的加减乘除

b. 关系运算

<h4>关系运算</h4>

${3>2 }

${3<2 }

${3==2 }

${3!=2 }

${3>=2 }

${3<=2 }

c. 逻辑运算

<h4>逻辑关系</h4>

${true && false }

${true and false }

${true || false }

${true or false }

${!true }

${not true }

d. empty运算

empty运算用于判断当前域中属性是否为空。

Empty运算规则:如果对象为null 字符串为空 集合、数组、映射没有任何元素 empty操作都会返回true,否则false

 <h4>empty运算</h4>

                                 <%
                                        String str = null;
                                        pageContext.setAttribute("str", str);
                                        String s ="";
                                        pageContext.setAttribute("s", s);
                                        String[] names = {};
                                        pageContext.setAttribute("names", names);
                                       List list = new LinkedList();
                                        pageContext.setAttribute("list", list);
                                        Map<String,String> map = new HashMap();
                                        pageContext.setAttribute("mapx", map);
                                        List listx = new LinkedList();
                                        listx.add("abc");
                                        pageContext.setAttribute("listx", listx);
                                  %>

                                  ${empty str } true
                                  ${empty s }   true
                                  ${empty names} true
                                  ${empty list } true
                                  ${empty mapx } true
                                  ${empty listx } false

e. 三元表达式运算

            <h4>三元表达式</h4>
                         <%
                                 Map<String,String> mapx = new HashMap();
                                 mapx.put("name", "");
                                 pageContext.setAttribute("mapx", mapx);
                           %>
                           ${empty mapx.name?"曹洋":mapx.name}  //曹洋

5. EL获取常用开发对象 - 11个内置对象

EL内置了11个内置对象,不需要提前存入域就可以直接在EL中使用。注意这和jsp的9打隐式对象没有任何关系。

a. 代表作用域的EL内置对象


pageScope


代表PageContext域


requestScope


代表Request域


sessionScope


代表Session域


ApplicationScope


代表ServletContext域

b. 代表请求参数的内置对象


param


代表当前请求中全体请求参数组成的Map<String,String>


paramValues


代表当前请求中全体请求参数组成的Map<String,String[]>

request.getParameter("username")

${param.username}

c. 代表web应用的初始化参数的EL内置对象


initParam


代表当前web应用初始化参数的内置对象

就是ServletContext对象的getInitParameter(String attr),在jsp中就是application.getInitParameter(String attr),如果用el表达式就是${initParam.attr} 获取的是全局配置信息

initParam.url

d. 代表请求头的EL内置对象


header


代表请求中所有请求头组成的Map<String,String>的内置对象


headerValues


代表请求中所有请求头组成的Map<String,String[]>的内置对象

request.getHeader("host")

${header.host}

e. 代表请求中所有cookie组成的Map的内置对象


cookie


代表请求中所有cookie组成的Map<String,Cookie>

cookie.JSESSIONID.name

cookie.JSESSIONID.value

f. 代表当前页面的PageContext对象


pageContext


代表当前页面的PageContext对象,通过它可以获取所有jsp9大隐式对象

<%=request.getContextPath()%> 这里获取到的request不是request域对象,requestScope才是,这里的只是request对象

${pageContext.request.contextPath}

原文地址:https://www.cnblogs.com/xuwangqi/p/11370189.html

时间: 2024-11-18 01:52:57

13.1 jsp标签技术 el表达式的相关文章

JSP标签和EL表达式

1.jsp标签: sun原生的,直接jsp使用 <jsp:include> -- 实现页面包含,动态包含 <jsp:include page="/index.jsp"/> <jsp:forward> -- 请求转发 <jsp:param> -- 配合上面上面的两个标签使用, <jsp:forward page=""> <jsp:param value="xxx" name=&quo

———— JSP页面用EL表达式 输出date格式 ————

JSP页面用EL表达式 输出date格式 1.头上引入标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 2.使用: <fmt:formatDate value="${proje

JSP标签技术

1.在JSP页面中写入大量的java代码会导致JSP页面中html代码和java代码混杂在一起,会造成页面非常混乱,难以维护 2.于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来道题JSP页面中的java代码,并且推荐,JSP2.0以后不要再JSP页面中出现一行java代码. 3.EL表达式 EL表达式在JSP中可以非常方便的获取数据,可以代替JSP页面中的JSP表达式(<%=  %>) 基本结构:${表达式} EL只能获取不能设置!!! EL只能获取不能遍历!!! EL

JSP简单练习-EL表达式操作JavaBean

/* * javaBean代码 */ package bean; public class Box { double length; double width; double height; public Box() { length=0; width=0; height=0; } public double getLength() { return length; } public void setLength(double length) { this.length = length; }

解决JSP 不解析EL表达式

今天维护一个老项目,在jsp页面使用EL表达式获取数据的时候,没有被解析,而是原样输出了,很奇怪,查找资料验证后,得到结果,特记录如下 原因:在默认情况,Servlet 2.4 / JSP 2.0(以上)支持 EL 表达式. 解决的办法有两种: 1.修改web.xml的开头定义. 代码如下: <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http:/

JSP不支持EL表达式的解决方案

JSP不支持EL表达式的解决方案 EL的全称是Expression Language. 1.在默认情况下,Servlet 2.3 / JSP 1.2是不支持EL表达式的,而Servlet 2.4 / JSP 2.0支持. servlets 2.4这个版本的isELIgnored默认设置为false.所以使用web.xml里用web-app_2_4.xsd声明的时候在JSP页面不用特意声明.如何查看Servlet / JSP的版本?打开tomcat的common/lib 目录下,有两个JAR文件:

SSH 框架controller向jsp传递List jsp中使用el表达式获取

mvc可以使用ModelAndViev传递数据选择跳转的视图 controller中的代码, 把一个模拟的表单studentListSimulate传给ModelAndView @RequestMapping("/detial") public Model showStudentDetial(Model mod) { ModelAndView mav = new ModelAndView(); mav.addObject("studentListSimulate",

JSP常用标签——JSTL标签和EL表达式

一.JSTL简介 1.什么是JSTL JSTL是Java中的一个定制标记库集.(这个标记库集不需要自己编写,可以直接使用) 2.为什么要使用JSTL 实现了JSP页面中的代码复用(基于标签库原理,重复率较高的代码块支持复用,提高效率) 书写JSP页面时可读性更强(长得很像xml,方便前端查看和参与开发) 用事实告诉你为什么使用JSTL: 实现: 但是,使用JSTL效果如下: 3.JSTL环境搭建 JSTL的下载: 下载地址:http://archive.apache.org/dist/jakar

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q