JavaBean技术的使用

JavaBean技术
一、JavaBean介绍
在JSP网页开发的初级阶段,并没有所谓的框架与逻辑分层的概念,JSP网页代码是与业务逻辑代码写在一起的。这种零乱的代码书写方式,给程序的调试及维护带来了很大的困难,直至JavaBean的出现,这一问题才得到了改善。
1、JavaBean概述
在JSP网页开发初级阶段,并没有框架与逻辑分层概念产生,需要将Java代码嵌入到网页中,对JSP页面中的一些业务逻辑进行处理,如字符串处理、数据库操作等。
如果使HTML代码与Java代码相分离,将Java代码单独封装成为一个处理某种业务逻辑的类,然后在JSP页面中调用此类,则可以减低HTML代码与Java代码之间的耦合度,简化JSP页面,提高Java程序代码的重用性及灵活性。这种与HTML代码相分离,而使用Java代码封装的类,就是一个JavaBean组件,。在Java Web开发中,可以使用JavaBean组件来完成业务逻辑的处理。
2、JavaBean种类
起初,JavaBean的目的是为了将可以重复使用的代码进行打包。在传统的应用中,JavaBean主要用于实现一些可视化界面,如一个窗体、按钮、文本框等,这样的JavaBean称之为可视化JavaBean。随着技术的不断发展与项目的需求,目前JavaBean主要用于实现一些业务逻辑或封装一些业务对象,这样的JavaBean并没有可视化的按钮,所有又称之为非可视化JavaBean。
可视化的JavaBean一般应用于Swing的程序中,在Java Web开发中并不会采用,而是使用非可视化的JavaBean,实现一些业务逻辑或封装一些业务对象。
例子如下:
public class Email implements Serializable {
    private static final long serialVersionUID=1L;
    private String mailAdd;
    private boolean email;//是否是个标准的Email地址
    public Email(){
    }

    public Email(String mailAdd) {
        this.mailAdd = mailAdd;
    }

    public String getMailAdd() {
        return mailAdd;
    }

    public void setMailAdd(String mailAdd) {
        this.mailAdd = mailAdd;
    }

    public boolean isEmail() {
        String regex="\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";//正             则表达式,定义邮箱格式
        if(mailAdd.matches(regex)){//判断字符串是否和正则表达式匹配
            email=true;//email为真
        }
        return email;
    }

}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form name="form1" action="result.jsp" method="post">
        <table width="450" height="250" align="center" border="1">
            <tr>
                <td colspan="2" align="center">
                    <b>邮箱认证系统</b>
                </td>
            </tr>
            <tr>
                <td align="right">邮箱地址</td>
                <td>
                    <input type="text" name="mailAdd">
                </td>
            </tr>
            <tr>
                <td align="center" colspan="2">
                    <input type="submit" value="提 交">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:useBean id="email" class="lyt.email.Email"></jsp:useBean>
    <jsp:setProperty name="email" property="*"></jsp:setProperty>
    <jsp:getProperty name="email" property="mailAdd"></jsp:getProperty>
    <%=email.isEmail()%>
</body>
</html>
虽然在JavaBean的规范中,要求JavaBean对象提供默认无参构造方法,但除了默认无参构造方法外,JavaBean也可以根据相关属性提供构造方法。

二、JavaBean的应用
JavaBean是Java语言所写成的可重用组件,它可以应用于系统的很多层,如PO、VO、DTO、POJO等,其应用十分广泛。
1、获取JavaBean属性信息
在JavaBean对象中,为了防止外部直接对JavaBean属性的调用,,通常将JavaBean中的属性设置为私有的(private),但需要为其提供公共的(public)访问方法,也就是getXXX()方法。
例子:
public class Produce {
    private String name="机械键盘";
    private double price=1880.5;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <jsp:useBean id="produce" class="lyt.produce.Produce"></jsp:useBean>
   <div>
       <ul>
           <li>商品名称:<jsp:getProperty name="produce" property="name">        </jsp:getProperty></li>
           <li>价格:<jsp:getProperty name="produce" property="price">  </jsp:getProperty></li>
       </ul>
   </div>
</body>
</html>
本示例通过<jsp:useBean>标签实例化商品的JavaBean对象,<jsp:getProperty>标签获取JavaBean中的属性信息。
2、对JavaBean属性赋值
编写JavaBean对象要遵循JavaBean规范,在JavaBean规范中的访问器setXXX()方法,用于对JavaBean中的属性赋值,如果对JavaBean对象提供了setXXXX()方法,在JSP页面中就可以通过<jsp:setProperty>对其进行赋值。
3、如何在JSP页面中应用JavaBean
在JSP页面中应用JavaBean非常简单,主要通过JSP动作标签<jsp:useBean>、<jsp:getProperty>、<jsp:setProperty>来实现对JavaBean对象的操作,但所编写的JavaBean对象要遵循JavaBean规范,只有严格遵循JavaBean规范,在JSP页面中才能够方便地调用及操作JavaBean。
将JavaBean对象应用到JSP页面中,JavaBean的生命周期可以自行设置,它存在于4中范围内,分别为page、request、session和application,默认情况下,JavaBean作用于page范围内。
例如:
public class Person {

    private String name;//名字
    private  int age;//年龄
    private String sex;//性别
    private  String add;//地址

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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 getAdd() {
        return add;
    }

    public void setAdd(String add) {
        this.add = add;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form name="form1" action="reg.jsp">
        <table align="center" width="400" height="200" border="1">
            <tr>
                <td align="center" colspan="2" height="40">
                    <b>添加用户信息</b>
                </td>
            </tr>
            <tr>
                <td align="right">姓名:</td>
                <td>
                    <input type="text" name="name">
                </td>
            </tr>
            <tr>
                <td align="right">年龄</td>
                <td>
                    <input type="text" name="age">
                </td>
            </tr>
            <tr>
                <td align="right">性别:</td>
                <td>
                    <input type="text" name="sex">
                </td>
            </tr>
            <tr>
                <td align="right">地址:</td>
                <td>
                    <input type="text" name="add">
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="添加">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%request.setCharacterEncoding("UTF-8");%>
   <jsp:useBean id="person" class="lyt.com.Person" scope="page">
       <jsp:setProperty name="person" property="*"></jsp:setProperty><!--接收表单数据-->
   </jsp:useBean>
   <table align="center" width="400">
       <tr>
           <td align="right">姓名:</td>
           <td>
               <jsp:getProperty name="person" property="name"></jsp:getProperty>
           </td>
       </tr>
       <tr>
           <td align="right">年龄:</td>
           <td>
               <jsp:getProperty name="person" property="age"></jsp:getProperty>
           </td>
       </tr>
       <tr>
           <td align="right">性别:</td>
           <td>
               <jsp:getProperty name="person" property="sex"></jsp:getProperty>
           </td>
       </tr>
       <tr>
           <td align="right">地址:</td>
           <td>
               <jsp:getProperty name="person" property="add">     </jsp:getProperty>
           </td>
       </tr>
   </table>
</body>
</html>
表单中信息中的属性名称最好设置为JavaBean中的属性名称,这样就可以通过“<jsp:setProperty property="*"/>”的形式接受所有参数,这种方式可以减少程序中的代码量。
如果所处理的表单信息中包含中文信息,通过JSP内置对象request获取的参数值将会出现中文乱码现象,此时可以通过request.setCharacterEncoding()方法指定字符编码格式进行解决。
表单中的属性名称与JavaBean中的属性名称不一致时,可以通过<jsp:setProperty>标签中的param属性来指定表单中的属性。如表单中的用户名username,可以使用<jsp:setProerty name="person" property="name" param="username"/>对其进行赋值。

三、在JSP中应用JavaBean

JavaBean在JSP页面中应用十分广泛,几乎所有的JSP页面中,所有的实体对象及业务逻辑的处理都有JavaBean封装,因此,JavaBean与JSP之间的关系十分密切。

1、解决中文乱码的JavaBean

在JSP页面中,处理中文字符经常会出现字符乱码的现象,特别是通过表单传递中文数据时容易产生。它的解决方法很多,如将request的字符集指定为中文字符集,编写JavaBean对中文乱码字符进行转码。

例子:

public class News {

    private String title;
    private String content;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}
public class CharactorEncoding {
    /**
     * 构造方法
     */
    public CharactorEncoding(){}
    /**
     * 对字符进行转码处理
     * @param str 要转码的字符串
     * @return 编码后的字符串
     */
    public String toString(String str) {
        String text="";//转换字符
        if(str!=null&&!"".equals(str)){
            try {
                text=new String(str.getBytes("ISO-8859-1"),"UTF-8");//对字符进     行编码处理
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return text;//返回后的字符串
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
     <form name="form1" action="release.jsp" method="post">
         <table align="center" width="450" height="260" border="1">
             <tr>
                 <td align="center" colspan="2">
                     <b>新闻发布</b>
                 </td>
             </tr>
             <tr>
                 <td align="right">标题</td>
                 <td>
                     <input type="text" name="title">
                 </td>
             </tr>
             <tr>
                 <td align="right">内容</td>
                 <td>
                     <textarea name="content" cols="40" rows="8"></textarea>
                 </td>
             </tr>
             <tr>
                 <td colspan="2" align="center">
                     <input type="submit" value="发布">
                 </td>
             </tr>
         </table>
     </form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>新闻发布结果</title>
</head>
<body>
     <jsp:useBean id="news" class="lyt.bean.News"></jsp:useBean><!--实例化News对象-->
     <jsp:useBean id="encoding" class="lyt.bean.CharactorEncoding"></jsp:useBean><!--实例化CharactorEncoding-->
     <jsp:setProperty name="news" property="*"></jsp:setProperty><!--对News对象         中的属性赋值-->
     <%=encoding.toString(news.getTitle())%>
     <%=encoding.toString(news.getContent())%>
</body>
</html>
通过<jsp:useBean>标签实例化JavaBean对象,如果在JSP页面中使用java代码调用JavaBean对象中的属性和方法,所使用的JavaBean对象的变量名称为<jsp:useBean>标签中的id属性。

2在JSP页面中用来显示时间的JavaBean
JavaBean是java语言所写成的可重用组件,它可以是一个实体类对象,也可以是一个业务逻辑的处理,但编写JavaBean要遵循JavaBean规范。
例子:
public class DateTime {

    private  String dateTime;//日期与时间
    private String week;//星期
    private Calendar calendar=Calendar.getInstance() ;//Calendar对象
    /**
     * 获得当前日期及时间
     * @return 日期及时间的字符串
     */
    public String getDateTime(){
        Date currentDate=Calendar.getInstance().getTime();//获得当前时间
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");//实例化 SimpleDateFormat
        dateTime=sdf.format(currentDate);//格式化日期时间
        return dateTime;//返回日期及时间的字符串
    }

    public String getWeek(){
        String[] weeks={"星期日","星期一","星期二","星期三","星期四","星期五","星  期六"};//定义数组
        int index=calendar.get(Calendar.DAY_OF_WEEK);//获取一星期的某天索引
        week=weeks[index-1];//获取星期几
        return week;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>时钟走动</title>
<body>
<style type="text/css">
    #clock{
        width: 420px;
        height: 80px;
        background: #EOEOEO;
        font-size: 25px;
        font-weight: bold;
        border: solid 5px orange;
        padding: 20px;
    }
    #week{
        padding-top: 15px;
        color: #0080FF;
    }
</style>
<meta http-equiv="Refresh" content="1">
</head>
<body>
  <jsp:useBean id="dateTime" class="lyt.date.DateTime" scope="application"></jsp:useBean>
  <div align="center">
      <div id="clock">
          <div id="time">
              <jsp:getProperty name="dateTime" property="dateTime"></jsp:getProperty>
          </div>
          <div id="week">
              <jsp:getProperty name="dateTime" property="week"></jsp:getProperty>
          </div>
      </div>
  </div>
</body>
</html>
因为获取当前日期的JavaBean对象DateTime并不涉及更多的业务逻辑,所以实例中将它的作用域设置为application。这样做的好处是,在JSP页面中第一次调用该对象时实例化一个DateTime对象,以后再次调用时不需要再次实例化DateTime,因为它在application范围内已经存在。
为了实现网页中时钟的走动效果,可以通过不断刷新页面的方法来获取当前时间,实例中通过在<head>标签内加入代码<meta http-equiv="Refresh" content="1">来实现,加入代码后,网页每隔1s自动刷新网页一次,这样就可以显示时钟走动效果了。
3、将数组转化成字符串的JavaBean
在程序开发中,将数组转换成为字符串是经常被用到的,如表单中的复选框,在提交之后它就是一个数组对象,由于数组中对象在业务逻辑处理中不方便,所以在实际应用过程中通常将其转换成字符串后再进行处理。
public class Paper implements Serializable {
    private static final long serialVersionUID=1L;
    private String[] languages;//定义保存编程语言的字符串数组
    private String[] technics;//定义保存掌握技术的字符串数组
    private String[] parts;//定义保存困难部分的字符数组

    public Paper(){

    }

    public String[] getLanguages() {
        return languages;
    }

    public void setLanguages(String[] languages) {
        this.languages = languages;
    }

    public String[] getTechnics() {
        return technics;
    }

    public void setTechnics(String[] technics) {
        this.technics = technics;
    }

    public String[] getParts() {
        return parts;
    }

    public void setParts(String[] parts) {
        this.parts = parts;
    }
}
public class Convert {
    /**
     * 将数组转换为字符串
     * @param arr 数组
     * @return 字符串
     */
    public String arr2Str(String[] arr){
        StringBuffer sb=new StringBuffer();
        if(arr!=null&&arr.length>0){
            for(String s:arr){
            sb.append(s);
            sb.append(",");
            }
           if(sb.length()>0){
                sb.deleteCharAt(sb.length()-1);
           }
        }
        return sb.toString();
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
      <form action="reg.jsp" method="post">
          <div>
              <h1>调查问卷</h1>
              <hr/>
              <ul>
                  <li>你经常用哪些编程语言开发程序</li>
                  <li>
                      <input type="checkbox" name="languages"     value="JAVA">JAVA
                      <input type="checkbox" name="languages" value="PHP">PHP
                      <input type="checkbox" name="languages" value=".NET">.NET
                      <input type="checkbox" name="languages" value="Python">Python
                  </li>
              </ul>
              <ul>
                  <li>你目前掌握的技术:</li>
                  <li>
                      <input type="checkbox" name="technics" value="HTML">HTML
                      <input type="checkbox" name="technics" value="JAVA BEAN">JAVA BEAN
                      <input type="checkbox" name="technics" value="JSP">JSP
                      <input type="checkbox" name="technics" value="Sping MVC">Spring MVC
                  </li>
              </ul>
              <ul>
                  <li>在学习中有哪一部分感觉有困难:</li>
                  <li>
                      <input type="checkbox" name="parts" value="JSP">JSP
                      <input type="checkbox" name="parts" value="STRUTS">STRUTS
                  </li>
              </ul>
              <input type="submit" value="提 交">
          </div>
      </form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:useBean id="paper" class="lyt.string.Paper"></jsp:useBean>
    <jsp:useBean id="convert" class="lyt.string.Convert"></jsp:useBean>
    <jsp:setProperty name="paper" property="*"></jsp:setProperty>
    <div>
        <h1>调查结果</h1>
        <hr/>
        <ul>
            <li>
                你经常使用的编程语言: <%=convert.arr2Str(paper.getLanguages())%>
            </li>
            <li>
                你目前掌握的技术: <%=convert.arr2Str(paper.getTechnics())%>
            </li>
            <li>
                在学习中感觉有困难的部分: <%=convert.arr2Str(paper.getParts())%>
    </div>
            </li>
        </ul>
</body>
</html>
至此,JavaBean技术讲完了。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值