JSP(第四章:JavaBean)

1 JavaBean概述

2 JavaBean种类

3 获取JavaBean属性信息

1 JavaBean概述

纯JSP开发模式:

JSP+JavaBean开发模式:

2 JavaBean种类

JavaBean : 支持组件的功能。Java中的组件叫JavaBean。Java(咖啡)Bean(豆)。狭义的JavaBean是具有一个界面形式的体现;广义的JavaBean是普通的Java类。
满足两点要求:
(1)属性名第一个字母都是小写的,private的;
(2)一般具有getters和setters方法。
原因就是符合面向对象的特性,所以属性是私有的,别人不能访问,从而隐藏细节。Getters是读取属性的值,setters是修改属性的值。
一般web中使用的JavaBean不具有图形界面的表现,一般是用来实现某一业务逻辑或者取得特定结果。

2.1 例:封装邮箱地址的JavaBean

【Email.java】

package com.lyq.bean;

import java.io.Serializable;

public class Email implements Serializable {
    //  serialVersionUID 值
    private static final long serialVersionUID = 1L;
    // Email地址
    private String mailAdd;
    // 是否是一个标准的Email地址
    private boolean eamil;
    /**
     * 默认无参的构造方法
     */
    public Email() {
    }
    /**
     * 构造方法
     * @param mailAdd Email地址
     */
    public Email(String mailAdd) {
        this.mailAdd = mailAdd;
    }
    /**
     * 是否是一个标准的Email地址
     * @return 布尔值
     */
    public boolean isEamil() {
        // 正则表达式,定义邮箱格式
        String regex = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"; 
        // matches()方法可判断字符串是否与正则表达式匹配
        if (mailAdd.matches(regex)) { 
            // eamil为真
            eamil = true;
        }
        // 返回eamil
        return eamil;
    }
    public String getMailAdd() {
        return mailAdd;
    }
    public void setMailAdd(String mailAdd) {
        this.mailAdd = mailAdd;
    }
}

【index.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="result.jsp" method="post">
        <table align="center" width="300" border="1" height="150">
            <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 colspan="2" align="center">
                    <input type="submit" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

【result.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<[email protected] import="com.lyq.bean.Email"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div align="center">
        <%
            // 获取邮箱地址
            String mailAdd = request.getParameter("mailAdd");
            // 实例化Email,并对mailAdd赋值
            Email email = new Email(mailAdd);
            // 判断是否是标准的邮箱地址
            if(email.isEamil()){
                out.print(mailAdd + " <br>是一个标准的邮箱地址!<br>");
            }else{
                out.print(mailAdd + " <br>不是一个标准的邮箱地址!<br>");
            }
        %>
        <a href="index.jsp">返回</a>
    </div>
</body>
</html>

【结果:】

3 获取JavaBean属性信息

<jsp:useBean>在JSP中使用JavaBean。
一般来说,JSP或者Servlet里面的JavaBean具有的特点是:
(1)属性名第一个字母都是小写
(2)每个属性有对应的getter和setter方法。
此外,Bean的特点还有:
必须要有一个不带参数的构造器,
在JSP元素创建Bean时会调用空构造器。

【格式1:】
<jsp:useBean id=””  scope=””   class=””   type=””/>
【格式2:】
<jsp:useBean…>
    <jsp:setProperty name="produce" property="price" value="888" >
        <!--相当于 produce.setXXX(888)-->
    <jsp:getProperty name="produce" property="price" />
        <!--相当于produce.getPrice()-->
</jsp:useBean>

jsp:useBean各个参数的含义:
id——对象实例名称
scope——Bean作用范围,默认是page,包括page,request,session,application
class——Bean的类名称
type——Bean实例类型,可以是本类,或其父类,或其实现的接口,默认为本类 (多态)

page:仅涵盖使用JavaBean的页面。每次访问页面时,重新生成一个。
request:有效范围仅限于使用JavaBean的请求,跳转生成另一个reques就无效。
session:有效范围在用户整个连接过程中,整个会话阶段均有效;即刷新页面依然存在。
application:有效范围涵盖整个应用程序,也就是对整个网站均有效。相当于把Bean对象放在了ServletContext中。即打开另一页面也存在。

3.1 例子

【Produce.java】

package my.model;

public class Produce {
    private String name;
    private double price;
    private int count;
    private String factoryAdd;
    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;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public String getFactoryAdd() {
        return factoryAdd;
    }
    public void setFactoryAdd(String factoryAdd) {
        this.factoryAdd = factoryAdd;
    }

}

【login.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="index.jsp" method="post">
        <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="name2"></td><!--注意这的名字是name2不是name -->
            </tr>
            <tr>
                <td align="right">价格:</td>
                <td><input type="text" name="price2"></td><!--注意这的名字是price2不是price -->
            </tr>
            <tr>
                <td align="right">数量:</td>
                <td><input type="text" name="count"></td>
            </tr>
            <tr>
                <td align="right">地址:</td>
                <td><input type="text" name="factoryAdd"></td>
            </tr>
            <tr>
                <td align="center" colspan="2" height="40"><input type="submit"></td>
            </tr>
        </table>
    </form>
</body>
</html>

【index.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 让服务器传过来的request能识别中文 -->
<%request.setCharacterEncoding("UTF-8"); %>
<!-- id:使用这个JavaBean创建的一个对象名,相当于Produce produce = new Produce() -->
<jsp:useBean id="produce" class="my.model.Produce"></jsp:useBean>
<!-- 表单的属性名和JavaBean的属性名相同 -->
<jsp:setProperty property="*" name="produce"/>
<!-- param令表单中的price2就JavaBean中price -->
<jsp:setProperty property="price" name="produce"  param="price2"/>
<!-- 有一个就够了,这个没有用无效 -->
<jsp:setProperty property="*" name="produce"/>
<jsp:setProperty property="factoryAdd" name="produce" value="北京"/>
<div>
    <ul>
        <li>商品名称:<jsp:getProperty property="name" name="produce"/></li><!-- form中为name,结果NULL,因为表单数据名为name2 -->
        <li>价格:<jsp:getProperty property="price" name="produce"/></li><!-- form中为price2,结果正确 -->
        <li>数量:<jsp:getProperty property="count" name="produce"/></li><!-- form中为count,结果正确(推荐) -->
        <li>厂址:<jsp:getProperty property="factoryAdd" name="produce"/></li><!-- 结果为 北京 -->
    </ul>
</div>
</body>
</html>

【结果:】

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

客官,赏一瓶怡宝吧。

支付宝
微信