“蓝瘦,香菇,香菇在这里”


1 JavaBean技术

JavaBean 的产生,使 JSP 页面中的业务逻辑变得更加清晰,程序之中的实体对象及业务逻辑可以单独封装到 Java 类之中,JSP 页面可以通过 自身操作 JavaBean 的动作标识对其进行操作,改变了 HTML 网页代码与 Java 代码混乱的编写方式,不仅提高了程序的可读性、易维护性,而且提高了 代码的重用性。

JavaBean 是一种 JAVA 语言写成的可重用组件
Javabean 就是为了和 jsp 页面传数据化简交互过程而产生的。
使 JSP 页面中的 java 代码分离出去,降低了耦合

接下来给出的是JavaBean与其它Java类相比而言独一无二的特征(规范):

  • 提供一个默认的无参构造函数。
  • 需要被序列化并且实现了Serializable接口。(实现序列化表示将对象转换成可存储或可传输的状态,好像可以不用)
  • 可能有一系列可读写属性。
  • 可能有一系列的”getter”或”setter”方法。

1.1 JavaBean的种类

可视化 JavaBean:用于实现可视化界面,一般用于 Swing 的程序中,JSP开发少用

非可视化 JavaBean : 分为值 JavaBean 和 工具 JavaBean

值 JavaBean :严格遵循 JavaBean的命名规范,通常用来封装表单数据,作为信息的容器

工具JavaBean :可以不遵循 JavaBean的命名规范 用于封装业务逻辑,数据操作等,连接数据库等,实现业务逻辑与页面显示的分离,提高了代码的可读性与易维护性。

值 JavaBean

UserBean.java

public class UesrBean {
    private String name;

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private String password;

    @Override
    public String toString() {
        return "UesrBean [name=" + name + ", password=" + password + "]";
    }
}

工具 JavaBean
MyTools.java

// 转换字符串中的 “<” 与 “>” 字符
public class MyTools {
    public String change(String source) {
        source = source.replace("<","<");
        source = source.replace(">",">");
    }
}

1.2 JavaBean的应用

1 获取 JavaBean的属性

首先引入 JavaBean 类,在通过 JSP 动作标识进行获取

<jsp:useBean id="produce" class="com.bean.Produce"></jsp:useBean>

<jsp:getProperty property="name" name="produce"/>

Produce.java

//package experiment06;
public class Produce {
    // 商品名称
    private String name = "LOL进阶指南";
    // 商品价格
    private double price = 298;
    // 数量
    private int count = 10;
    // 出厂地址
    private String factoryAdd = "火星进坑有限公司";
    public String getName() {
        return name;
    }
    public double getPrice() {
        return price;
    }
    public int getCount() {
        return count;
    }
    public String getFactoryAdd() {
        return factoryAdd;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public void setFactoryAdd(String factoryAdd) {
        this.factoryAdd = factoryAdd;
    }
}

Produce 类必须遵循 JavaBean 规范 ,getProperty 标签才能根据 getter方法获取值,

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<jsp:useBean id="produce" class="com.bean.Produce"></jsp:useBean>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>显示商品信息</title>
</head>
<body>
<div>
    <ul>
        <li>
            商品名称:<jsp:getProperty property="name" name="produce"/>
        </li>
        <li>
            价格:<jsp:getProperty property="price" name="produce"/>(元)
        </li>
        <li>
            数量:<jsp:getProperty property="count" name="produce"/>
        </li>
        <li>
            厂址:<jsp:getProperty property="factoryAdd" name="produce"/>
        </li>
    </ul>
</div>
</body>
</html>

2 对 JavaBean 属性赋值

对上个例子中的的属性赋值,这里关联了 setter 方法。

<jsp:setProperty property="name" name="produce" value="手机"/>
<jsp:setProperty property="price" name="produce" value="1980.88"/>
<jsp:setProperty property="count" name="produce" value="1"/>
<jsp:setProperty property="factoryAdd" name="produce" value="广东省xxx公司"/>

3 在JSP 页面中应用 JavaBean

这个例子关键就是这个:

<jsp:useBean id="person" class="com.wgh.Person" scope="page">
    <jsp:setProperty name="person" property="*" />
</jsp:useBean>

scope 表示JavaBean实例的有效范围, property=”*” 表示所有值。

Person.java

//package com.wgh;

public class Person {
        private String name;    // 姓名
        private int age;    // 年龄
        private String sex;     // 性别
        private String address;     // 住址
        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 getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>录入员工信息页面</title>
<style type="text/css">
ul {
    list-style: none; /*设置不显示项目符号*/
    margin:0px;     /*设置外边距*/
    padding:5px;        /*设置内边距*/
}

li {
    padding:5px; /*设置内边距*/
}
</style>
</head>
<body>
    <form action="register.jsp" method="post">
        <ul>
            <li>姓 名:<input type="text" name="name"></li>
            <li>年 龄:<input type="text" name="age"></li>
            <li>性 别:<input type="text" name="sex"></li>
            <li>住 址:<input type="text" name="address" size="35"></li>
            <li><input type="submit" value="添 加"></li>
        </ul>
    </form>
</body>
</html>

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="person" class="com.wgh.Person" scope="page">
    <jsp:setProperty name="person" property="*" />
</jsp:useBean>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>显示录入的员工信息页面</title>
<style type="text/css">
ul {
    list-style: none; /*设置不显示项目符号*/
    margin: 0px; /*设置外边距*/
    padding: 5px; /*设置内边距*/
}

li {
    padding: 5px; /*设置内边距*/
}
</style>
</head>
<body>
    <ul>
        <li>姓 名:<jsp:getProperty property="name" name="person" /></li>
        <li>年 龄:<jsp:getProperty property="age" name="person" /></li>
        <li>性 别:<jsp:getProperty property="sex" name="person" /></li>
        <li>住 址:<jsp:getProperty property="address" name="person" /></li>
    </ul>
</body>
</html>

实例-应用JavaBean 解决中文乱码

<jsp:useBean id="messageBean" class="com.wgh.MessageBean" scope="request"/>
<%=MyTools.toChinese(messageBean.getAuthor()) %>

MessageBean.java

package com.wgh;

public class MessageBean {
    private String author;// 存储留言者
    private String title;// 存储留言标题
    private String content;// 存储留言内容
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    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;
    }

}

MyTools.java

package com.wgh;

import java.io.UnsupportedEncodingException;

public class MyTools {
    public static String toChinese(String str) {
        if (str == null)
            str = "";
        try {
            // 通过String类的构造方法,将指定的字符串转换为“UTF-8”编码
            str = new String(str.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            str = "";
            e.printStackTrace();
        }
        return str;
    }
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>留言页面</title>
<style type="text/css">
ul {
    list-style: none; /*设置不显示项目符号*/
    margin:0px;     /*设置外边距*/
    padding:5px;        /*设置内边距*/
}

li {
    padding:5px; /*设置内边距*/
}
</style>
</head>
<body>
    <form action="deal.jsp" method="post">
        <ul>
            <li>留  言  者:<input type="text" name="author" size="20"></li>
            <li>留言标题:<input type="text" name="title" size="30"></li>
            <li>留言内容:<textarea name="content" rows="6" cols="30"></textarea></li>
            <li><input type="submit" value="提交"> <input type="reset"
                value="重置"></li>
        </ul>
    </form>
</body>
</html>

deal.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<jsp:useBean id="messageBean" class="com.wgh.MessageBean" scope="request">
    <jsp:setProperty name="messageBean" property="*"/>
</jsp:useBean>
<jsp:forward page="show.jsp"/>

show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.wgh.MyTools" %>

<!-- 获取request范围内名称为messageBean的MessageBean类实例 -->
<jsp:useBean id="messageBean" class="com.wgh.MessageBean" scope="request"/>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>显示留言信息</title>
<style type="text/css">
ul {
    list-style: none; /*设置不显示项目符号*/
    margin:0px;         /*设置外边距*/
    padding:5px;        /*设置内边距*/
}

li {
    padding:5px; /*设置内边距*/
}
</style>
</head>
<body>
    <ul>
        <!-- 获取留言者后进行转码操作 -->
        <li>留  言  者:<%=MyTools.toChinese(messageBean.getAuthor()) %></li>
        <!-- 获取留言标题后进行转码操作 -->
        <li>留言标题:<%=MyTools.toChinese(messageBean.getTitle())%></li>
        <!-- 获取留言内容后进行转码操作 -->
        <li>留言内容:<textarea rows="6" cols="30" readonly><%=MyTools.toChinese(messageBean.getContent()) %></textarea></li>
        <li><a href="index.jsp">继续留言</a></li>
    </ul>
</body>
</html>