Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

时间:2022-09-05 13:47:56

全部章节   >>>>


本章目录

4.1 JavaBean

4.1.1 JavaBean 概述

4.1.2 JavaBean的重要性

4.1.3 JavaBean的特点

4.1.4 JavaBean的属性

4.1.5 快速生成JavaBean

4.1.6 实践练习

4.2 JavaBean 的分类

4.2.1 封装数据的 JavaBean

4.2.2 封装业务的 JavaBean

4.2.3 实践练习

4.3 JSP 标准动作简介(一)

4.3.1 标准动作概述

4.3.2 < jsp:useBean >

4.3.3 < jsp:setProperty >

4.3.3 < jsp:getProperty >

4.3.4 实践练习

4.4  JSP 标准动作简介(二)

4.4.1 < jsp:forward >

4.4.2 < jsp:include >

4.4.3 实践练习

总结:


4.1 JavaBean

4.1.1 JavaBean 概述

JavaBean 是使用 Java 编写的组件,每一个 JavaBean 均实现一个特定的功能。

JavaBean 通过对属性和方法的封装,成为具有独立功能、可重复使用并且可与其他控件通信的组件对象,具有以下优点

  • 重用性强
  • 模块化
  • 可维护性、扩展性强

4.1.2 JavaBean的重要性

在一个复杂的Web应用中把特定的功能封装成JavaBean能有效提高代码重用性和后期维护性

JavaBean 通过封装一些具体的动作来实现一个特定的功能,即对外提供最小限度的属性接口,供用户操作和控制,但用户不知道它内部的具体运行机制,从而提高了安全性

4.1.3 JavaBean的特点

通常JavaBean都具有如下几个特点:

提供一个public无参构造方法,以方便创建对象和赋予初值

public class People {
private String name; // 定义姓名
private String sex; // 定义性别
public People(){
name="jack"; // 为特性的属性设置默认值
sex="M";
}
// 此处省略 getter() 方法和 setter() 方法
}

通常情况JavaBean组件需要实现 java.io.Serializable 序列化接口,这样在将对象存储为文件或网络中传递时将非常便利

import java.io.Serializable;
// 实现接口
public class People implements Serializable { //该接口中未定义任何内容,所以仅仅起标识作用
......
}

在 JavaBean 组件中要为所有标识特性的属性提供对应的 get() 方法和 set() 方法,以便为组件用户提供操作和控制组件的接口

public class People implements Serializable {
private String name; // 定义姓名 属性声明private私有 提供public公共get、set访问接口
public People(){
}
//get() 方法与 set() 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

4.1.4 JavaBean的属性

JavaBean 的属性可以是任意类型,并且一个 JavaBean 可以有多个属性。每个属性通常都需要具有相应的setter()修改器方法、getter()访问读取器方法

getter、setter方法命名规则如下:

  • 属性名:name getter
  • 读取:getName()
  • setter修改:setName()

4.1.5 快速生成JavaBean

通过 Eclipse 快速生成JavaBean中的构造方法:

有参构造方法虽然不是 JavaBean 必须的,但为了使实例化 JavaBean 组件更加方便,建议提供有参构造方法,但是无参构造方法需要显示提供

Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

4.1.6 实践练习

4.2 JavaBean 的分类

4.2.1 封装数据的 JavaBean

封装数据的 JavaBean 通常就是表达一个完整的实体信息,适用于以下两种情况:

在方法中对一个完整实体VO(值对象)信息进行传递(可以提高方法的可维护性与可扩展性)

 public boolean addPeople(People people){}

作为某些集合数据中的单个元素实体(集合中存储的实体VO对象信息,代表集合中的单个数据项)

List<People> peopleList=new ArrayList<People>();
People people=new People();
peopleList.add(people);

4.2.2 封装业务的 JavaBean

封装业务方法的 JavaBean 通常不需要 get()、set() 方法,只要根据业务需求定义相应的业务方法即可,比如针对数据操作的增删改查可以定义对应方法

public class PeopleService{
// 增加 People
public boolean add(People people) { }
// 通过 id 更新一个 People
public boolean update(People newPeople){ }
// 通过 id 删除一个 People
public boolean del(int id) { }
// 根据 id 得到一个 People
public People get(int id){ }
// 得到所有的 People
public List<People> getAll(){ }
}

每个方法中可以针对数据库表编写操作代码,实现功能

4.2.3 实践练习

4.3 JSP 标准动作简介(一)

4.3.1 标准动作概述

JSP中有两种方法可以创建并使用JavaBean。一种是使用Java脚本代码实现,另一种是通过JSP标准动作实现

JSP标准动作更好的配合Html规范,以标签的方式来操作和使用JavaBean,有效的避免了JSP中出现大量的Java脚本代码,保持了界面风格统一

常用的标准动作如下

Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

4.3.2 < jsp:useBean >

<jsp:useBean>用于在JSP页面中创建一个JavaBean对象,并且通过属性的设置将该实例存储到 JSP 指定的范围内。如果在指定的范围内已经存在指定的 Bean 实例,则直接使用此实例,而不再创建新的 Bean 实例

语法:

<jsp:useBean id="BeanName" class="package.className"
scope="page|session|application|request"/>
  • id 属性:指定一个变量名
  • class 属性:指定一个完整的类名,其中 package 表示包名,className 表示类名
  • scope 属性:指定所创建的 Bean 实例的存储范围,默认为“page”范围

scope代表创建的对象所处的作用域,有如下几种:

名称

作用域

page

当前Jsp页面范围

request

request请求范围,如转发的下一个界面

session

session会话范围有效

application

application整个应用程序范围

示例:创建DateFormat类

package com.exam;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormat {
// 定义 convert() 方法
public String convert(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
}

创建DateFormat类使用<jsp:useBean> 在JSP界面创建对象

<%@ page import="java.util.*"%>
<body>
<jsp:useBean id="dateFormate" class="com.exam.DateFormat" />
<%
//在 scriptlet 中直接使用
String msg=dateFormate.convert(new Date(),"yyyy 年 MM 月 dd 日 HH:mm:ss");
out.print("<h3> 现在是:"+msg+"<h3>");
%>
</body>

4.3.3 < jsp:setProperty >

<jsp:setProperty> 动作用于设置 useBean 中指定 Bean 的属性值

语法:

<jsp:setProperty name="BeanAlias“  property="propertyName"
value=“value“ param=“请求参数名”/>
  • name 属性:指定 <jsp:useBean> 中使用的 Bean 的 ID。
  • property 属性:指定要设置的 Bean 的属性名称。
  • value 属性:指定要为属性设置的显示值。
  • param 属性:自动从请求中获取对应参数值放入对象中

param属性不能和value同时使用

4.3.3 < jsp:getProperty >

<jsp:getProperty> 动作用于获取 <jsp:useBean> 中指定 Bean 的属性值

注意: <jsp:getProperty>会调用JavaBean中的getXXX对应方法,而不是访问属性,即使没有属性,如果有getter方法仍可以调用成功

语法:

<jsp:getProperty name="BeanAlias" property="propertyName" />
  • name 属性:指定 <jsp:useBean> 中使用的 Bean 的 ID。
  • property 属性:指定从 Bean 中检索指定的名称。

示例:使用JSP标准动作创建JavaBean对象,设置属性以及计算获取信息

<jsp:useBean id="subjectInfo" class="com.exam.SubjectInfo" />
<!-- 为该 bean 设置属性 -->
<jsp:setProperty name="subjectInfo" property="chinese" param="chinese" />
<!-- 通过 param 得到输入的语文分数的值 -->
<jsp:setProperty name="subjectInfo" property="mathematics" param="mathematics" />
<!-- 通过 param 得到输入的数学分数的值 -->
<jsp:setProperty name="subjectInfo" property="english" param="english" /> 语文分数:<jsp:getProperty name="subjectInfo" property="chinese" /><br />
数学分数:<jsp:getProperty name="subjectInfo" property="mathematics" /><br />
英语分数:<jsp:getProperty name="subjectInfo" property="english" /><br />
总分:<jsp:getProperty name="subjectInfo" property="sumScore" /><br />
平均分:<jsp:getProperty name="subjectInfo" property="averageScore" /><br />

Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

4.3.4 实践练习

4.4  JSP 标准动作简介(二)

4.4.1 < jsp:forward >

forward 动作用于将用户的请求转发到一个 HTML 文件、JSP 页面或 Servlet 中。

语法:

<jsp:forward page=“跳转的目标url"/>

注意:forward 标准动作相当于转发而不是重定向。

示例:使用<jsp:forward>跳转界面,同时传递参数数据

<body>
<jsp:forward page="target.jsp">
<jsp:param value="1234" name="userName" />
<jsp:param value="123456" name="password" />
</jsp:forward>
</body>

target.jsp 是转发后的界面

4.4.2 < jsp:include >

<jsp:include>可以将另外一个页面嵌入到当前页面中

<jsp:include page="url" flush="true"/>

url 属性:指定目标资源。

flush 属性:这里必须使用 flush="true",不能使用 false 值,默认值为 false。

示例: 使用<jsp:include>嵌入另外一个页面

  1. 创建一个 JSP 页面,命名为“date.jsp”,使用脚本判断当前日期和星期并输出
  2. 创建一个 JSP 页面,命名为“test.jsp”,使用include动作将date.jsp嵌入:
<body>
<jsp:include page="date.jsp" flush="true" />
</body>

Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

4.4.3 实践练习

总结:

  • JavaBean 是使用 Java 编写的组件,每一个 JavaBean 实现一个特定的功能,具有重用性强,易维护扩展等特点
  • JavaBean一般需要实现序列化接口,提供无参构造方法,对功能进行getter、setter封装访问
  • JSP标准动作是一种以标签的形式替代scriptlet脚本方式操作JavaBean
  • JSP标准动作包括:<jsp:useBean> <jsp:setProperty> <jsp:getProperty>    <jsp:forward> <jsp:include>等