【JavaWeb】Java Bean

1.初识JavaBean

1.1什么是JavaBean

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

1.2访问JavaBean的属性

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

1.3BeanUtils工具

1.3.1什么是BeanUtils

BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。
用途:
1)beanUtils 可以便于对javaBean的属性进行赋值。
2)beanUtils 可以便于对javaBean的对象进行赋值。
3)beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

1.3.2BeanUtils的使用

前提:约定前提: 参数名称 需要和javabean的属性名称保持一致!!!!
示例:
Person.java

package cn.itcast.chapter008.beanutils;

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;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}

BeanUtilsDemo.java

package cn.itcast.chapter008.beanutils;

import java.util.HashMap;
import java.util.Map;


public class BeanUtilsDemo {
	public static void main(String[] args) throws Exception{
		Person p = new Person();
//		p.setName("dashuju2005");
		
//		BeanUtils.setProperty(p,"name","huagong");
//		BeanUtils.setProperty(p,"age","20");
//		String name=BeanUtils.getProperty(p,"name");
//		int age =Interget.parseInt(BeanUtils.getProperty(p,"age"));
//		System.out.println(name);
//		System.out.println(age);
		
		
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("name", "dashuju2005");
		map.put("age", 2);
		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);
	}
}

1

2.EL表达式

2.1初识EL表达式

  • Expression Language表达式语言
  • 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
  • 在JSP2.0开始引入概念
    示例:
    MyServlet.java
package cn.itcast.chapter008.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.chapter008.beanutils.Person;

/**
 * Servlet implementation class MyServlet
 */
@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Person p = new Person();
		p.setName("chengqi");
		
		Map<String,String> map = new HashMap<String,String>();
		map.put("my-name", "map的值");
		request.setAttribute("user", map);
		
		request.setAttribute("person", p);
		request.setAttribute("username", "dashuju");
		request.setAttribute("password", "123456");
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

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>
	${empty person}<br/>
	${empty user}<br/>

	1>3?${1>3 }<br/>

--------------------------------------------------<br/>

	1+3${1+3 }<br/>

--------------------------------------------------<br/>

	${person.name }<br/>

--------------------------------------------------<br/>

	${user.my-name }<br/>
	${user["my-name"] }<br/>

--------------------------------------------------<br/>

	${person.name }<br/>
	
--------------------------------------------------<br/>
	
	<%=(String)request.getAttribute("username")%><br/>
	<%=(String)request.getAttribute("password")%><br/>
	
	
--------------------------------------------------<br/>
	
	-----${username}-------<br/>
	${password}<br/>
	123456cq
</body>
</html>

2

2.2EL标识符

为了避免出现非法的标识符,在定义标识符时还需要遵循以下规范。
• 不能以数字开头。
• 不能是EL中的保留字,如and、or、gt。
• 不能是EL隐式对象,如pageContext。
• 不能包含单引号(’)、双引号(")、减号(-)和正斜杠(/)等特殊字符。

2.3EL保留字

保留字就是编程语言里事先定义好并赋予了特殊含义的单词。和其他语言一样,EL 表达式中也定义了许多保留字,如false、not等,接下来就列举EL中所有的保留字,具体如下。
and   eq    gt     true    instanceofor  
or    ne    le     false    empty
not   lt    ge    null     div     mod
需要注意的是,EL表达式中的这些保留字不能被作为标识符,以免在程序编译时发生错误。

2.4EL中的变量

EL表达式中的变量就是一个基本的存储单元,EL表达式可以将变量映射到一个对象上,具体示例如下所示。

${product}

在上述示例中,product就是一个变量。EL表达式中的变量不用事先定义就可以直接使用,例如,表达式${product}就可以访问变量product的值。

2.5EL中的常量

1.布尔常量
true、false
2.整型常量
与 Java 中的十进制的整型常量相同,它的取值范围是 Java 语言中定义的常量Long.MIN_VALUE到Long.MAX_VALUE之间,即(−2)63与263−1之间的整数。
3.浮点数常量
浮点数常量用整数部分加小数部分表示,也可以用指数形式表示,例如,1.2E4和1.2都是合法的浮点数常量。它的取值范围是 Java 语言中定义的常量 Double.MIN_VALUE 到Double.MAX_VALUE之间,即4.9E-324~1.8E308之间的浮点数。
4.字符串常量
字符串常量是用单引号或双引号引起来的一连串字符。由于字符串常量需要用单引号或双引号引起来,所以,字符串本身包含的单引号或双引号需要用反斜杠(\)进行转义,即用“’”表示字面意义上的单引号,用“"”表示字面意义上的双引号。如果字符串本身包含反斜杠(\),也要进行转义,即用“\”表示字面意义上的一个反斜杠。

需要注意的是,只有字符串常量用单引号引起来时,字符串本身包含的单引号才需要进行转义,而双引号不必进行转义;只有字符串常量用双引号引起来时,字符串本身包含的双引号才需要进行转义,而单引号不必转义,例如"ab’4c"d5\e"表示的字符串是ab’4c"d5\e。
5.NUll常量
null常用于表示变量应用的对象为空。

2.6EL中的运算符

EL表达式支持简单的运算,例如,加(+)、减(-)、乘(*)、除(/)等。为此,在EL中提供了多种运算符,根据运算方式的不同,EL中的运算符包括以下几种:
1.点运算符
(.)EL 表达式中的点运算符,用于访问 JSP 页面中某些对象的属性,如 JavaBean 对象、List集合、Array数组等,其语法格式如下。

${customer.name}

在上述语法格式中,表达式${customer.name}中点运算符的作用就是访问customer对象中的name属性。

2.方括号运算符
EL表达式中的方括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性。当获取的属性名中包含一些特殊符号,如“-”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性,其语法格式如下。${user[“My-Name”]}需要注意的是,在访问对象的属性时,通常情况都会使用点运算符作为简单的写法。但实际上,方括号运算符比点运算符应用更广泛。接下来就对比一下这两种运算符在实际开发中的应用,具体如下。
• 点运算符和方括号运算符在某种情况下可以互换,如${student.name}等价于${student[“name”]}
• 方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第1个元素。在这种情况下,只能使用方括号运算符,而不能使用点运算符。
• 方括号运算符和点运算符可以相互结合使用,例如,表达式${users[0].userName}可以访问集合或数组中的第1个元素的userName属性。

3.算术运算符
EL 表达式中的算术运算符用于对整数和浮点数的值进行算术运算。使用这些算术运算符可以非常方便地在JSP页面进行算术运算,并且可以简化页面的代码量。

  1. EL比较运算符
    EL表达式中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式,所有的运算符执行的结果都是布尔类型。

5.逻辑运算符
EL 表达式中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍为布尔类型。

6.empty运算符
EL表达式中的empty运算符用于判断某个对象是否为null或" ",结果为布尔类型,其基本的语法格式如下所示。

${empty var}

• var变量不存在,即没有定义,例如表达式 e m p t y n a m e , 如 果 不 存 在 n a m e 变 量 , 就 返 回 t r u e ; • v a r 变 量 的 值 为 n u l l , 例 如 表 达 式 {empty name},如果不存在name变量,就返回true; • var变量的值为null,例如表达式 emptynamenametruevarnull{empty customer.name},如果customer.name的值为null,就返回true;
• var变量引用集合(Set、Map和List)类型对象,并且在集合对象中不包含任何元素时,则返回值为true。例如,如果表达式${empty list}中list集合中没有任何元素,就返回true。

7.条件运算符
EL表达式中条件运算符用于执行某种条件判断,它类似于Java语言中的if-else语句,其语法格式如下。
A ? B : C 在 上 述 语 法 格 式 中 , 表 达 式 A 的 计 算 结 果 为 布 尔 类 型 , 如 果 表 达 式 A 的 计 算 结 果 为 t r u e , 就 执 行 表 达 式 B , 并 返 回 B 的 值 ; 如 果 表 达 式 A 的 计 算 结 果 为 f a l s e , 就 执 行 表 达 式 C , 并 返 回 C 的 值 , 例 如 表 达 式 ‘ {A?B:C} 在上述语法格式中,表达式A的计算结果为布尔类型,如果表达式A的计算结果为true,就执行表达式B,并返回B的值;如果表达式A的计算结果为false,就执行表达式C,并返回C的值,例如表达式` A?B:CAAtrueBBAfalseCC{(1==2)?3:4}`的结果就为4。

8.“( ) ”运算符
EL 表达式中的圆括号用于改变其他运算符的优先级,例如表达式 a ∗ b + c , 正 常 情 况 下 会 先 计 算 a ∗ b 的 积 , 然 后 再 将 计 算 的 结 果 与 c 相 加 , 如 果 在 这 个 表 达 式 中 加 一 个 圆 括 号 运 算 符 , 将 表 达 式 修 改 为 ‘ {a*b+c},正常情况下会先计算 a*b 的积,然后再将计算的结果与 c 相加,如果在这个表达式中加一个圆括号运算符,将表达式修改为` ab+cabc{a*(b+c)}`,这样则先计算b与c的和,再将计算的结果与a相乘。需要注意的是,EL表达式中的运算符都有不同的运算优先级,当EL表达式中包含多种运算符时,它们必须按照各自优先级的大小来进行运算。

2.7EL隐式对象

2.7.1pageContext对象

在jsp中通过EL中的pageContext对象得到jsp中的一切内置对象。因此如果要在EL中使用jsp内置对象可以通过pageContext间接获取。pageContext是连接EL和jsp内置对象的桥梁。
${pageContext.page}
${pageContext.request}//取得request对象
${pageContext.resbonse}//取得response对象
${pageContext.exception}//取得exception对象
等等 类似的还可以得到jsp其他内置对象

2.7.2Web域对象

1、PageContext :页面范围的数据
2、ServletRequest:请求范围的数据
3、HttpSession:回话范围的数据
4、ServletContext:应用范围的数据

2.7.3参数访问对象

主要有以下两种方式:

  • Param : 获取文本框、密码框、单选框等的值
  • paramValues :获取复选框的值
    下面是在jsp页面通过EL获取表单信息的代码
    -------获取表单数据-----
    ${param.name}
    ${paramValues.hobbies[0]}
    ${paramValues.hobbies[1]}
    ${paramValues.hobbies[2]}

2.7.4cookie对象

该对象是一个代表所有Cookie信息的Map集合,Map集合中的元素的键为各个Cookie的名称,值则为对应的Cookie对象
格式:
获取cookie对象的信息:${cookie.userName}
获取cookie对象的名称:${cookie.userName.name}
获取cookie对象的值:${cookie.userName.value}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值