JavaBean技术 系统管理员 2021-09-18 09:14 365阅读 0赞 # 1、JavaBean介绍 # JavaBean的产生,使JSP页面中的业务逻辑变得更加清晰。程序中的实体对象和业务逻辑可以单独封装到Java类中,JSP页面通过自身操作JavaBean的动作标识对其进行操作,改变了HTML网页代码与Java代码混乱的编写方式,不仅提高了程序的可读性、易维护性,而且还提高了代码的重用性。 Java之父 James Gosling 在设计Java语言时,为Java组件中封装数据的Java类进行命名时,看到桌子上的咖啡豆,于是灵机一动,就把它命名为“JavaBean”,bean在中文中是“豆、豆子”的意思。 ## 1.1 JavaBean概述 ## 在JSP网页开发的初级阶段,并没有框架与逻辑分层概念的产生,需要将Java代码嵌入到网页中对JSP页面中的一些业务逻辑进行处理,如字符串处理、数据库操作等。其开发流程如下图所示。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70][] 此种开发方式虽然看似流程简单,但如果将大量的Java代码嵌入到JSP页面中,必定会给修改及维护带来一定的困难,因为在JSP页面中包含HTML代码、CSS代码、Java代码等,同时再加入业务逻辑处理代码,既不利于页面编程人员的设计,也不利于Java程序员对程序的开发,而且将Java代码写入到JSP页面中,不能体现面向对象的开发模式,达不到代码的重用。 如果使HTML代码与Java代码相分离,将Java代码单独封装成为一个处理某种业务逻辑的类,然后在JSP页面中调用此类,则可以降低HTML代码与Java代码之间的耦合度,简化JSP页面,提高Java程序代码的重用性及灵活性。这种与HTML代码相分离,而使用Java代码封装的类,就是一个JavaBean组件。在Java Web开发中,可以使用JavaBean组件来完成业务逻辑的处理。应用 JavaBean与JSP整合的开发模式如下图所示。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 1][] ## 1.2 JavaBean种类 ## 起初,JavaBean的目的是为了将可以重复使用的代码进行打包,在传统的应用中,JavaBean主要用于实现一些可视化界面,如一个窗体、按钮、文本框等,这样的JavaBean称之可视化的JavaBean。随着技术的不断发展与项目的需求,目前JavaBean主要用于实现一些业务逻辑或封装一些业务对象,由于这样的JavaBean并没有可视化的界面,所以又称之为非可视化的JavaBean。 可视化的JavaBean一般应用于Swing的程序中,在Java Web开发中并不会采用,而是使用非可视化的JavaBean,实现一些业务逻辑或封装一些业务对象。 # 2、JavaBean的应用 # 在JSP页面中应用JavaBean非常简单,主要通过JSP动作标签<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>来实现对JavaBean对象的操作,但所编写的JavaBean对象要遵循JavaBean规范,只在严格遵循JavaBean规范,在JSP页面才能够方便的调用及操作JavaBean。 将JavaBean对象应用到JSP页面中,JavaBean的生命周期可以自行进行设置,它存在于4种范围之内,分别为:page、request、session、application,默认的情况下,JavaBean作用于page范围之内。 ## 2.1 <jsp:useBean>动作标签 ## <jsp:useBean>动作标签用来装载一个将在JSP页面中使用的JavaBean对象。其语法格式如下: <jsp:useBean id="beanName" class="package.class" scope="page" /> 参数说明: id:用于创建JavaBean对象的引用名。 class:用于指定JavaBean的类。 scope:用于指定JavaBean对象的范围,默认情况下,scope被设置为page。 ## 2.2 <jsp:setProperty>动作标签 ## <jsp:setProperty>动作标签用于设置<jsp:useBean>动作标签中指定的JavaBean对象的属性值。<jsp:setProperty>动作标签指定名称、属性、值和参数,用于赋给JavaBean对象的属性。其语法格式如下: <jsp:setProperty name="beanName" property="propertyName" value="value" param="parameter" /> 参数说明: name:用于对应 <jsp:useBean>动作标签中的id属性。 property:指定要为之设置值的JavaBean的属性名称。 value:指定要为属性设置的值。 param:指定用于输入数据的表单元素名称,并给属性赋值。 注意:value属性不能与param属性一起使用。 ## 2.3 <jsp:getProperty>动作标签 ## <jsp:getProperty>动作标签用于获取<jsp:useBean>动作标签中指定的JavaBean对象的属性值。其语法格式如下: <jsp:getProperty name="beanName" property="propertyName" /> 参数说明: name:用于对应 <jsp:useBean>动作标签中的id属性。 property:指定要获取JavaBean对象的属性名称。 **示例:**实现人员档案管理系统,在其中录入人员信息功能,主要通过在JSP页面中应用JavaBean进行实现。 (1)创建名称为Person的类,将其放置于com.pjb.bean包中,实现对人员信息的封装。 package com.pjb.bean; /** * 人员信息类 * * @author pan_junbiao * */ public class Person { private String name; // 姓名 private String blog; // 博客地址 private int age; // 年龄 private String sex; // 性别 private String[] interests; // 兴趣 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getBlog() { return blog; } public void setBlog(String blog) { this.blog = blog; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String[] getInterests() { return interests; } public void setInterests(String[] interests) { this.interests = interests; } } (2)创建将数组转换成字符串的JavaBean对象,它的名称为Convert。在该类中编写arrToStr()方法,将数组对象转换成指定格式的字符串。 package com.pjb.bean; /** * 转换数组的JavaBean * * @author pan_junbiao * */ public class Convert { /** * 将数组转换成为字符串 * * @param arr 数组 * @return 字符串 */ public String arrToStr(String[] arr) { // 实例化StringBuffer StringBuffer sb = new StringBuffer(); // 判断arr是否为有效数组 if (arr != null && arr.length > 0) { // 遍历数组 for (String s : arr) { // 将字符串追加到StringBuffer中 sb.append(s); // 将字符串追加到StringBuffer中 sb.append(","); } // 判断字符串长度是否有效 if (sb.length() > 0) { // 截取字符 sb = sb.deleteCharAt(sb.length() - 1); } } // 返回字符串 return sb.toString(); } } (3)创建注册页面 reginput.jsp,在该页面中放置录入人员信息所需的表单。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>人员注册</title> </head> <body> <div align="center">请输入注册信息 <form name="form1" method="post" action="reginfo.jsp"> <table> <tr> <td>姓名:</td> <td><input type="text" name="name" style="width:250px;"/></td> </tr> <tr> <td>博客:</td> <td><input type="text" name="blog" style="width:250px;"/></td> </tr> <tr> <td>年龄:</td> <td><input type=text name="age" style="width:250px;"/></td> </tr> <tr> <td>性别:</td> <td> <select name = "sex"> <option value="男" selected="selected">男</option> <option value="女">女</option> </select> </td> </tr> <tr> <td>兴趣:</td> <td> <input type="checkbox" name="interests" value="足球" />足球 <input type="checkbox" name="interests" value="篮球" />篮球 <input type="checkbox" name="interests" value="羽毛球" />羽毛球 <input type="checkbox" name="interests" value="乒乓球" />乒乓球 </td> </tr> <!-- 以下是提交、取消按钮 --> <tr> <td> <input type="submit" value="提交" /> </td> <td> <input type="reset" value="取消" /> </td> </tr> </table> </form> </div> </body> </html> (4)创建注册提交页面 reginfo.jsp,用于对reginput.jsp页面中表单提交请求进行处理。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); //字符串编码格式 %> <jsp:useBean id="person" class="com.pjb.bean.Person"> <jsp:setProperty name="person" property="*" /> </jsp:useBean> <jsp:useBean id="convert" class="com.pjb.bean.Convert"></jsp:useBean> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>注册信息</title> </head> <body> <table align="center"> <tr> <td>姓名:</td> <td> <jsp:getProperty property="name" name="person"/> </td> </tr> <tr> <td>博客:</td> <td> <jsp:getProperty property="blog" name="person"/> </td> </tr> <tr> <td>年龄:</td> <td> <jsp:getProperty property="age" name="person"/> </td> </tr> <tr> <td>性别:</td> <td> <jsp:getProperty property="sex" name="person"/> </td> </tr> <tr> <td>兴趣:</td> <td> <%= convert.arrToStr(person.getInterests()) %> </td> </tr> </table> </body> </html> **执行结果:** (1)注册页面 reginput.jsp。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 2][] (2)注册提交页面 reginfo.jsp。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 3][] **说明:** (1)如果所处理的表单信息中包含中文,通过JSP内置对象的 request.setCharacterEncoding("UTF-8")方法指定字符编码格式进行解决。 (2)表单信息中的属性名称最好设置成为JavaBean中的属性名称,这样就可以通过“<jsp:setProperty name="person" property="\*" />”的形式来接收所有参数,这种方式可以减少程序中的代码量。如将用户年龄文本框的name属性设置为age,它对应的Person类中的age字段。 (3)表单中的属性名称与JavaBean中的属性名称不一致,可以通过<jsp:setProperty>标签中的param属性来指定表单中的属性。如表单中的用户名为username,可以使用“<jsp:setProperty name="person" property="name" param="username"/>”对其赋值。例如,上述注册提交页面 reginfo.jsp中的代码可以修改为: <jsp:useBean id="person" class="com.pjb.bean.Person" /> <jsp:setProperty name="person" property="name" param="name"/> <jsp:setProperty name="person" property="blog" param="blog"/> <jsp:setProperty name="person" property="age" param="age"/> <jsp:setProperty name="person" property="sex" param="sex"/> <jsp:setProperty name="person" property="interests" param="interests"/> (4)通过<jsp:useBean>标签实例化的JavaBean对象,如果在JSP页面中使用Java代码调用JavaBean对象中的属性或方法,所使用的JavaBean对象的名称为<jsp:useBean>标签中的id属性,例如上述代码中的: <jsp:useBean id="person" class="com.pjb.bean.Person" /> <jsp:useBean id="convert" class="com.pjb.bean.Convert" /> <%= convert.arrToStr(person.getInterests()) %> [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70]: /images/20210724/6d5bfae2b8f0458c890c8dbde62894a6.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 1]: /images/20210724/0f9573b2e1e645749aadcf4783737294.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 2]: /images/20210724/7a12ca61e8de4e71b935a7eea2d2b421.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 3]: /images/20210724/a54e566622d942cb9a17143fd2fa1075.png
还没有评论,来说两句吧...