第七章: EL表达式和JSTL标签库,访问JavaBean的属性,JSTL_阿江^的博客-程序员宝宝

技术标签: Java  笔记  java  xml  http  

第七章: EL表达式和JSTL标签库,访问JavaBean的属性,JSTL
1.初识JavaBean
1.1 什么是javaBean:
它是java开发中常用的组件,其实就是一个java类,它的作用就是封装数据。
书写JavaBean需要满足五个规范:

1.这个java类,被public修饰
2.这个java类要提供公共的无参数的构造方法
3.要提供私有的属性
4.要给私有的属性提供公共的set或者get方法
5.要实现Serializable接口
比如:
public class Book implements Serializable{
private String id;
private String name;
public Book(){};
public void set----
public String get—
}
1.2 访问JavaBean的属性:
类的成员变量和属性的一个关系:
在普通的java类里面,成员变量可以说成就是属性。
在JavaBean里面,成员变量和属性就有了区别。
在JavaBean 里面什么是成员变量呢? 比如:private String id; 那么id就是成员变量
在JavaBean 里面什么是属性?就是get或者set后面的字段名称(字段名称的首字母小写),就是属性。
比如:

public class Student {
    
//一下就是javaBean的四个成员变量
private String sid;//目的就是为了接收外界传递过来的值
private String name;
public Student() {
    
		}
		//属性由get或者set方法后面的字段首字母小写就是属性,属性就是id
		public String getId() {
    
			return sid;
		}
		public void setId(String id) {
    //写方法,给student写一个id
			this.sid = id;
		}
		//属性就是name
		public void setName(String name) {
    
			this.name = name;
		}
	}
  上面的Student的属性就是id ,name。成员变量就是sid,name.

1.3 BeanUtils 工具
   BeanUtils 工具是由apache软件基金会提供的一套封装数据到JavaBean的工具类,使用简单方便,
   BeanUtils是第三方的工具(插件),所以需要导入jar包。
   常用的api:
   >>> 1.向javaBean的属性设置值: 
	setProperty(javaBean对象,javaBean的属性,javaBean属性的值);
   >>> 2.获取javaBean属性的值:
       getProperty(javaBean对象,javaBean的属性);
   >>> 3.向javaBean的属性设置值:
       populate(javaBean对象,map对象);
       注意:map的对象的key(就是javaBean属性名称),必须和javaBean的属性名一致,才能给javaBean的属性设置值。
	     提交的表单数据想封装到javaBean对象里面,要求表单name属性的值,必须和javaBean属性名称一一对应。

2.EL 表达式
1.1 初识 EL 表达式
EL在开发中,通常是用来获取域对象中保存的值,基本语法:${域对象的名称}。
比如说: request.setAttribute(“key”,“value123”): k e y , 获 取 的 值 就 是 v a l u e 123 如 果 域 对 象 的 名 称 写 错 了 , 使 用 e l 表 达 式 获 取 值 , 获 取 的 是 " " . 1.2 E L 表 达 式 中 的 标 识 符 在 e l 书 写 过 程 中 , 会 用 一 些 符 号 来 标 记 变 量 、 函 数 名 等 , 这 些 符 号 称 之 为 标 识 符 。 书 写 规 范 : 1. 不 能 以 数 字 开 头 2. 不 能 包 含 e l 中 的 关 键 字 : a n d , o r 等 3. 不 能 使 用 e l 表 达 式 的 隐 式 对 象 。 4. 不 能 包 含 特 殊 符 号 , 比 如 正 斜 杠 等 1.3 E L 中 的 变 量 基 本 格 式 : {key},获取的值就是value123 如果域对象的名称写错了,使用el表达式获取值,获取的是"". 1.2 EL表达式中的标识符 在el书写过程中,会用一些符号来标记变量、函数名等,这些符号称之为标识符。 书写规范: 1.不能以数字开头 2.不能包含el中的关键字:and , or 等 3.不能使用el表达式的隐式对象。 4.不能包含特殊符号,比如正斜杠等 1.3 EL中的变量 基本格式:key,获取的值就是value123如果域对象的名称写错了,使用el表达式获取值,获取的是"".1.2EL表达式中的标识符在el书写过程中,会用一些符号来标记变量、函数名等,这些符号称之为标识符。书写规范:1.不能以数字开头2.不能包含el中的关键字:and,or等3.不能使用el表达式的隐式对象。4.不能包含特殊符号,比如正斜杠等1.3EL中的变量基本格式:{域对象的名称},这个域对象的名称可以理解为就是el中的变量,
那这个变量就不需要定义了,可以直接使用。

1.4 EL 中的常量
   1.布尔常量:truefalse
   2.数字常量:整型、浮点常量,使用方式和java差不多
   3.字符串常量:使用方式和java差不多,比如:${
    "el的字符串常量"}
   4.Null常量:${
    null}

1.5 EL中的运算符
   1.点运算符:获取域对象中属性的值。
   	比如: ${
    person.name }
   2.方括号运算符:在域对象里,有的属性包含特殊字符,所以用方括号的方式来获取值
	比如:<% 
 		Map<String,String> map= new HashMap<String,String>();
		map.put("my-name","map的值");
		request.setAttribute("user",map);
	  %>
	${
    user["my-name"] }
   3.算术运算符:+* /
   4.比较运算符: > < >= <= == !=
   5.逻辑运算符: &&(and) ||(or) !(not)
   6.empty 运算符:用来判断域对象中的值是否存在,不存在返回为true,否则返回的结果是false.
   7.三目运算符:参照java的用法。

1.6 EL 隐式对象
   1.pageContext对象:为了获取jsp中的隐式对象。
     比如:
	 获取项目的路径:${
    pageContext.request.contextPath }<br/>
	 获取请求的URL:${
    pageContext.request.requestURI }

   2.web域相关的对象
     域作用范围从小到大:pageContext--->request--->session--->application(servletContext)
     el表达式获取域对象中的值:如果域对象的名称相同,获取的是域作用范围最小的值。
                               和pageContext对象的findAttribute方法的效果是一样的。

   3.param 和 paramValues 对象: 获取表单提交的数据。
    比如:
    	num1:<input type="text" name="num1" /><br/>
	num2:<input type="text" name="num" /><br/>
	num3:<input type="text" name="num" /><br/>
	<input type="submit" value="提交" /> &nbsp;&nbsp;<input type="reset" value="重填" />
	<hr/>
	num1:${
    param.num1 }<br/>
	num2:${
    paramValues.num[0] }<br/>
	num3:${
    paramValues.num[1] }
   4. Cookie 对象:获取cookie的名称,获取cookie的值
	比如:
		<% response.addCookie(new Cookie("userName","itcast")); %>
		获取cookie对象:${
    cookie.userName }<br/>
		获取cookie的名称:${
    cookie.userName.name }<br/>
		获取cookie的值:${
    cookie.userName.value }<br/>

3.JSTL
1.1 什么是JSTL
JSTL: JavaServer Pages Standard Tag Libary,java服务器端页面的标准标签库,其实就是在jsp页面上使用的标签库。
JSTL标签库有五个组成,通常使用核心标签库。
在jsp页面上面引入标签库:<%@ taglib uri=“标签库的url地址” prefix=“标签的前缀” %>
1.2 JSTL的下载和使用
步骤:
1.在jsp页面使用taglib指令引入标签库
2.导入jstl相关的jar包
3.测试一下。
1.3 JSTL中的Core标签
1.<c:out>标签:向网页输出内容
基本语法:
第一种:<c:out value=“el表达式获取值” default=“值” escapeXml=“true或者false”></c:out>
第二种:<c:out value=“el表达式获取值” escapeXml=“true或者false”> 默认值 </c:out>
default:如果value属性获取到了值,就输出这个值,如果没有获取到,就输出default属性对应的值。
escapeXml(默认值true):如果值为true,就会把html标记当成普通的字符串输出,如果值为false,就会正常解析html标记,正常输出。
2.<c:if>标签:进行条件判断,和java类中的if很相似
基本语法:
第一种:<c:if test=“条件表达式” var=“变量名称” scope=“域的范围”></c:if>
第二种:<c:if test=“条件表达式” var=“变量名称” scope=“域的范围”> 标签体内容 </c:if>
在开发中,经常使用第二种。
test属性:如果返回值为true,就输出标签体内容,否则就不输出。
3.<c:choose>标签:进行条件判断,和java类中的if,else if(),else if()—else很相似
基本语法:
<c:choose>---->if
<c:when test=“条件表达式”>标签体内容</c:when>---->else if()
<c:when test=“条件表达式”>标签体内容</c:when>

<c:otherwise>标签体内容</c:otherwise>----->else
</c:choose>
4.<c:forEach>标签:遍历域对象中的数组和集合,和java类中的for循环很相似
基本语法:
第一种:<c:forEach var=“yuanshu” items=“数组或者集合中的值” begin=“开始下标” end=“结束的下标” step=“遍历的增量”></c:forEach>
普通for:
for(int i=0;i<数组或集合的长度;i++){ yuanshu }
第二种:<c:forEach var=“yuanshu” items=“数组或者集合中的值”></c:forEach>
增强for:
for(String yuanshu: 数组或者集合){ yuanshu }
varStatus属性:count表示序号,index表示索引(下标),
first判断是否是第一个元素,last判断是否是最后一个元素
5.<c:param>标签和<c:url>标签:设置路径和传递参数。
基本语法:
<c:url var=“变量名称” url=“路径值”>
<c:param name=“属性名称” value=“属性值”></c:param>
</c:url>
开发的访问路径:

1.绝对路径:
第一种:http://localhost:8080/chapter07/login.html
第二种:/chapter07/login.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_55682497/article/details/121373258

智能推荐

在Linux中查看ftp状态,linux中ftp常见操作启动ftp状态,终止ftp会话_破天学长的博客-程序员宝宝

Ftp:查询ftp状态:Servicevsftpdstatus设置目录权限:chmod777-R/home/wwwroot/www.xx.com◆启动ftp会话open命令用于打开一个与远程主机的会话。该命令的一般格式是:◆open主机名/IP如果在ftp会话期间要与一个以上的站点连接,通常只用不带参数的ftp命令。如果在会话期间只想与一台计算机连接,那么在命令行上指定远程主机名或...

windows socket网络编程五:重叠IO模型_xiaoxiao涛的博客-程序员宝宝

文章目录分析事件通知重叠IO结构体创建支持重叠IO的socket投递异步Accept投递异步Recv投递异步Send询问事件获取重叠信号分类处理运行结果完成例程投递异步Accept投递异步Recv投递异步Send分类处理运行结果模型流程图源码链接分析在解决了select模型本身的同步阻塞问题后,我们还要处理send、recv、accept的执行阻塞。我们socket的操作本质上都是字符串的拷贝复制,重叠IO是windows提供的一种异步读写文件的机制,将读的指令以及我们的buffer投给操作系统,然后

linux tar 解压文件出错误 invalid compressed data--format violated_carson的博客-程序员宝宝

群里一个兄弟发现压缩包没有办法解压关键提示错误invalid compressed data--format violated细问了一下1、是从windows机子上传到,linux机子上的2、这个压缩包其他机子上可以解压3、他是用secureFX软件传的主要错误原因:没有按照二进制文件的形式传输这个问题我在传php文件的时候有遇到过ftp编码问题,部分php代码错误也有可能是这个

layui 页码、日期等部分乱码_Wendz的博客的博客-程序员宝宝

原因:tomcat的编码格式不是uft-8;解决办法:(1)修改tomcat的server.xml文件中的编码格式(2)修改tomcat\bin中catalina.bat文件,设置编码格式

转 [精华] 邮件服务器错误信息_weixin_30361753的博客-程序员宝宝

作者:netloafer发表于:2003-01-15 11:22:44 http://www.chinaunix.net/jh/14/803.html显示错误:501是什么意思? 501Invaliddomainname SocketError#10060 SocketError#10061 无效的域名。发件人栏需填入电子邮件地址。 ...

docx,pptx等正确的mime类型是什么?_docx mime_asdfgh0077的博客-程序员宝宝

对于较早的* .doc文档,这已足够: header("Content-Type: application/msword"); 我应该为新的docx文档使用哪种mime类型? 还可以用于

随便推点

take-advantage-of-redis-adding-it-to-your-stack.html_macyang的博客-程序员宝宝

Redis作者写的一篇文章,介绍redis的应用场景,文章来源:http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html Redis is different than other database solutions in many ways: it uses memory as main s

Python创建XML文件,C++解析XML文件_c++和python生成的xml文件_曲草的博客-程序员宝宝

最近在做一些代码移植工作,为了测试正确性,要拿同样的输入数据测试,于是打算使用XML来存储数据,C++进行解析。简单做个记录。数据源这里我选择用10帧图像中的人体2维关节点骨架作为数据源(可以在此下载 提取码 ersp)shape为 10 x person_number x 17 x 2 , 分别表示帧,人数,关节点数,关节点图像坐标(x,y)使用python生成xml目标是生成下面的样子,直接看代码吧,python这个xml库用起来比较简单,看个例子就会了。import numpy as n

交叉熵损失函数优缺点_交叉熵损失函数_weixin_39608748的博客-程序员宝宝

交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。二次代价函数的不足ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮...

Android WebView 预加载方案_android 预加载webview_DevilNoV的博客-程序员宝宝

前言由于H5具备 开发周期短、灵活性好 的特点,所以现在Android App大多嵌入了Android Webview组件进行Hybrid开发 但我知道你一定在烦恼Android Webview的性能问题,特别突出的是:加载速度慢 &amp; 消耗流量 今天,我将针对Android Webview的性能问题,提出一些有效解决方案。目录1. Android WebView 存在什么性能问题?Android WebView里H5页面加载速度慢 耗费流量下面会详细...

如何用 IDEA 提升十倍开发效率?_Hollis Chuang的博客-程序员宝宝

工欲善其事,必先利其器。想要提升编程开发效率,必须选择一款顺手的开发工具。JetBrains 公司提供了一系列功能强大、风格统一的开发工具,深受开发者喜爱。其中,IDEA 是面向 Jav...

卸掉notepad++,永远不再使用!!!_zxy131072的博客-程序员宝宝

昨天看到消息称notepad++这款软件的官网发布了反华言论,自己刚刚去他的官网看了下,还真是。 https://notepad-plus-plus.org/news/v781-free-uyghur-edition/其实我真的绝得这款软件用起来还是比较好的,在学习编程后就一直在使用。也曾经尝试使用过sublime,但是感觉他不是这么友好,后来就放弃了sublime,一直在使用note...

推荐文章

热门文章

相关标签