JSP 最强有力的一个方面就是能够使用 JavaBean 组件。 按照 Sun 公司的定义, JavaBean是一个可重复使用的软件组件。实际上 JavaBean 是一种 Java 类,通过封装属性和方法成为具有某种功能或者处理某些业务的对象,简称 Bean。

一个基本的 JSP 页面由静态的 HTML 标签和 Java 脚本组成,如果 Java脚本和 HTML 标签大量掺杂在一起,就显得页面混杂,不易维护。 JSP 页面应当将数据的处理过程指派给一个或者几个 Bean 来完成,而在 JSP 页面中调用 JavaBean。不提倡大量的数据处理都用 Java 脚本来完成。 JSP 页面中调用 JavaBean,可有效地分离静态工作部分和动态工作部分,实现业务逻辑和表现形式的分离。 JavaBean 负责业务逻辑的处理, JSP 负责页面的展示,如图 5–1 所示。

JavaBean 简介

JavaBean 的特点
可以实现代码的重复利用。
易编写、 易维护、易使用。
可以在任何支持 Java 的平台上工作,而不需要重新编译。
可以通过网络传输。
可以与其他 Java 类同时使用。
JavaBean 的应用范围
JavaBean 传统的应用在于可视化领域,如 AWT(抽象窗口工具集)和 Swing 下的应用。现在, JavaBean 更多的应用在于非可视化领域,它在服务器端应用方面表现出了越来越强的生命力。非可视化的 JavaBean 和可视化的 JavaBean 同样使用属性和事件。非可视化的JavaBean 在 JSP 程序中常用来封装业务逻辑、数据库操作等,可以很好地实现业务逻辑和前台页面的分离,使得系统具有更好的健壮性和灵活性。注意: JavaBean 和 EJB( Enterprise JavaBean)的概念是完全不同的。

编写 JavaBean 遵循的原则

编写 JavaBean 就是编写一个 Java 的类,所以只要学会写类就能编写一个 JavaBean,这个类创建的一个对象称之为 JavaBean。为了让使用 JavaBean 的应用程序构建工具(比如 JSP引擎)知道这个 Bean 的属性和方法, JavaBean 的类需要遵守以下规则:
1、必须具备一个零参数的构造方法,显式地定义这样一个构造方法或者省略所有的构造方法都能满足这项要求。
2、成员变量也称为属性, JavaBean 不应该有公开的成员变量,使用存取方法读取和修改属性, 而不允许对字段直接访问。 属性的名字建议以小写英文字母开头。
3、属性的值通过 getXxx()和 setXxx()方法来访问。如果类有 String 类型的属性 title,读取 title 的方法是返回 String 的 getTitle(), 修改 title 的方法是 setTitle(String title)。
4、布尔型的属性的读取方法可以使用 getXxx(),也可以使用 isXxx()。
5、JavaBean 需要声明在包里面, package 保留字给类起一个包名。

举个例子:

package com.wuyudong;

public class User {
private String userName;
private String password; public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

诀窍: Eclipse 可以帮助我们生成 getter 和 setter 方法,右键 Source→ Generate  Getters and Setters

<jsp:useBean>

JSP 页面中可以<jsp:useBean>动作元素在 JSP 页面中使用 JavaBean 对象,这样就可以将大部分业务处理逻辑封装在 JavaBean

<jsp:useBean>动作元素用来在 JSP 页面中获取或者创建一个 JavaBean 对象,并指定它的名字和作用范围。 JSP 容器确保 JavaBean 对象在指定的范围内可以使用。 <jsp:useBean>的语法格式如下:
<jsp:useBean id="beanName" class="package.BeanClassName" scope="page | request | session | application"/>

当服务器上某个含有<jsp:useBean>动作元素的 JSP 页面被加载执行时, JSP 引擎首先根据 ID 给出的 JavaBean 的名字( beanName),在 scope 范围对应的 JSP 内部对象上查找是否有这个名字的属性( Attribute)。如果在指定范围内找到了与 beanName 同名的属性, JSP 引擎返回属性对应的对象的引用。如果没有在指定的范围内找到与 beanName 同名的属性, JSP引擎根据 class 属性给出的包名和类名,创建一个该类的对象, 并将该对象作为属性名为beanName 的一个属性的值,绑定到 scope 范围对应的 JSP 内部对象上。由于 pageContext对象可以操作各个范围的属性,实际上 JavaBean 的查找和绑定都是通过 pageContext 对象来完成的。 如果没有指定 JavaBean 的范围,默认范围是 page。

实战一下:

JavaBean

package com.wuyudong;

public class Bean {
private String name; public String getName() {
return name + " 的JavaBean程序!";
} public void setName(String name) {
this.name = name;
}
}

index.jsp

<jsp:useBean id="bean" class="com.wuyudong.Bean"></jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
bean.setName("wuyudong");
%>
<h1 align="center"><%=bean.getName()%></h1>
</body>
</html>

<jsp:setProperty>

<jsp:setProperty>动作元素用来设置 JavaBean 的简单属性和索引属性。 <jsp:setProperty>使用 JavaBean 的 setter 方法设置一个或多个属性的值。

<jsp:setProperty>可以使用 value 给出属性的取值, 取值可以是一个字符串,也可以是一个 JSP 表达式( <%= %>)。
<jsp:setProperty name="beanName" property="propertyName" value="propertyValue"/>

实战:

创建javabean对象

package com.wuyudong;

public class Student {
private int id;
private int age;
private String classes;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
}

创建form表单放在index.jsp中

<form action="student.jsp" method="post">
<p>
学号: <input type="text" name="id">
</p>
<p>
年龄: <input type="text" name="age">
</p>
<p>
<input type="submit" value="提交">
<input type="reset" value="重 置">
</p>
</form>

<jsp:getProperty>

<jsp:getProperty>动作元素用来访问一个 JavaBean 的属性。访问的属性值将被转化成字符串,然后发送到输出流中。如果属性是一个对象,将调用该对象的 toString()方法。<jsp:getProperty>动作元素是通过调用 JavaBean 的 getter 方法获取属性的。
<jsp:getProperty name="beanName" property="propertyName"/>

注意: <jsp:getProperty>使用 name 属性给出 JavaBean 的名字,而<jsp:useBean>使用 id 属性给出 JavaBean 的名字,实际上它们是一致的,都是指绑定在特定范围对象的一个属性( Attribute)的名字。

实战一下:

创建JavaBean对象

package com.wuyudong;

public class Book {
private String bookName;
private String author;
private String category;
private double price;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}

在index.jsp页面中对其操作

<body>
<!-- 实例化Book对象 -->
<jsp:useBean id="book" class="com.lyq.Book"></jsp:useBean>
<!-- 对Book对象赋值 -->
<jsp:setProperty name="book" property="bookName" value="《JAVA程序设计标准教程》"/>
<jsp:setProperty name="book" property="author" value="科技"/>
<jsp:setProperty name="book" property="category" value="Java图书"/>
<jsp:setProperty name="book" property="price" value="59.00"/>
<table align="center" border="1" cellpadding="1" width="350" height="100" bordercolor="green">
<tr>
<td align="right">图书名称:</td>
<td><jsp:getProperty name="book" property="bookName"/> </td>
</tr>
<tr>
<td align="right">作 者:</td>
<td><jsp:getProperty name="book" property="author"/> </td>
</tr>
<tr>
<td align="right">所属类别:</td>
<td><jsp:getProperty name="book" property="category"/> </td>
</tr>
<tr>
<td align="right">价 格:</td>
<td><jsp:getProperty name="book" property="price"/> </td>
</tr>
</table>
</body>

JSP--JavaBean的更多相关文章

  1. MVC开发模式之Servlet+jsp+javaBean

    Servlet+jsp+JavaBean组合开发是一种MVC开发模式,控制器Controller采用Servlet.模型Model采用JavaBean.视图View采用JSP. 1.Web开发的请求- ...

  2. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  3. Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心...写登陆注册之前看见一篇很好的博文,没有收藏,然后找不到了. 前几天在知乎上看见一个问题,什么时候感觉最无力. 前两天一直想回答:尝试过google到的所有solve case,结果bug依 ...

  4. JSP中使用的模式——JSP+JavaBean

    模式二:JSP+Servlet+JavaBean 链接地址:http://wxmimperio.coding.io/?p=189 JSP中两种模式的总结 链接地址:http://wxmimperio. ...

  5. 咸鱼入门到放弃11--Servlet+JSP+JavaBean开发模式

    本篇搬运了大佬blog:https://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servle ...

  6. JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  7. Struts与jsp+javabean+servlet区别

    采用Struts框架技术和直接使用jsp+javabean技术开发各有什么优势?各自的缺点又是什么? 在Javaweb开发领域存在2种开发模式, 模式一,jsp+javabean 模式二,jsp+ja ...

  8. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    http://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...

  9. jsp javabean开发模式

    JSP&&JavaBean开发模式 在jsp+javabean架构中,jsp负责控制逻辑,表现逻辑,业务对象的调用 jsp+javaBean模式适合开发业务逻辑不复杂的web应用,这种 ...

  10. JSP+JavaBean+Servlet技术(MVC模型)

    一,Servlet开发用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种 ...

随机推荐

  1. ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误

    今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...

  2. Windows Service插件服务开源

    WindowsService 插件服务是一个为简化NTService开发和打包程序,提供插件开发的方式进行动态加入或删除业务. 插件式服务程序的由来,在系统维护的过程中,根据企业的要求经常要进行一些周 ...

  3. CentOS下Tmux安装和使用

    Tmux介绍: Tmux是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活.动态的进行各种布局和操作.它可以做到一条命令就启动起来( ...

  4. 左倾堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了左倾堆,本章给出左倾堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的Java实现(完整 ...

  5. 解决debian中脚本无法使用source的问题

    #!/bin/sh source scripts/common.sh 现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which s ...

  6. Node.app – 用于 iOS App 开发的 Node.js 解释器

    Node.app 是用于 iOS 开发的 Node.js 解释器,它允许最大的代码重用和快速创新,占用资源很少,为您的移动应用程序提供 Node.js 兼容的 JavaScript API.你的客户甚 ...

  7. [git]本地查看,重命名,拉取,删除远程分支

    1.git branch -a 查看所有的分支,包含远程仓库.-av:同时显示最近的一个commit信息. 2.git checkout -b newBranch origin/master 拷贝一份 ...

  8. [mysql]brew 安装 配置 操作 mysql(中文问题)

    mac 下卸载mysqldmg mac下mysql的DMG格式安装内有安装文件,却没有卸载文件--很郁闷的事. 网上搜了一下,发现给的方法原来得手动去删. 很多文章记述要删的文件不完整,后来在stac ...

  9. node生成自定义命令(yargs/commander)

    第一部分可以生成一个自定义命令,例如常见的”express”,yargs和commander则可以在生成的自定义命令上做扩展,yargs将命令扩展成类似express --l xx的形式;而comma ...

  10. Redis设计与实现-主从、哨兵与集群

    主从 从机使用slaveof 命令来复制主机的缓存数据,包括同步sync与命令传播两个操作: 从机同步sync命令给主机,主机收到后执行需要耗费大量cpu.内存和磁盘IO资源的bgsave命令来生成r ...