当前位置: 首页 > 编程日记 > 正文

JSP--JavaBean

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>

转载于:https://www.cnblogs.com/wuyudong/p/jsp--javabean.html

相关文章:

python 速度矢量_最近邻搜索4D空间python快速-矢量化

For each observation in X (there are 20) I want to get the k(3) nearest neighbors.How to make this fast to support up to 3 to 4 million rows?Is it possible to speed up the loop iterating over the elements? Maybe via numpy, numba or some kind of vectoriza…

使用ajax不刷新页面获取、操作数据

在使用jsp或html时&#xff0c;利用ajax达到不刷新页面就可以获取、操作数据。 首先上代码 &#xff08;htmljs&#xff09; 在此处需要引入jquery插件 <!-- 这是页面部分 html--> <body><div style"width:100%;height:30px; float:left"><in…

C/C++面试题分享

1、指针和引用的区别&#xff1f; 答&#xff1a;引用是在C中引入的。它们之间的区别有&#xff1a; &#xff08;1&#xff09; 非空区别&#xff1a;指针可以为空&#xff0c;而引用不能为空 &#xff08;2&#xff09; 可修改区别&#xff1a;如果指针不是常指针…

js增加属性_前端js基础2

JavaScriptECMAScript(ES):规定了js的一些基础的核心知识(变量、数据类型、语法规范、操作语句等) 3/56/7 说出ES5和ES6的区别&#xff1f; DOM&#xff1a;document object model 文档对象模型&#xff0c;里面提供了一些属性和方法&#xff0c;可以让我们操作页面中的元素 BO…

附加的操作系统服务

select &#xff1a;等待I/O实现threading&#xff1a;高层次的线程接口thread&#xff1a;多线程调度dummy_threading:提供threading模块的副本接口dummy——thread&#xff1a;提供thread模块的副本接口mutiprocessing&#xff1a;在全局调度锁下使用子进程mmap&#xff1a;内…

使用myeclipse的第一步

使用myeclipse的第一步 将以下代码copy放在一个包中运行&#xff0c;然后在控制台输入任意字符&#xff0c;回车&#xff0c;然后控制台打印一串密匙&#xff0c;这里你输入的就是账号&#xff0c;控制台返回的就是注册码&#xff0c;点击MyEclipse->Subscription *** 输入…

一道题弄明白二维数组的指针

#include<stdio.h> int main(int args,char ** argv) {int map[3][3]{{1,2,3},{4,5,6},{7,8,9}};int **pMap(int **)map;printf("%d\n",map);//数组的首地址printf("%d\n",*(map1));//数组第二行首地址printf("%d\n",*map1);//数组首行的第…

Linux网络编程--进程间通信(一)

进程间通信简介&#xff08;摘自《Linux网络编程》p85&#xff09; AT&T 在 UNIX System V 中引入了几种新的进程通讯方式&#xff0c;即消息队列&#xff08; MessageQueues&#xff09;&#xff0c;信号量&#xff08; semaphores&#xff09;和共享内存&#xff08; sha…

mysql 行号_PQ获取TABLE的单一值作为条件查询MySQL返回数据

下午&#xff0c;我正爽歪歪地喝着咖啡&#xff0c;看着Power BI每秒钟刷新一次&#xff0c;静静等待某个分公司完成本月绩效任务&#xff0c;自动调用Python在钉钉群中发送喜报&#xff1a;紧接着再次调用Python将Power BI云端报告中的各分公司最新完成率数据和柱状图截图发在…

UUID的使用及其原理

今天敲项目要用UUID&#xff0c;想起之前老师告诉UUID的使用&#xff0c;但没说具体的生成逻辑&#xff0c;于是我进行了百度 首先&#xff0c;UUID的使用&#xff1a; //生成随机的UUID String uuid UUID.randomUUID().toString().replaceAll("-", "")…

链表类型题目需要用到的头文件list.h

下面是后面链表相关题目中需要用到的链表结点的定义和相关操作函数&#xff0c;参见下面的list.h文件&#xff1a; 注意链表结点的定义采用cpp的定义方式&#xff0c;它会被cpp的文件调用。比如后面删除链表重复结点的文件del_repeated_list.cpp中的编译方式&#xff1a; g -…

led计数电路实验报告_「正点原子FPGA连载」第八章 按键控制LED灯实验

1)实验平台&#xff1a;正点原子开拓者FPGA开发板2)本实例源码下载&#xff1a;请移步正点原子官网第八章 按键控制LED灯实验按键是常用的一种控制器件。生活中我们可以见到各种形式的按键&#xff0c;由于其结构简单&#xff0c;成本低廉等特点&#xff0c;在家电、数码产品、…

svn官方备份hot-backup.py强烈推荐

Author:牛班图 Date:2016/05/18 Address:suzhou --- centos 6.7默认安装的python是2.6.6&#xff0c;大家可以先查看一下自己操作系统的python版本&#xff0c;python -v&#xff1b; hot-backup.py是基于python2写的&#xff0c;python3的语法有些地方不一样&#xff0c;所以在…

用js方法做提交表单的校验

基础知识&#xff1a; 原始提交如下&#xff1a; <form action"<%basePath %>puser/register" method"post"><input placeholder"Name" name"realname"> <input type"email" placeholder"Email…

tree类型题目需要用到的头文件tree.h

下面是树类型题目需要用到的头文件tree.h,请包含在cpp文件中编译,而不是放在c文件中编译,比如查找树中两个节点的最低公共父结点的题common_parent_in_tree.cpp,编译它的方法是: g -g common_parent_in_tree.cpp -o common_parent_in_tree 下面是tree.h的内容: #include <…

用easyui动态创建一个对话框

function randomString(len) { len len || 32; var $chars ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/ var maxPos $chars.length; var pwd ; for (i 0; i < len; i) { pwd $…

网站收录工具(php导航自动收录源码)_网站如何快速收录,网站不收录怎么办?...

经常有朋友说怎么快速收录&#xff0c;网站不收录怎么收录&#xff1f;&#xff1f;其实&#xff0c;网站不包括一般的新网站数量&#xff0c;没有SEO基础&#xff0c;SEO了解合作伙伴经常会遇到问题&#xff0c;甚至很多人会告诉你&#xff0c;不包括网站引流&#xff0c;导致…

JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

最近在写ajax的时候&#xff0c;调用js方法&#xff0c;遇到了Uncaught SyntaxError:Unexpected identifier异常报错&#xff0c;开始搞不清原因&#xff0c;很苦恼。 以为是js方法参数个数和长度的问题&#xff0c;后来发现原来是这样~ 以下是 浏览器窗口的报错 以及 按钮处…

python 打印皮卡丘_Python到底是什么?学姐靠它拿了5个offer

你ZAO吗&#xff1f;最近陌陌发布了一款很有意思的产品——ZAO&#xff0c;这款AI换脸的产品刷爆朋友圈&#xff01;这款产品火爆到什么程度呢&#xff1f;正在使用ZAO的用户会发现&#xff0c;想要生成一段新的AI换脸视频&#xff0c;已经不是等待几秒、排队第几位的问题&…

有一个1亿结点的树,已知两个结点, 求它们的最低公共祖先!

对该问题,分为如下几种情形讨论: 情形一: 假如该树为二叉树,并且是二叉搜索树, 依据二叉搜索树是排过序的, 我们只需要从树的根结点开始,逐级往下,和两个输入的结点进行比较. 如果当前结点的值比两个结点的值都大,那么最低的公共祖先一定在当前结点的左子树中,下一步遍历当前…

数据库SQL优化大总结之百万级数据库优化方案

1.对查询进行优化&#xff0c;要尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断&#xff0c;否则将导致引擎放弃使用索引而进行全表扫描&#xff0c;如&#xff1a; select id from t w…

js定时执行函数

方法一: //直接现定义函数 var time window.setInterval(function(){ $(’.lingdao_right’).click(); },5000); 方法二: //执行已经有的函数 var time window.setInterval(‘abc()’,5000); 清除js自动执行 clearInterval(time); //time就是定义时的名称&#xff0c;如上

BST(binary search tree)类型题目需要用到的头文件binary_tree.h

下面是二叉搜索树需要用到的头文件binary_tree.h #include <stdio.h>struct BinaryTreeNode{int value;BinaryTreeNode* pLeft;BinaryTreeNode* pRight; };BinaryTreeNode* CreateBinaryTreeNode(int value){BinaryTreeNode* pNode new BinaryTreeNode();pNode->valu…

终止js程序执行的方法

js终止程序执行的方法共有三种 (一)在function里面&#xff08;普通js方法&#xff09; &#xff08;1&#xff09;return; &#xff08;2&#xff09;return false; (二)非function方法里面&#xff08;如ajax方法&#xff09; alert(“发生异常”); throw SyntaxError(); ale…

将BST转换为有序的双向链表!

在二叉树中,每个结点都有两个指向子结点的指针. 在双向链表中, 每个结点也有两个指针,它们分别指向前一个结点和后一个结点.由于这两种结构的相似性, 同时二叉搜索树也是一种排过序的数据结构, 因此在理论上有可能实现二叉搜索树和排序的双向链表之间的转换. 下面的文件BST_to_…

计算机病毒实践汇总五:搭建虚拟网络环境

在尝试学习分析的过程中&#xff0c;判断结论不一定准确&#xff0c;只是一些我自己的思考和探索。敬请批评指正&#xff01; 涉及内容&#xff1a; INetSim安装及使用 ApateDNS安装及使用 1. 搭建病毒分析网络环境原因 使用虚拟机作为沙箱能把病毒与外界完全隔离开&#xff0c…

form表单提交前进行ajax或js验证,校验不通过不提交

在使用form表单进行提交数据前&#xff0c;需要进行数据的校验->表单的校验&#xff08;如&#xff1a;两次密码输入是否相同&#xff09;后台数据的校验&#xff08;如&#xff1a;账号是否存在&#xff09;&#xff0c;这个时候&#xff0c;如果哪步校验不通过&#xff0c…

中体骏彩C++面试题

下面是我凭记忆想到的几个题目,有需要的同学就拿去吧,我也算做了点善事. 中体骏彩C笔试题 2013-11-18 1.指针的含义是:B A.名字 B.地址 C.名称 D.符号 2.给出下面的程序输出: #include <iostream> #include <cstdlib> #include <cstring> #include <l…

Fibonacci数列的java实现

关于Fibonacci应该都比较熟悉&#xff0c;0,1,1,2,3.。。。。 基本公式为f(n) f(n-1) f(n-2); f(0) 0; f(1) 1; 方法1&#xff1a;可以运用迭代的方法实现&#xff1a; public static int f1(int n){if(n<1)return n;return f1(n-1) f1(n-2); }实现方法简单。 方法2&am…

stream流对象的理解及使用

我的理解&#xff1a;用stream流式处理数据&#xff0c;将数据用一个一个方法去 . &#xff08;点&#xff0c;即调用&#xff09; 得到新的数据结果&#xff0c;可以一步达成。 有多种方式生成 Stream Source&#xff1a; 从 Collection 和数组 Collection.stream()Collecti…