全部章节   >>>>


本章目录

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 组件更加方便,建议提供有参构造方法,但是无参构造方法需要显示提供

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脚本代码,保持了界面风格统一

常用的标准动作如下

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 />

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>

4.4.3 实践练习

总结:

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

Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】的更多相关文章

  1. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...

  2. Java Web程序设计笔记 • 【第6章 Servlet技术进阶】

    全部章节   >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...

  3. Java Web程序设计笔记 • 【第5章 Servlet技术】

    全部章节   >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...

  4. Java Web程序设计笔记 • 【第2章 JSP基础】

    全部章节   >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...

  5. Java Web程序设计笔记 • 【第1章 Web应用程序】

    全部章节   >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...

  6. Java Web程序设计笔记 • 【第10章 JSTL标签库】

    全部章节   >>>> 本章目录 10.1 JSTL 概述 10.1.1 JSTL 简介 10.1.1 JSTL 使用 10.1.2 实践练习 10.2 核心标签库 10.2. ...

  7. Java Web程序设计笔记 • 【第9章 EL表达式】

    全部章节   >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...

  8. Java Web程序设计笔记 • 【第3章 JSP内置对象】

    全部章节   >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...

  9. Java Web程序设计笔记 • 【第8章 会话跟踪技术进阶】

    全部章节   >>>> 本章目录 8.1 Session机制 8.1.1 Session 简介 8.1.2 创建 HttpSession 实例 8.1.3 HttpSesiso ...

随机推荐

  1. tomcat结合nginx

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...

  2. mysql index 8.0

    创建表 use vodb; drop table if exists test1; create table test1(id int NOT NULL AUTO_INCREMENT primary ...

  3. GO并发相关

    锁的使用 注意要成对,重点是代码中有分支或者异常返回的情况,这种情况要在异常返回前先释放锁 mysqlInstanceLock.Lock() slaveHostSql := "show sl ...

  4. vue-cli2嵌入html

    1.使用iframe <!-- 相对路径/绝对路径 --> <iframe src="../../../static/zsw.html"></ifra ...

  5. Dubbo应用到web工程

    一.创建提供者03-provider-web (1) 创建工程 创建Maven的web工程,然后创建实现类. (2) 导入依赖 Spring的版本为4.3.16 需要的依赖有: dubbo2.7.0版 ...

  6. 关于python中显存回收的问题

    技术背景 笔者在执行一个Jax的任务中,又发现了一个奇怪的问题,就是明明只分配了很小的矩阵空间,但是在多次的任务执行之后,显存突然就爆了.而且此时已经按照Jax的官方说明配置了XLA_PYTHON_C ...

  7. java多线程6:ReentrantLock

    下面看下JUC包下的一大并发神器ReentrantLock,是一个可重入的互斥锁,具有比synchronized更为强大的功能. ReentrantLock基本用法 先来看一下ReentrantLoc ...

  8. greeting-150

    拿到程序例行检查,可以看出程序是32位的程序 将程序放入ida中进入主函数查看 但是我们将程序运行一次后发现程序还运行了nao的程序 说明程序在中间还引用了nao函数,通过代码审计我们可以很直接的看到 ...

  9. odoo views中html的奇怪问题

    在我创建了字段类型为 fields.Html 以后,确出现了两种不同的情况 下图中,content是此类型的,可以正常显示不需要加widget(小部件)="html" <fo ...

  10. mysql 连接数过多内存增长过快

    mysql连接允许长连接和短链接,但是本身建立连接会有很大开销所以一般连接mysql会使用长连接.但是全部是使用长连接后,可能会出现mysql有时占用内存涨的特别快,这是因为mysql在执行过程中临时 ...