Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】
全部章节 >>>>
本章目录
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>嵌入另外一个页面
- 创建一个 JSP 页面,命名为“date.jsp”,使用脚本判断当前日期和星期并输出
- 创建一个 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标准动作】的更多相关文章
- Java Web程序设计笔记 • 【目录】
章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...
- Java Web程序设计笔记 • 【第6章 Servlet技术进阶】
全部章节 >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...
- Java Web程序设计笔记 • 【第5章 Servlet技术】
全部章节 >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...
- Java Web程序设计笔记 • 【第2章 JSP基础】
全部章节 >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...
- Java Web程序设计笔记 • 【第1章 Web应用程序】
全部章节 >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...
- Java Web程序设计笔记 • 【第10章 JSTL标签库】
全部章节 >>>> 本章目录 10.1 JSTL 概述 10.1.1 JSTL 简介 10.1.1 JSTL 使用 10.1.2 实践练习 10.2 核心标签库 10.2. ...
- Java Web程序设计笔记 • 【第9章 EL表达式】
全部章节 >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...
- Java Web程序设计笔记 • 【第3章 JSP内置对象】
全部章节 >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...
- Java Web程序设计笔记 • 【第8章 会话跟踪技术进阶】
全部章节 >>>> 本章目录 8.1 Session机制 8.1.1 Session 简介 8.1.2 创建 HttpSession 实例 8.1.3 HttpSesiso ...
随机推荐
- E面波导和H面波导的问题
我感觉与窄壁平行是E面,反之为H面.通常E面(窄面)是指与电场方向平行的方向图切面(窄面):H面(宽面)是指与磁场方向平行的方向图切面(宽面).E面的意思是... ElevationH面的意思是... ...
- Output of C++ Program | Set 8
Predict the output of following C++ programs. Question 1 1 #include<iostream> 2 using namespac ...
- Simulating final class in C++
Ever wondered how can you design a class in C++ which can't be inherited. Java and C# programming la ...
- Linux:-e、-d、-f、-L、-r、-w、-x、-s、-h、
-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fil ...
- html标签设置contenteditable时,去除粘贴文本自带样式
在一个div标签里面加了可编辑的属性,从别的地方复制了一串文本,只想把文本内容存到接口里面,结果发现文本自带的标签和样式都会存进去. $(".session-new-name"). ...
- Mysql 分页查询sql优化
先查下数据表的总条数: SELECT COUNT(id) FROM ts_translation_send_address 执行分页界SQL 查看使用时间2.210s SELECT * FROM ts ...
- 效验pipeline语法
目录 一.简介 二.配置 一.简介 因为jenkins pipeline不像JAVA之类的语言那样应用广泛,所以没有相关的代码检测插件. 2018年11月初,Jenkins官方博客介绍了一个VS Co ...
- HBuilderX无法启动微信小程序?仅三步
1.复制微信开发者工具启动路径 : "C:\Program Files (x86)\Tencent\微信web开发者工具\微信web开发者工具.exe" 不要后面的 "微 ...
- [BUUCTF]REVERSE——helloword
helloword 题目是安卓逆向.安卓逆向工具下载地址 用APKIDE打开附件,ctf+f调出检索版,检索main函数,能看到flag字符串 flag{7631a988259a00816deda84 ...
- Python pyecharts绘制漏斗图
一.pyecharts绘制漏斗图方法简介 funnel.add()方法简介add(name, attr, value, funnel_sort="ascending", funne ...