javaWeb第七章 Day9天2020080605018

wuchangjian2021-11-21 04:07:18编程学习

文章目录

  • EL表达式和JSTL
  • 学习目标
    • 一、初识JavaBean
      • 什么是javaBean?
      • 访问javaBean的属性
      • BeanUtils工具
    • 二、初识EL
      • EL概述
      • EL中的变量,常量、标识符、保留字等
      • EL中的运算符、隐式对象、
      • 三、隐式对象
      • EL中web相关对象、
      • param和Values对象、
      • Cookie对象
      • 四、总结
    • 1.1什么是javaBean?
    • 1.2 访问javaBean的属性:
    • 1.3BeanUtils 工具
    • 二、初识EL
    • 2.1E概述:
    • 2.2EL中的变量:
    • 2.3EL的标识符
    • 2.3EL的保留字:
    • 2.4EL中的运算符
    • 2.5EL隐式对象
    • 3.1Web域相关对象
    • 3.2param和paramValues对象
      • 3.3Cookie 对象
    • 四、总结

EL表达式和JSTL

学习目标

一、初识JavaBean

什么是javaBean?

访问javaBean的属性

BeanUtils工具

二、初识EL

EL概述

EL中的变量,常量、标识符、保留字等

EL中的运算符、隐式对象、

三、隐式对象

EL中web相关对象、

param和Values对象、

Cookie对象

四、总结


1.1什么是javaBean?

JavaBean是公共Java类,但是为了编辑工具识别
需要满足至少三个条件
1.有一个public默认构造器(例如无参构造器)
2.属性使用public 的get,set方法访问,也就是说设置成private同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。
3. 需要序列化。这个是框架,工具跨平台反映状态必须的。

1.2 访问javaBean的属性:

在讲解面向对象时,经常会使用类的属性,类的属性指的是类的成员变量。在JavaBean中同样也有属性,但是它和成员变量不是一一个概念,它是以方法定义的形式出现的,这些方法必须遵循一定的命名规范。例如,在JavaBean中包含-一个String类型的属性name,那么在JavaBean中必须至少包含getName()和setName()方法中的一个,这两个方法的声明如下所示。
代码如下(示例):

public String getName(){}
public void setName (String name) { . . . }

需要注意的是, 对于JavaBean属性的命名方式有一个例外情况。如果属性的类型为boolean,它的命名方式应该使用is/set,而不是get/set。 例如,有-一个boolean类型的属性maried,该属性所对应的方法声明如下所示。

public boolean isMarried(){}
public void setMarried (boolean married){}

从上面的代码可以看出,married 属性的setter方法命名方式没有变化,而getter方法变成了isMarried()方法。当然,如果一定要写成getMarried()也是可以的,只不过isarried()更符合命名规范。
通过上面的学习,读者对JavaBean 组件有了一个初步的了解,为了更加深刻地理解JavaBean 属性的定义,接下来通过具体的案例来实现一个JavaBean程序。
在cn.itcast.chapter07.javabean包下创建Student类,代码如下图所示:
在这里插入图片描述
在该文件中定义了一个Student类,该类有5个属性,分别为age、married、name、sid和info。其中,age和married属性是可读属性,name只写属性,sid是只读属性,它们在类中都有命名相同的成员变量,而info是只读属性,但它没有命名相同的成员变量。

1.3BeanUtils 工具

BeanUtils 类的常用方法及其功能的描述,掌握这些方法对灵活运用BeanUtis工具尤为重要。为了让读者熟悉BeanUtils 类的常用方法,接下来通过一个案例来演示使用setProperty()、getProperty()和 populate()方法访问JavaBean的属性。
(1) 在项目的lib 目录中添加已下载的commons-beanutils- 1.9.2.jar 和Logging的JAR包commons-logging-1.2.jar,并将这两个JAR包发布到类路径中
在这里插入图片描述
(2) 在项目的src 目录下创建一个名为cn.itcast.chapter06.beanutils 的包,在包下创建Person类,Person 类中定义了name和age两个属性,并提供了对应的getter方法和setter方法供外界访问这两个属性。

在这里插入图片描述
(3) 在cn.itcast.chapter09. beanutils 包下创建一个BeanUtilsDemo 类, 该类中使用了BeanUtils类的常用方法,具体代码如文件7-4所示。
BeanUtilsDemo.java

在这里插入图片描述

二、初识EL

2.1E概述:

①Expression Language表达式语言
②是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
③在JSP2.0开始引入概念
${表达式}

需要注意的是,“${表达式}”中的表达式必须符合EL语法要求。关于EL语法的相关知识,将在下面的小节进行详细讲解。
为了证明EL表达式可以简化JSP页面,接下来通过一个案例来对比使用Java代码与EL表达式获取信息的不同。
首先,
在项目的src目录下创建包cn.itcast chapter07.servlet,在包中创建一个用于 存储用户名和密码的类MyServlet,代码如下图:
在这里插入图片描述

然后,在WebContent目录下编写一个名为myjisp的JSP文件,使用该文件来输出MyServlet所存储的信息,代码如下:
在这里插入图片描述

2.2EL中的变量:

使用EL内置对象,从指定域中获取数据,提高了查找效率
代码如下(示例):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        pageContext.setAttribute("name", "linjie");
        request.setAttribute("name", "lucy");
        session.setAttribute("name", "king");
        application.setAttribute("name", "bilibili");
    %>
    name=${applicationScope.name }
</body>
</html>

在这里插入图片描述

2.3EL的标识符

在定义标识符必须遵守以下规范。

  1. 不能以数字开头
  2. 不能是EL中的保留字,如and、or、gt。
  3. 不能是EL的隐式对象,如pageContext。
  4. 不能包含单引号(’)、双引号(")、减号(-)和正斜杠(/)等特殊字符。

2.3EL的保留字:

and、eq、gt、true、instanceof、or、ne、le、false、empty、not、lt、ge、null、   div、mod

2.4EL中的运算符

1、先说说几个常用运算符
算术运算符:+、-、*、/、%(不支持++、–)
关系运算符:==、!=、>、>=、<、<=
逻辑运算符:!、&&、||、not、and、or
条件运算符:?:
取值运算符:[]、点号
2、empty运算符
用法为${empty 变量},结果为布尔值

<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <%
     String name1=null;
     String name2="";
     List<String> name3=new ArrayList<String>();

     pageContext.setAttribute("name1", name1);
     pageContext.setAttribute("name2", name2);
     pageContext.setAttribute("name3", name3);
 %>
 empty对于没有定义的变量,运算结果为true:
 empty namex=${empty namex }<br>

 empty对于null的引用,运算结果为true:
 empty name1=${empty name1 }<br>

 empty对于为空串的String引用,运算结果为true:
 empty name2=${empty name2 }<br>

 empty对于没有元素的数组或集合,运算结果为true:
 empty name3=${empty name3 }<br>
</body>
</html>

客户浏览器显示结果:

在这里插入图片描述

2.5EL隐式对象

1.pageContext对象
为了获取JSP页面的隐式对象,可以使用EL表达式中的pageContext 隐式对象。pageContext 隐式对象的示例代码如下。

${pageContext . response . characterEncoding}

在上述示例中,pageContext对象用于获取response对象中的characterEncoding属性。接下来,通过一个案例来演示pageContext隐式对象的具体用法。

在项目的WebContent目录下创建-名为pageContext.jsp的文件
在这里插入图片描述
在这里插入图片描述
可以看出,使用EL表达式中的pageContext对象成功地获取到了request.responsesenvlerContext和servetConfig对象中的属性。需要注意的是,不要将EL表达式中的隐式对象与JSP中的隐式对象混淆,只有pageContext对象是它们所共有的,其他隐式对象则毫不相关。

3.1Web域相关对象

在Web开发中,PageContext、 HttpServletRequest、 HttpSession 和ServletContext这4个对象之所以可以存储数据,是因为它们内部都定义了一个Map集合,这些Map集合是有一定作用范围的,例如,HttpServletRequest 对象存储的数据只在当前请求中可以获取到。我们习惯把这些Map集合称为域,这些Map集合所在的对象称为域对象。在EL表达式中,为了获取指定域中的数据,提供了pageScope、 requestScope、sessionScope 和applicationScope4个隐式对象,示例代码如下。

${pageScope.userName)
${ request Scope .userName )
${sesslon. cope. use rName )
${applicationScope. userName)
需要注意的是,EL 表达式只能在这4个作用域中获取数据。为了让读者更好地学习这4个隐式对象,接下来通过一个案例来演示这4个隐式对象如何访问JSP域对象中的属性。

在项目的WebContent目录下,新建名为scopes.jisp的文件
在这里插入图片描述
在这里插入图片描述

3.2param和paramValues对象

param(获取请求中的指定参数)
其底层实际调用request.getParameter()
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- ${pageContext.request.contextPath }代表web应用的根 --%>
   <form action="${pageContext.request.contextPath }/show.jsp" method="POST">
       xxx<input type="text" name="name"/><br>
       yyy<input type="text" name="age"/><br>
       <input type="submit" value="点击">
   </form>
</body>
</html>

show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 name=${param.name }<br>
 age=${param.age }<br>
</body>
</html>

 客户浏览器访问结果
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a13f1b955a214845b80847dc79d9faa1.png#pic_center)

在这里插入图片描述
paramValues对象
获取请求中的指定参数的所以值,其底层实际调用 request.getParameterValues()
index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- ${pageContext.request.contextPath }代表web应用的根 --%>
  <form action="${pageContext.request.contextPath }/show.jsp" method="POST">
      xxx<input type="text" name="name"/><br>
      yyy<input type="text" name="age"/><br>

      爱好:
      <input type="checkbox" name="hobby" value="sleep">睡觉
      <input type="checkbox" name="hobby" value="play"><input type="checkbox" name="hobby" value="eat"><input type="submit" value="点击">
  </form>
</body>
</html>

 show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   name=${param.name }<br>
   age=${param.age }<br>


   hobby[0]=${paramValues.hobby[0] }<br>
   hobby[1]=${paramValues.hobby[1] }<br>
</body>
</html>

客户浏览器显示结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/38793eb21ce9465abc45d51cba08a357.png#pic_center)

在这里插入图片描述

3.3Cookie 对象

在JSP开发中,经常需要获取客户端的Cookie信息,为此,在EL表达式中,提供了Cookie隐式对象.该对象是一个代表所有Cookie信息的Map集合,Map集合中元素的键为各个Cookie的名称,值则为对应的Cookie对象,具体示例如下。

获取cookie对象的信息: sicookie.userName)
获取cookie对象的名称: Slcookie.userName. name}
获取cookie对象的值: $lcookie. userName . value}

为了让读者更好地学习Cokie隐式对象,接下来通过一个案例来演示如何获取Coile对象中的信息。
在项目的WbComen目录下,新建一个cookie.jsp的文件.
启动Tomcat 服务器,在浏览器地址栏中输入地址http:/localhost:.9999/chapter07/cookie.jsp”访问cookie.jsp页面,由于是浏览器第1次访问cookie.jsp页面,此时,服务器还没有接收到名为userName的Cookie信息,因此,浏览器窗口中不会显示。接下来刷新浏览器,第2次访问cookie.jsp页面,此时浏览器窗口中显示的结果如图所示。
在这里插入图片描述

四、总结

该处为本节课的总结


今天学习了很多有:JavaBean概念、EL中的标识符、保留字、变量、常量;EL中的运算符、隐式对象。

一、 学习了javaBean让我知道了JavaBean是一种特殊的Java类,它具有如下的几个语法特征。
1… JavaBean是一个public类,即JavaBean的类访问权限必须是public的。
2.JavaBean应该包含一个无参的构造方法。
3.JavaBean中属性的获取和设置需要使用标准格式定义的getXxx()方法和setXxx()方法。
4.对于boolean类型的成员变量,即布尔类型的属性,可以使用isXxx()方法来代替getXxx()和setXxx()方法。需要被序列化并且实现了Serializable接口。
二、学习了EL的知识后我知道了

  1. EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分
  2. EL只能从四大域属性空间中获取数据(pageContext、request、session、application)
  3. EL不会抛出空指针异常,只会不显示
  4. EL不会抛出数组越界异常,只会不显示
  5. EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)
    以上就是我这节课学到的知识,以及这节课做的总结。
    -2021 11.19

相关文章

海南三亚13日新增367例确诊病例和721例无症状感染者

2022-08-14 07:22:47 2022年8月13日0—24时...

走进县城看发展|新邵县:昔日的“垃圾村”变身绿色产业新城

走进县城看发展|新邵县:昔日的“垃圾村”变身绿色产业新城

2022-08-23 18:55:09 县城往东10公里,就是新邵县雀...

如何巧妙利用4个IO口驱动12个LED灯

如何巧妙利用4个IO口驱动12个LED灯

在电路设计过程中有时经常遇到单片机的IO口不够用的情况。对于这样的问题,我...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。