JSP和JavaBean
本章将详细介绍什么是JavaBean,以及如何定义JavaBean。还将介绍如何在JSP中调用JavaBean,如何设置并获得JavaBean属性以及设置JavaBean的范围,最后还将介绍如何移除JavaBean。
通过本章的学习,读者应该能够完成如下几个目标。
熟练掌握定义JavaBean
熟练掌握在JSP中调用JavaBean
熟练掌握设置并获得JavaBean属性
熟练掌握设置JavaBean的范围
熟练掌握移除JavaBean
1 JavaBean简介
JavaBean是为Java语言设计的软件组件模型,具有可重复使用和跨平台的特点。可以通过JavaBean来封装业务逻辑,进行数据库操作等。从而很好的实现业务逻辑和前后台程序的分离。
JavaBean其实就是一个简单的Java类,这也就意味着,Java类的一切特征,JavaBean也都具有。JavaBean同样可以使用封装、继承、多态等特性。
JavaBean可以分为两类,一类是有用户接口(UI)的JavaBean,一类是没有用户接口的JavaBean。一般在JSP中使用的都是没有用户接口的JavaBean,因此本章所介绍的JavaBean都是指没有用户接口的JavaBean。这类JavaBean只是简单的进行业务封装,如数据运算和处理、数据库操作等。
一个标准的JavaBean应该具有如下几个特点。
1、JavaBean必须是一个公开的类,也就是说JavaBean的类访问权限必须是public的。
2、JavaBean必须具有一个无参数的构造方法。如果在JavaBean中定义了自定义的有参构造方法,就必须添加一个无参数构造方法,否则将无法设置属性;如果没有定义自定义的有参构造方法,则可以利用编译器自动添加的无参构造方法。
3、JavaBean一般将属性设置成私有的,通过使用getXXX()方法和setXXX()方法来进行属性的取得和设置。
1.1 定义JavaBean
02 //一个简单的JavaBean示例
03 public class UserBean {
04 // 用户名属性
05 private String username;
06 // 用户密码属性
07 private String password;
08 //获得用户名
09 public String getUsername() {
10 return username;
11 }
12 //设置用户名
13 public void setUsername(String username) {
14 this.username = username;
15 }
16 //获得用户密码
17 public String getPassword() {
18 return password;
19 }
20 //设置用户密码
21 public void setPassword(String password) {
22 this.password = password;
23 }
24 }
1.2 在JSP中调用JavaBean
在JSP中调用JavaBean,有如下两个优点。
1、提高代码的可复用性。
对于通常使用的业务逻辑代码,如数据运算和处理、数据库操作等,可以封装到JavaBean中。在JSP文件中可以多次的调用JavaBean中的方法来实现快速的程序开发。
2、将HTML代码和Java代码进行分离,程序利于开发维护。
将业务逻辑进行封装,使得业务逻辑代码和显示代码想分离,不会互相干扰。避免了代码有多有复杂的问题,方便了日后的维护。
要想要JSP中调用JavaBean,就需要使用到<jsp:useBean>动作指令,其语法格式如下。
<jsp:useBean id="对象名称" scope="储存范围" class="类名"></jsp:useBean>
其中id属性表示该JavaBean实例化后的对象名称。scope属性用来指定该JavaBean的范围,也就是指JavaBean实例化后的对象储存范围。范围的取值有如下四种,分别是page、request、session和application。class属性用来指定JavaBean的类名,这里所指的类名包括包名和类名。
2 设置JavaBean属性
JSP中提供了一个<jsp:setProperty>动作指令来设置JavaBean属性,其有如下四种语法格式。
<jsp:setProperty name="实例化对象名" property="*"/>
<jsp:setProperty name="实例化对象名" property="属性名称"/>
<jsp:setProperty name="实例化对象名" property="属性名称" param="参数名称"/>
<jsp:setProperty name="实例化对象名" property="属性名称" value="属性值" />
其中name属性使用设置实例化对象名,和<jsp:useBean>中的id属性保持一致。property属性用来指定JavaBean属性名称。param属性用来指定接受参数名称,value属性用来指定属性值。
2.1根据所有参数设置JavaBean属性
第一种<jsp:setProperty>动作指令用来根据所有参数设置JavaBean属性,其语法格式如下。
<jsp:setProperty name="实例化对象名" property="*"/>
其中“*”表示根据表单传递的所有参数来设置JavaBean的属性。比如通过表单传递了两个参数,如username和password,这时就可以自动的对JavaBean中的username属性以及password属性进行赋值。这里必须注意的是,表单的参数必须和JavaBean中的属性名称保持大小写一致,否则无法进行赋值操作。
2.2 根据指定参数设置JavaBean属性
第二种<jsp:setProperty>动作指令用来根据指定参数设置JavaBean属性,其语法格式如下。
<jsp:setProperty name=“实例化对象名” property=“属性名称"/>
第二种<jsp:setProperty>动作指令相比第一种<jsp:setProperty>动作指令具有更好的弹性。第一种<jsp:setProperty>动作指令要求设置所有的参数,而第二种<jsp:setProperty>动作指令可以用来设置指定的参数。比如通过表单传递了两个参数,如username和password,这时就可以指定只为JavaBean的username属性赋值,也可以指定只为JavaBean的password属性赋值。
2.3 根据指定参数设置指定JavaBean属性
第三种<jsp:setProperty>动作指令用来根据指定参数设置指定JavaBean属性,其语法格式如下。
<jsp:setProperty name="实例化对象名" property="属性名称" param="参数名称"/>
第三种<jsp:setProperty>动作指令相比前两种<jsp:setProperty>动作指令更加具有弹性。前面两种<jsp:setProperty>动作指令都需要设置参数和JavaBean属性必须相同,而且必须保证大小写一致。而第三种<jsp:setProperty>动作指令没有此限制,因为可以通过其指定需要设置的JavaBean属性。
2.4 设置指定JavaBean属性为指定值
第四种<jsp:setProperty>动作指令用来设置指定JavaBean属性为指定值,其语法格式如下。
<jsp:setProperty name="实例化对象名" property="属性名称" value="属性值" />
第四种<jsp:setProperty>动作指令相比前三种<jsp:setProperty>动作指令更加具有弹性。前面三种<jsp:setProperty>动作指令都需要接受表单参数,而第四种可以根据需要动态的设置JavaBean属性值。
3 获得JavaBean属性
前面介绍的获得JavaBean属性都是通过调用实例化对象名从而获得的,下面来介绍一种更加简便的方法。
JSP提供了一个<jsp:getProperty>动作指令用来很方便的获得JavaBean属性,其语法格式如下。
<jsp:getProperty name="实例化对象名" property="属性名称"/>
其中name属性用来设置实例化对象名,同样必须和<jsp:useBean>中的id属性保持一致。property属性用来指定需要获得的JavaBean属性名称。
4 设置JavaBean的范围
在前面几章曾经介绍过JSP属性有四种存储范围,分别为page、request、session以及application。同样也可以设置JavaBean的存储范围,其取值和意义同属性保存范围完全相同。下面将分别介绍如何设置各不同范围JavaBean,以及不同存储范围的区别。
5 移除JavaBean
JavaBean会根据其设置的范围来决定其生命周期,当生命周期结束,JavaBean将自动移除。不过设计着也可以手动的移除该JavaBean,从而节省内存。
JavaBean的移除对于不同范围的JavaBean而不同,分别通过调用pageContext、request、session、application的removeAttribute(String name)方法来移除page范围、request范围、session范围以及application范围的JavaBean。其中name属性设置为实例化对象名,必须和<jsp:useBean>中的id属性保持一致。
本章将详细介绍什么是JavaBean,以及如何定义JavaBean。还将介绍如何在JSP中调用JavaBean,如何设置并获得JavaBean属性以及设置JavaBean的范围,最后还将介绍如何移除JavaBean。
通过本章的学习,读者应该能够完成如下几个目标。
熟练掌握定义JavaBean
熟练掌握在JSP中调用JavaBean
熟练掌握设置并获得JavaBean属性
熟练掌握设置JavaBean的范围
熟练掌握移除JavaBean
1 JavaBean简介
JavaBean是为Java语言设计的软件组件模型,具有可重复使用和跨平台的特点。可以通过JavaBean来封装业务逻辑,进行数据库操作等。从而很好的实现业务逻辑和前后台程序的分离。
JavaBean其实就是一个简单的Java类,这也就意味着,Java类的一切特征,JavaBean也都具有。JavaBean同样可以使用封装、继承、多态等特性。
JavaBean可以分为两类,一类是有用户接口(UI)的JavaBean,一类是没有用户接口的JavaBean。一般在JSP中使用的都是没有用户接口的JavaBean,因此本章所介绍的JavaBean都是指没有用户接口的JavaBean。这类JavaBean只是简单的进行业务封装,如数据运算和处理、数据库操作等。
一个标准的JavaBean应该具有如下几个特点。
1、JavaBean必须是一个公开的类,也就是说JavaBean的类访问权限必须是public的。
2、JavaBean必须具有一个无参数的构造方法。如果在JavaBean中定义了自定义的有参构造方法,就必须添加一个无参数构造方法,否则将无法设置属性;如果没有定义自定义的有参构造方法,则可以利用编译器自动添加的无参构造方法。
3、JavaBean一般将属性设置成私有的,通过使用getXXX()方法和setXXX()方法来进行属性的取得和设置。
1.1 定义JavaBean
02 //一个简单的JavaBean示例
03 public class UserBean {
04 // 用户名属性
05 private String username;
06 // 用户密码属性
07 private String password;
08 //获得用户名
09 public String getUsername() {
10 return username;
11 }
12 //设置用户名
13 public void setUsername(String username) {
14 this.username = username;
15 }
16 //获得用户密码
17 public String getPassword() {
18 return password;
19 }
20 //设置用户密码
21 public void setPassword(String password) {
22 this.password = password;
23 }
24 }
1.2 在JSP中调用JavaBean
在JSP中调用JavaBean,有如下两个优点。
1、提高代码的可复用性。
对于通常使用的业务逻辑代码,如数据运算和处理、数据库操作等,可以封装到JavaBean中。在JSP文件中可以多次的调用JavaBean中的方法来实现快速的程序开发。
2、将HTML代码和Java代码进行分离,程序利于开发维护。
将业务逻辑进行封装,使得业务逻辑代码和显示代码想分离,不会互相干扰。避免了代码有多有复杂的问题,方便了日后的维护。
要想要JSP中调用JavaBean,就需要使用到<jsp:useBean>动作指令,其语法格式如下。
<jsp:useBean id="对象名称" scope="储存范围" class="类名"></jsp:useBean>
其中id属性表示该JavaBean实例化后的对象名称。scope属性用来指定该JavaBean的范围,也就是指JavaBean实例化后的对象储存范围。范围的取值有如下四种,分别是page、request、session和application。class属性用来指定JavaBean的类名,这里所指的类名包括包名和类名。
2 设置JavaBean属性
JSP中提供了一个<jsp:setProperty>动作指令来设置JavaBean属性,其有如下四种语法格式。
<jsp:setProperty name="实例化对象名" property="*"/>
<jsp:setProperty name="实例化对象名" property="属性名称"/>
<jsp:setProperty name="实例化对象名" property="属性名称" param="参数名称"/>
<jsp:setProperty name="实例化对象名" property="属性名称" value="属性值" />
其中name属性使用设置实例化对象名,和<jsp:useBean>中的id属性保持一致。property属性用来指定JavaBean属性名称。param属性用来指定接受参数名称,value属性用来指定属性值。
2.1根据所有参数设置JavaBean属性
第一种<jsp:setProperty>动作指令用来根据所有参数设置JavaBean属性,其语法格式如下。
<jsp:setProperty name="实例化对象名" property="*"/>
其中“*”表示根据表单传递的所有参数来设置JavaBean的属性。比如通过表单传递了两个参数,如username和password,这时就可以自动的对JavaBean中的username属性以及password属性进行赋值。这里必须注意的是,表单的参数必须和JavaBean中的属性名称保持大小写一致,否则无法进行赋值操作。
2.2 根据指定参数设置JavaBean属性
第二种<jsp:setProperty>动作指令用来根据指定参数设置JavaBean属性,其语法格式如下。
<jsp:setProperty name=“实例化对象名” property=“属性名称"/>
第二种<jsp:setProperty>动作指令相比第一种<jsp:setProperty>动作指令具有更好的弹性。第一种<jsp:setProperty>动作指令要求设置所有的参数,而第二种<jsp:setProperty>动作指令可以用来设置指定的参数。比如通过表单传递了两个参数,如username和password,这时就可以指定只为JavaBean的username属性赋值,也可以指定只为JavaBean的password属性赋值。
2.3 根据指定参数设置指定JavaBean属性
第三种<jsp:setProperty>动作指令用来根据指定参数设置指定JavaBean属性,其语法格式如下。
<jsp:setProperty name="实例化对象名" property="属性名称" param="参数名称"/>
第三种<jsp:setProperty>动作指令相比前两种<jsp:setProperty>动作指令更加具有弹性。前面两种<jsp:setProperty>动作指令都需要设置参数和JavaBean属性必须相同,而且必须保证大小写一致。而第三种<jsp:setProperty>动作指令没有此限制,因为可以通过其指定需要设置的JavaBean属性。
2.4 设置指定JavaBean属性为指定值
第四种<jsp:setProperty>动作指令用来设置指定JavaBean属性为指定值,其语法格式如下。
<jsp:setProperty name="实例化对象名" property="属性名称" value="属性值" />
第四种<jsp:setProperty>动作指令相比前三种<jsp:setProperty>动作指令更加具有弹性。前面三种<jsp:setProperty>动作指令都需要接受表单参数,而第四种可以根据需要动态的设置JavaBean属性值。
3 获得JavaBean属性
前面介绍的获得JavaBean属性都是通过调用实例化对象名从而获得的,下面来介绍一种更加简便的方法。
JSP提供了一个<jsp:getProperty>动作指令用来很方便的获得JavaBean属性,其语法格式如下。
<jsp:getProperty name="实例化对象名" property="属性名称"/>
其中name属性用来设置实例化对象名,同样必须和<jsp:useBean>中的id属性保持一致。property属性用来指定需要获得的JavaBean属性名称。
4 设置JavaBean的范围
在前面几章曾经介绍过JSP属性有四种存储范围,分别为page、request、session以及application。同样也可以设置JavaBean的存储范围,其取值和意义同属性保存范围完全相同。下面将分别介绍如何设置各不同范围JavaBean,以及不同存储范围的区别。
5 移除JavaBean
JavaBean会根据其设置的范围来决定其生命周期,当生命周期结束,JavaBean将自动移除。不过设计着也可以手动的移除该JavaBean,从而节省内存。
JavaBean的移除对于不同范围的JavaBean而不同,分别通过调用pageContext、request、session、application的removeAttribute(String name)方法来移除page范围、request范围、session范围以及application范围的JavaBean。其中name属性设置为实例化对象名,必须和<jsp:useBean>中的id属性保持一致。