IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaBean和EL表达式 -> 正文阅读

[Java知识库]JavaBean和EL表达式

学习目标

一:JavaBean
二:EL表达式

学习内容

1:初识JavaBean

1.1 什么是JavaBean
JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。
为了规范JavaBean的开发,Sun公司发布了JavaBean的规范,它要求一个标准的JavaBean组件需要遵循一定的编码规范,具体如下。
(1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法
(2)它提供公共的 setter方法和getter方法,让外部程序设置和获取JavaBean的属性。为了让读者对 JavaBean 有一个直观上的认识,接下来编写一个简单的JavaBean。首先在Eclipse 中创建一个名为 chapter07 的 Web 项目,然后在项目的SrC目录下创建名为cn.itcast.chapter07.javabean的包,再在该包下创建Book类,代码如下所示。

package cn.itcast.chapter07;

public class Book {
	
	private double price;
	public double getPrice() {
	return price;
	}
	public void setPrice(double price) {
	this.price =price;
	}
}

1.2访问Javabean的属性
在讲解面向对象时,经常会使用类的属性,类的属性指的是类的成员变量。在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;
		}
	}

1.3 BeanUtils 工具
大多数Java程序开发人员过去习惯于创建JavaBean,然后通过调用JavaBean 属性对的getter和setter方法来访问属性。但是,由于各种Java工具和框架层出不穷,并不能保正性对应的getter和seter方法总能被调用,因此,动态访问Java对象的属性是十分必要的。此,Apache软件基金会提供了一套简单、易用的API——BeanUtils工具。掌握它的使用将有助于提高程序的开发效率。本节将针对BeanUtils工具的相关知识进行详细的讲解。
截止到目前,BeanUtils的最新版本为Apache Commons BeanUtils 1.9.x,读者可以根据需要下载相应的版本。BeanUtils 工具包的官网首页地址为“http://commons.apache.org/propercommons-beanutils”,登录到官网首页后,单击左边菜单栏【BEANUTILS】→【Download】选项,即可跳转到BeanUtils的下载页面.

(1)在chapter07项目的lib 目录中添加已下载的commons-beanutils- 1.9.2.jar和Logging的JAR包commons -logging-1.2.jar,并将这两个JAR包发布到类路径中。
(2)在项目的src 目录下创建一个名为cn.itcast.chapter07 的包,在包下创建Person类,Person类中定义了name和age两个属性,并提供了对应的getter方法和setter方法供外界访问这两个属性,具体代码如图下所示:

package cn.itcast.chapter07;

public class Person {
	
	private String name;private int age;
	public String getName() {
	return name;
	}
	public void setName(String name) {
	this.name = name; 
	}
	public int getAge() {
	return age;}
	public  void setAge(int age) {
	this.age = age;
	}
	public Person() {
	super();
	}
	public String toString() {
	return"Person[name="+name +",age="+ age +"]";
	
}
}

(3)在cn.itcast.chapter07的包下创建BeanUtilsDemo类,该类使用了BeanUtils类的常用方法,具体如下图所示:

package cn.itcast.chapter07;
import java.util.HashMap;
import java.util.Map;
public class BeanUtilsDemo {
	 

	 public static void main(String[] args) throws Exception{
	 Person p = new Person();
	/* BeanUtils.setProperty(p,"name","yanmin");
	 BeanUtils.setProperty(p,"age","19");
	 Stringname = BeanUtils.getProperty(p,"name");
	 int' age = Integer.parseInt(BeanUtils.getProperty(p,"age")); System.out.println(name);
	 System.out.println(age);
	 */
	 Map<String,Object> map= new HashMap<String,Object>();
	 map.put("name", "yanmin");
	 map.put("age",19);
	  BeanUtils.populate(p,map);
	  String name=BeanUtils.getProperty(p,"name");
	 int age=Integer.parseInt(BeanUtils.getProperty(p,"age"));
	  System.out.println( name);
	  System.out.println(age);
	 

}
}

2: 初识EL

2.1 初识 EL 表达式
EL在开发中,通常是用来获取域对象中保存的值,基本语法:${域对象的名称}。
比如说: request.setAttribute(“key”,“value123”): ${key},获取的值就是value123
如果域对象的名称写错了,使用el表达式获取值,获取的是"".


(1)在项目的src 目录下创建一个名为cn.itcast.chapter07.servlet 的包,在包下创建一个用于存储用户名和密码的类MyServlet,具体如下图:

package cn.itcast.chapter07.servlet;
import java.io.*;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.*;
import javax.servlet.http.*;

import cn.itcast.chapter07.Person;

public class MyServlet extends HttpServiet{
	private static final long serialVersionUID =1l;
	
protected void doGet (HttpServletRequest request,
	HttpServletResponse response)throws ServletException, IOException {
	Person p =new Person();
	p.setName("yanmin");
	Map<String,String> map =new HashMap<String,String>();
		map.put("my-name","map的值");
		request.setAttribute("uesr",null);
	request.setAttribute("person",p);
	request.setAttribute("username","yanmin");
    request.setAttribute("password","123") ;
RequestDispatcher dis = request
.getRequestDispatcher("/myjsp.jsp");
dis.forward(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException
{
	doGet(request, response);
}
}

2)在WebContent目录下编写一个名为myjsp的JSP文件,使用该文件来输出存储信息,具体如下图所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=(String)  request.getAttribute("person")%><br/>
<%=(String)  request.getAttribute("username")%><br/>
<%=(String) request.getAttribute("password")%><br/>
<br/>
---------------------------------<br/>
----------${ username}<br/>
-----------$(password)<br/>
</body>
</html>

(3)启动Tomcat服务器,在浏览器地址栏里输入“http://localhost:9999/chapter07/myservlet”地址 访问MyServlet页面,效果如下图所示:
在这里插入图片描述
2.2 EL表达式中的标识符
在el书写过程中,会用一些符号来标记变量、函数名等,这些符号称之为标识符。
书写规范:
1.不能以数字开头
2.不能包含el中的关键字:and , or 等
3.不能使用el表达式的隐式对象。
4.不能包含特殊符号,比如正斜杠等

2.3 EL中的变量
基本格式:${域对象的名称},这个域对象的名称可以理解为就是el中的变量,
那这个变量就不需要定义了,可以直接使用。

2.4 EL 中的常量
1.布尔常量:true或false
2.数字常量:整型、浮点常量,使用方式和java差不多
3.字符串常量:使用方式和java差不多,比如: " e l 的 字 符 串 常 量 " 4. N u l l 常 量 : {“el的字符串常量”} 4.Null常量: "el的字符串常量"4.Null常量:{null}

2.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.算术运算符:+ - * /
在myjsp.jsp文件中编写
在这里插入图片描述
启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/myservlet”访问MyServlet页面
在这里插入图片描述
4.比较运算符: > < >= <= == !=

在myjsp.jsp文件中编写
在这里插入图片描述
启动Tomcat服务器,在浏览器地址栏里输入“http://localhost:9999/chapter07/myservlet”地址 访问MyServlet页面
效果
在这里插入图片描述
5.逻辑运算符: &&(and) ||(or) !(not)
6.empty 运算符:用来判断域对象中的值是否存在,不存在返回为true,否则返回的结果是false.
在myjsp.jsp文件中编写
在这里插入图片描述
启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/myservlet”访问MyServlet页面
在这里插入图片描述
EL 隐式对象
1.pageContext对象:为了获取jsp中的隐式对象。
比如:

     获取项目的路径:${pageContext.request.contextPath }<br/>
	 获取请求的URL:${pageContext.request.requestURI }

在WebContent目录下编写一个名为pageContext.jsp的JSP文件,
代码如下图:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
获取项目路径YANMIN:$(pageContext.request.contextPath }<br/>
$(pageContext.request.contextPath <br/>
$(pageContext.servletContext.servletNames <br/>
</body>
</html>

启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/pageContext.jsp”访问pageContext页面,效果如下图所示:
在这里插入图片描述
2.web域相关的对象
域作用范围从小到大:pageContext—>request—>session—>application(servletContext)
el表达式获取域对象中的值:如果域对象的名称相同,获取的是域作用范围最小的值。和pageContext对象的findAttribute方法的效果是一样的。


(1)在WebContent目录下编写一个名为scopes.jsp的JSP文件,
代码如下图:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("page","PAGE");
request.setAttribute("request", "REQUEST");
session. setAttribute("session" ,"SESSION");
application. setAttribute("appl","APPLICATION");
%>
$[pageScope.page )=== $(page <br/>
$(requestScope.YANMIN)=== ${YANMIN}<br/>
<%
pageContext.setAttribute("aa1","PAGE");
request. setAttribute("aa2" ,"REQUEST") ;
session. setAttribute("aa" ,"SESSION" );
application. setAttribute("aa" ,"APPLICATION");
%>
------------------------------------<br/>
${aa}<br/>
$(sessionScope.aa <br/>
</body>
</html>

(2)启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/scopes.jsp”访问scopes页面,效果如下图所示:

在这里插入图片描述
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] }


(1)在WebContent目录下编写一个名为param.jsp的JSP文件,代码如下图:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="$(pageContext.request.contextPath )/ param.jsp" method="get">
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; <inputtype="reset" value="重填"/><hr/>
num1:${param.num1} <br/>
num2:${ paramValues.num[0] }<br/>
num3:${paramValues.num[1]}<br/>
</body>
</html>

(2)启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/scopes.jsp”访问param页面,效果如下图所示:
在这里插入图片描述
4. Cookie 对象
获取cookie的名称,获取cookie的值
比如:

<% response.addCookie(new Cookie("userName","itcast")); %>
		获取cookie对象:${cookie.userName }<br/>
		获取cookie的名称:${cookie.userName.name }<br/>
		获取cookie的值:${cookie.userName.value }<br/>


(1)在WebContent目录下编写一个名为cookie.jsp的JSP文件,代码如下图:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% response.addCookie(new Cookie("username","YANMIN")); %>
获取cookie对象:${cookie.username} <br/>
获取cookie对象名字:$ {cookie.username.name} <br/>
 获取cookie对象值:${cookie.username.value} <br/>
</body>
</html>

(2)启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/cookie.jsp”访问cookie页面,效果如下图所示:
在这里插入图片描述
2020080605041

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:15:31  更:2021-11-20 18:16:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:46:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码