(九)Javabean与Jsp(来自那些年的笔记)
目录
JavaBean
JavaBean 是一种遵循特定写法的Java类,它通常具有以下特点:
- 这个
java类必须有一个 无参 的 构造函数 - 属性必须 私有化
- 私有化的属性,必须通过
public类型的方法暴露给其他程序, 并且方法的命名也必须遵守一定的命名规范
JavaBean 在 J2EE开发中,通常用于封装数据 ;
对于遵循以上写法的JavaBean组件,其他程序可以通过反射技术实例化JavaBean对象,并且通过 反射 那些遵守命名规范的方法,从而获得JavaBean的属性,进而调用其属性对应的方法保存数据;
在JSP中使用JavaBean
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
<jsp:useBean id=””>标签:用于在
JSP页面查找或实例化一个JavaBean组件;<jsp:setProperty name="" property="" >标签:用于在
jsp页面中设置一个Javabean组件的属性;<jsp:getProperty name="" property="">标签:用于在
jsp页面中获取一个Javabean组件的属性;
下面会详细讲解三个标签的用法;
<jsp:useBean id=""> 标签用法
用于在 指定的域范围内 查找 指定名称 的javaBean对象:
如果存在,则直接返回该JavaBean对象的引用;如果不存在,则实例化一个新的JavaBean对象并将它以指定的名字存储到指定的域范围中;
常用语法:
<jsp:useBean id="Javabean实例名" class="实例完整类名" scope="域" ></jsp:useBean>
id 属性用于指定JavaBean实例化对象的引用名称,该名称也是 Javabean 保存在域中的名称;
class 属性用于指定JavaBean的完整类名(即必须带完整的包名)
scope 属性用于指定 JavaBean 实例化对象所存储的域范围,默认是page,取值只能是四个域中的一个;
原理:这个jsp标签 的底层原理是怎么执行的呢?
首先这是一个jsp页面中的标签,所以它也会被翻译为servlet,在写上这个标签以后,翻译过去的servlet中,就会多一个对象 , 这个对象是以完整包名定义的,名字就是id的值;
然后pageContext对象,就会在在scope指定的域中寻找这个对象,赋值给id的值,如果没找到这个对象,就会创建一个对象,存进域中,再返回这个值;
带标签体的 JavaBean 标签
标签体只在创建JavaBean实例的时候,得到执行;也就是说,如果,JavaBean的实体,之前已经存在了,则不会执行这个标签体了;
setProperty 标签
其中name的值是 Javabean实例的名字、property 的值是 Javabean实例的属性名字
有3种赋值方法:
直接赋值 使用
value<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "要赋值的值"/>获取
request请求参数赋值,使用param,这里支持8中 基本数据类型 的转换;如果是8种数据类型之外的数据,则需要使用脚本表达式来赋值,比如
<%= new Date()%><jsp:setProperty name = "JavaBean实例名" property = "Javabean实例的属性名" param = "request对象中的参数名"使用
*号<jsp:setProperty name="Javabean实例的名字" property="*" />会将
request请求中的参数,按照Javabean属性名字对应的自动的赋值给JavaBean;其中原理是,利用反射技术,得到JavaBean的字段,进而得到get、set方法,进行赋值;
request请求参数中的属性名字不能写错,写错了,就跟Javabean属性对不上了;
备注(很重要):其中在赋值的时候,使用 request 请求参数赋值的时候(也就是上述的2、3方法),如果 request 并没有参数,则不会产生赋值行为 ;
getProperty 标签
语法:
<jsp:getProperty name="Javabean实例名" property="Javabean实例属性名字">
会将取出的值,转换为字符串类型;如果属性被置为null,则取出的是''null''这个字符串;这里需要注意;一般我们不返回null;
JSP开发模式
分两种;
其一:
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+javaBean模式。
其二:
JSP+Javabean模式适合开发业务逻辑不太复杂的微博应用程序,这种模式下,Javabean用于封装业务数据,JSP即负责处理用户请求,又显示数据;
Servlet+JSP+JavaBean (MVC)模式适合开发复杂的web应用,在这种模式下servlet负责处理用户请求,JSP负责数据显示,JavaBean负责封装数据。Web开发推荐这种模式,层次分明。(MVC模式)
案列:使用 模式一 编写一个在线计算器;
主要是3个标签的用法;
(九)Javabean与Jsp(来自那些年的笔记)的更多相关文章
- javaBean和jsp应用
原网页:http://www.douban.com/note/102320977/ JavaBean是一种可复用,跨平台的组件.共有两种JavaBean:一种无用户界面,这种一般用于处理数据运算,操作 ...
- Javabean+servlet+JSP(html)实例应用
大家都知道Javabean+servlet+JSP是最简单的MVC模式.的确,在一个小型的项目中,这个模式完全够用. 它优雅并且简洁.加上jQueryui的完美展示效果,让这个模式看起来非常合适.当然 ...
- JavaBean与Jsp
这一节我们总结一下JavaBean和Jsp的关系. 1. JavaBean javaBean是一个遵循特定写法的Java类,它通常具有如下特点: 1)这个java类必须具有一个无参构造函 ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
- JavaBean在jsp中的使用
JavaBean在Jsp中的引用: 1.用<jsp:useBean>标记: <jsp:useBean id="name" class="classnam ...
- 处理javabean的JSP标签
(1) 关于javabean要求: 1,具有无参的构造函数. 2,针对每一个成员变量,因改提供相应get/set. 3,implments Serializable(实现才能对象序列化). (2) 使 ...
- java web学习总结(二十九) -------------------JavaBean的两种开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...
- javabean和jsp动作元素
model1就是利用了jsp和javabean 的组合来处理问题.jsp页面如果有太多的逻辑代码的话,维护起来和扩展起来是相当的麻烦的.所以jsp的逻辑代码部分都打包到一种java类当中进行编写.这种 ...
- JavaBean用JSP调用和使用JSP动作标签的区别
javabean的类可以用jsp动作标签实例化并使用. <!-- 下面这句是对Javabean类person的引用,引用的实例是p2 --> <jsp:useBean id=&quo ...
随机推荐
- 10-5使用OpenType字体
http://www.missyuan.com/viewthread.php?tid=350835&extra=&page=1 现在当我们通过Photoshop.Word或其他应用程序 ...
- FOI 冬令营 Day6
目录 T1.堆(heap) 传送门 Code T2.密文(secret) 传送门 Code T3.树(tree) 传送门 Code 别问Day5到底去哪里了,咕咕咕 T1.堆(heap) 传送门 Co ...
- shell wait 和sleep 对比
wait 在 shell 中使用 wait 是在等待上一批或上一个脚本执行完(即上一个的进程终止),再执行wait之后的命令. sleep sleep 1 睡眠1秒 sleep 1s 睡眠1秒 sle ...
- Python3中转换字符串编码
在使用subprocess调用Windows命令时,遇到了字符串不显示中文的问题,源码如下:#-*-coding:utf-8-*-__author__ = '$USER' #-*-coding:utf ...
- python中的with的用法,上下文管理器
with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和 资源分配释放相关代码统统去掉,简化try….excep ...
- lintcode刷题笔记(一)
最近开始刷lintcode,记录下自己的答案,数字即为lintcode题目号,语言为python3,坚持日拱一卒吧... (一). 回文字符窜问题(Palindrome problem) 627. L ...
- ISO/IEC 9899:2011 条款5——5.2.3 信号与中断
5.2.3 信号与中断 1.函数应该被设计为它们可以被一个信号在任一时刻打断,或是被一个信号处理所调用,或是两者都发生,对于初期不发生改变,但仍然处于活动状态,调用的控制流(在中断之后),函数返回值, ...
- MySQL中表的复制以及大型数据表的备份教程
MySQL中表的复制以及大型数据表的备份教程 这篇文章主要介绍了MySQL中表的复制以及大型数据表的备份教程,其中大表备份是采用添加触发器增量备份的方法,需要的朋友可以参考下 表复制 mysq ...
- 利用redis实现分布式事务锁,解决高并发环境下库存扣减
利用redis实现分布式事务锁,解决高并发环境下库存扣减 问题描述: 某电商平台,首发一款新品手机,每人限购2台,预计会有10W的并发,在该情况下,如果扣减库存,保证不会超卖 解决方案一 利用数据 ...
- Facebook libra白皮书
https://libra.org/en-US/white-paper/ An Introduction to Libra Libra的使命是建立一个简单的全球货币和金融基础设施,为数十亿人服务.该文 ...