6.3 常见的几种Bean使用方法
在实际使用中,有几种常用的Bean,比如表单Bean、页面Bean及共享Bean。在共享Bean中主要包括请求Bean、会话Bean及应用程序Bean。
6.3.1 表单Bean
表单Bean是用来处理表单的。编写Bean,如程序FormBean.java所示。
案例名称:表单Bean使用方法
程序名称:FormBean.java
package std; //封包
import java.io.*; //引入包
public class FormBean implements Serializable //最好实现Serializable接口
{
//属性声明,都用private修饰
private int id=0;
private String nickname="";
//公开的属性
public void setId(int id)
{
this.id=id;
}
public int getId()
{
return id;
}
public void setNickname(String name)
{
this.nickname=name;
}
public String getNickname()
{
return nickname;
}
}
这个Bean里面有两个属性,都是公开属性。编写JSP文件,使用这个Bean,如程序from.jsp所示。
案例名称:表单Bean使用方法
程序名称:form.jsp
<form action="" method="post">
id:<input type=text name="id"><br>
nickname:<input type=text name="nickname"><br>
<input type=submit value="submit"/>
</form>
<jsp:useBean id="st" class="std.FormBean"/>
<jsp:setProperty name="st" property="*"/>
<hr/>
<jsp:getProperty name="st" property="id"/><br>
<jsp:getProperty name="st" property="nickname"/>
注意这里的Bean放在包std中,在Eclipse中创建好工程以后的目录结构如图6-10所示。
图6-10 使用表单Bean的目录结构
这种方法利用表单中对应name的表单域的值去填充Bean里面相应的属性。例子中,id被填充到Bean的id属性中,nickname被填充到Bean的nickname属性。打开时,读取了id的值0,nickname 默认为空。执行的结果如图6-11所示。
图6-11 使用setProperty动作
也可以使用jsp:setProperty动作对每一个属性设置值,如程序form1.jsp所示。
案例名称:表单Bean使用方法
程序名称:form1.jsp
<form action="" method="post">
myid:<input type=text name="myid"><br>
mynickname:<input type=text name="mynickname"><br>
<input type=submit value="submit"/>
</form>
<jsp:useBean id="st" class="std.FormBean"/>
<jsp:setProperty name="st" property="id" param="myid"/>
<jsp:setProperty name="st" property="nickname" param="mynickname"/>
<hr/>
<jsp:getProperty name="st" property="id"/><br>
<jsp:getProperty name="st" property="nickname"/>
在这里,html表单的表单域名称与Bean中的属性并不一致,使用param来把html表单的表单域名称与Bean中的属性对应起来。运行结果如图6-12所示。
图6-12 调用表单Bean
表单Bean用来处理表单的填充。如果没有请求参数和属性对应(比如,修改FormBean,增加一个sex属性),则不采取任何动作,系统不会提供null作为属性的值。这意味着,表单Bean不需要一次填充完毕,可以只填充一部分属性。
自动类型转换并不能像手动类型转换那样能够防止不合法的值。尽管自动类型转换很方便(从请求中获得的值为String类型,自动类型转换保证了上面的String类型的id填充了int类型的id属性),很多开发人员还是避免使用自动转换,选择使用 String类型去定义Bean的每个属性。
Bean属性的名称和请求参数大小写敏感,书写错误就无法调用任何一个动作(id和ID是不同的)。
6.3.2 页面Bean
页面Bean为JSP保留数据,不实现应用程序流中的任何功能。在JSP和Servlet之间,有4种不同的范围值,如表6-1所示。
表6-1 Bean的4种不同范围
范围级别
|
所影响的API
|
注 释
|
页面page
|
服务方法中的本地变量
|
只用于正在处理的Servlet,无法通过这些方法在JSP和Servlet之间共享数据
|
请求request
|
request.setAttribute(key,obj)
request.getAttribute(key)
|
用于正在处理的Servlet和接受转发控制的Servlet或JSP
|
会话session
|
session.setAttribute(key,obj)
session.getAttribute(key)
|
用于相同范围内的任何Servlet或JSP
|
应用程序application
|
getServletContext()
setAttribute(key,obj)
getAttribute(key)
|
对象包含应用程序范围内的对象
|
6.3.3 共享Bean
可以这样去理解共享Bean的概念:在一个JSP页面(或Servelet)中修改了Bean的属性,然后在另一个页面中读取这个Bean的属性,可以看到这种变化。这是实现数据共享的一种重要方式,也是MVC架构的基础。
Bean一共有4种范围(Scope):page、request、session和application。page对应于本页面的使用,是不可以共享的Bean。后3种都可以共享,范围递增。第1种在request范围内共享,第2种在session范围内共享,第3种在整个应用程序中共享。在共享Bean的应用中,使用forward和include 方法来完成请求的转发和包含。除了这两种方法之外,其他的方法是无效的或不建议使用的。这里所描述的案例是JSP之间共享Bean,也可以是JSP与Servlet之间或Servlet与Servlet之间共享Bean。比如默认的页面Bean不能共享数据,如程序scopePagea.jsp所示。
案例名称:页面Bean
程序名称:scopePagea.jsp
<jsp:useBean id="st" class="std.FormBean"/>
<jsp:setProperty name="st" property="id" value="999"/>
<jsp:forward page="scopePageb.jsp"/>
执行scopePagea.jsp的时候,自动转移到scopePageb.jsp页面。
案例名称:页面Bean
程序名称:scopePageb.jsp
<jsp:useBean id="st" class="std.FormBean"/>
<jsp:getProperty name="st" property="id"/><br>
scopePageb.jsp主要用来读取页面Bean的属性,运行结果如图6-13所示。
图6-13 Page范围
可以看到,在scopePageb.jsp中读取到的id属性值为0,这说明page范围的Bean无法共享。
1.请求Bean
请求Bean即Request Bean,是在request范围内共享数据的Bean。修改前面的例子,如程序scopeRequesta.jsp所示。
案例名称:请求Bean
程序名称:scopeRequesta.jsp
<jsp:useBean id="st" class="std.FormBean" scope="request"/>
<jsp:setProperty name="st" property="id" value="999"/>
<jsp:forward page="scopeRequestb.jsp"/>
和页面Bean区别是使用Bean的时候带上了“scope="request"”,页面还是自动转到了scopeRequestb.jsp页面上。
案例名称:请求Bean
程序名称:scopeRequestb.jsp
<jsp:useBean id="st" class="std.FormBean" scope="request"/>
<jsp:getProperty name="st" property="id"/>
程序执行结果如图6-14所示。
图6-14 请求范围
发出请求的JSP或Servlet修改的属性值在接受请求的JSP或Servlet中可以读出来,但是,如果两个程序之间没有发生请求关系的话,数据就无法共享。如果编写一个独立的JSP程序,修改了Bean的属性值,scope为request。再写一个JSP程序,scope为request,它并不接受第一个JSP的请求,无法读取修改了的Bean的属性值。
2.会话Bean
会话Bean属于应用程序的用户会话,与表示方式无关,但是却可以获得指向资源和其他数据的引用,这些数据有助于用户会话来维护和保存状态信息。例如,一个会话Bean可以通过会话保存用户的姓名和地址。
会话Bean即Session Bean,在session 范围内共享数据。它的作用范围比请求Bean大很多。即使两个文件没有发生请求关系,但是也可以共享数据,如程序scopeSessiona.jsp所示。
案例名称:会话Bean
程序名称:scopeSessiona.jsp
<jsp:useBean id="st" class="std.FormBean" scope="session"/>
<jsp:setProperty name="st" property="id" value="999"/>
<a href="scopeSessionb.jsp">to b</a>
会话Bean使用“scope="session"”进行标识,单击超级链接后,自动转到另外一个页面,如程序scopeSessionb.jsp所示。
案例名称:会话Bean
程序名称:scopeSessionb.jsp
<jsp:useBean id="st" class="std.FormBean" scope="session"/>
<jsp:getProperty name="st" property="id"/>
运行结果如图6-15所示。
图6-15 会话范围
到另外一个页面后,同样可以看到Bean属性的值,如图6-16所示。
图6-16 会话范围
这里必须单击链接进入,否则两个页面不在相同的会话中,无法共享数据。
3.应用程序Bean
应用程序Bean的作用范围比会话Bean要广,可以用来帮助应用程序的所有用户维持状态。与会话Bean相比,使用它们的机会少一些,但是,如果需要减少内存的消耗或提升显示的效果,使用该应用程序Bean是非常有用的,特别是当许多用户需要存取资料而这些资料的获取成本相对较高时。
应用程序Bean即Application Bean,在application 范围内共享数据。它的范围是最大的。两个文件没有发生请求关系,也不是连在一起的页面,但它们之间可以共享数据。因为application范围是整个应用程序中的所有文件,如程序scopeApplicationa.jsp所示。
案例名称:应用程序Bean
程序名称:scopeApplicationa.jsp
<jsp:useBean id="st" class="std.FormBean" scope="application"/>
<jsp:setProperty name="st" property="id" value="999"/>
这个页面中设置Bean属性的值,试图在另外一个页面中读取出来,其程序如下。
案例名称:应用程序Bean
程序名称:scopeApplicationb.jsp
<jsp:useBean id="st" class="std.FormBean" scope="application"/>
<jsp:getProperty name="st" property="id"/>
先执行scopeApplicationa.jsp,然后再执行scopeApplicationb.jsp,发现数据还是传过来了,如图6-17所示。
图6-17 应用程序范围Bean
<!-- page -->
分享到:
相关推荐
在这个"Servlet & JSP学习笔记NetBeans源代码"压缩包中,你将找到一系列与Servlet和JSP相关的示例代码,这些代码是基于NetBeans IDE编写的,并且是在Tomcat服务器上运行的。 Tomcat是一个开源的轻量级Web服务器和...
由于这部分内容是电子书中的学习笔记,电子书的内容并未直接给出,因此只能根据电子书的标题“JSP&Servlet学习笔记”和描述来推测可能涉及的知识点,而没有具体的电子书内容可以分析。如需进一步学习,建议查阅相关...
提供的"我的JSP学习笔记+源码"包含实际项目中的例子,可以帮助你理解JSP 2.0在实际开发中的应用。通过阅读和运行这些源码,你可以更直观地了解JSP 2.0的各个特性如何在实际场景中工作。 总之,这个资料包为JSP 2.0...
这份"Servlet&JSP学习笔记源代码"是由林信良编著,提供了丰富的实例代码,旨在帮助学习者深入理解这两种技术。 Servlet是Java编程语言的一个接口,允许Java代码与HTTP服务器进行交互。它扩展了服务器的功能,使得...
jsp学习笔记初级.pdf 本资源摘要信息介绍了JSP(Java Server Pages)学习笔记的初级阶段,涵盖了MVC模式、Java基础知识、JSP、Servlet、Javabean、JDBC、Spring、Struts2、Hibernate等关键技术。 MVC模式 MVC模式...
根据提供的文件信息,这里将基于“jsp考试笔记”的标题、描述及部分难以辨识的内容来构建一份关于JSP(JavaServer Pages)的知识点总结。 ### JSP基础概念 #### 定义 JSP(JavaServer Pages)是一种由Sun ...
JSP主要有以下几种元素: - **指令(Directives)**:如`<%@page>`、`<%@include>`和`<@taglib>`,它们用来设置页面属性、引入其他文件或注册自定义标签库。 - **脚本元素(Scriptlets)**:`<%...%>`用于编写Java...
在"JSP学习笔记"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **JSP基本结构**:JSP文件通常包含HTML或XML标记,以及嵌入的Java代码或者使用JSP指令和动作。例如,`<jsp:include>`用于动态包含页面,`<jsp...
JavaBean是Java编程中的一种重要概念,主要用于封装数据和业务逻辑,便于组件化开发。JavaBean规范定义了一类特殊的Java类,它具有良好的封装性、可重用性和可序列化特性,广泛应用于Web开发、MVC框架以及企业级应用...
### JAVA学习笔记1:深入解析J2EE框架与关键技术 #### J2EE模式与Value Object概念 在JAVA学习之旅中,深入理解J2EE(Java 2 Platform, Enterprise Edition)框架是至关重要的一步。J2EE是专为开发企业级应用而...
8. JavaBean的几种属性 JavaBean是一种符合JavaBeans规范的类,通常有公有的构造函数、getter/setter方法以及封装的属性。例如,一个简单的User JavaBean可能如下: ```java public class User { private String...
为了更好地理解和应用 Struts,我们还需要了解几种常见的数据对象及其用途: - **POJO (Plain Old Java Object)**:简单的 Java 对象,具有 getter 和 setter 方法。它是其他数据对象的基础。 - **PO (Persistent ...
这篇学习笔记将主要围绕JSP展开,探讨其基本概念、语法以及如何在实际开发中运用。 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现服务器端的动态内容生成。JSP...
5. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)**:EL提供了一种简洁的方式来访问JavaBean或其他作用域中的数据,而JSTL则是一组预定义的标签库,用于处理常见任务,如循环、条件...
**J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端的组件模型,用于处理Web应用...
本资源包"7个JSP小项目源代码和笔记资料汇总"显然是一个学习JSP的宝贵资料集合,包含多个实际项目的源代码和相关的学习笔记。 首先,我们来深入了解一下JSP。JSP是由Sun Microsystems(现已被Oracle收购)开发的一...