JSP与Java Bean

Java Bean基本概念

首先了解软件设计分层概念,在开发软件过程中,应尽量将业务逻辑和表现层分开,从而达到完全解耦。经常使用javabean去实现业务逻辑,而jsp页面去用于表现层。jsp页面只用于接收用户的输入以及显示处理之后的结果,不需要在jsp页面嵌入大量的java代码。
javabean的特性
1.支持反射机制:利用反射机制可以分析出javabean是如何运行的。
2.支持事件:事件是一种简单的通信机制,利用它将相应的信息通知给javabean
3.支持属性:自定义属性,利用标准标签与jsp页面交互数据
4.支持持久性:持久性指可以将javabean进行保存,在需要时重新载入
创建javabean的基本结构

public class test implements Serializable {
    private String test_id;
    private String test_name;
    private double price;
    private String info;
    public test(){
        super();
    }

    public String getTest_id() {
        return test_id;
    }

    public void setTest_id(String test_id) {
        this.test_id = test_id;
    }

    public String getTest_name() {
        return test_name;
    }

    public void setTest_name(String test_name) {
        this.test_name = test_name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

1.JavaBean类必须是public类
2.提供给jsp页面调用的方法,必须赋予public访问权限
3.JavaBean类中属性,提供给jsp页面调用时必须提供public的get和set方法
4.必须拥有不带参数构造方法

JSP中使用JavaBean

首先注意:
1.要按照规范定义Bean类,并给出类属性的相应get和set方法
2.在页面中要导入相应的Bean类
3.在JSP页面中利用jsp:useBean标签使用bean类
对于Bean的Class文件部署在Web服务器的工共目录中;

属性值说明
idBean的变量名,可以在指定的范围中使用该变量名
classBean的类路径
scopeBean的有效范围,取值page,request,session,application
beanName实例化的类名称或序列化模板的名称,指定的名称可以为其接口,父类
type指定其父类或接口模型,例如想实例化HsahMap,但是type可以填为Map

在使用jsp:useBean标签注意
1.class或beanName不能同时存在;若javaBean对象已经存在,class和beanName属性可以不指定,只需指定type属性
2.class可省去type独立使用,但beanName必须和type一起使用
3.class指定的类必须包含public,无参的构造方法。
4.class或beanName指定的类必须包括包含名称,而type可以 省去包名,通过<%@page import = " "%>指定所属包
class通过new创建javaBean对象,beanName由java.beans.Beans.instantiate初始化JavaBean对象
jsp:useBean标签中Bean的作用域四个:page,request,session,application。 jsp引擎会根据作用域给用户分配不同的Bean,运行多个用户拥有相同的Bean,每个客户的Bean是相互独立的。
1.request:针对同一个用户的不同请求,给用户分配不同的Bean对象
Bean的生命周期就是从客户请求开始到响应结束这段时间。
2.page:针对不同的页面,给用户分配不同的Bean对象,客户进入当前页面是会分配一个对象,当用户离开当前页面时,取消分配的Bean对象。Bean生命周期就位于当前页
3.session:针对同一用户访问同一web项目下的不同页面时,会分配给用户不同的Bean对象。当用户离开Web目录时,取消分配的Bean对象,该Bean的生命周期是Web项目的一个session时间
4.application:为访问用户分配同一个Bean对象,生命周期就是Web应用的存在时间,Web应用的服务器中存在的时间。

访问Bean属性

标签:
jsp:setProperty使用该标签可以设置Bean的属性值
1.使用字符串或表达式给Bean属性赋值,表达式的值与Bean属性的值类型相同
2.使用表单参数形式给Bean属性赋值,表单中提供的参数名字与Bean属性的名字相同。
3.使用表单参数值给Bean赋值,要求表单中提供的参数名字必须与jsp:setProperty标签中的param属性值名字相同。
jsp:getProperty使用该标签用来获得Bean属性

Bean的作用域

1.演示Bean的request生命周期

//Bean类
public class circle implements Serializable {
    private double radius = 1.0d;
    private double circleArea = 0.0d;//面积
    private double circum = 0.0d;//周长
    public circle(){
        super();
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getCircleArea() {
        circleArea = Math.PI*radius*radius;
        return circleArea;
    }

    public void setCircleArea(double circleArea) {
        this.circleArea = circleArea;
    }

    public double getCircum() {
        circum = 2*Math.PI*radius;
        return circum;
    }

    public void setCircum(double circum) {
        this.circum = circum;
    }
}
//request.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,until9javabean.circle" %>
<!--导入bean-->
<jsp:useBean id="circle" class="until9javabean.circle" scope="request"/>
<html>
<head>
    <title>Bean的request生命周期</title>
    <!--1.对于Bean的request生命周期对于每次的请求,在页面上显示的bean对象名不一样
        2.对于提交的内容进行请求,若为空则设置为1
    -->
</head>
<%
    String radius = request.getParameter("radius");
    if (radius==null||radius.equals("")){
        radius = "1";
    }
    double rad = Double.parseDouble(radius);
    circle.setRadius(rad);
%>
<body>
    <form action="" method="post">
        输入圆的半径:<input type="text" name="radius"/><br/>
        <input type="submit" name="提交"><br/>
        该Bean的对象为<%=circle.toString()%><br/>
        圆的半径:<jsp:getProperty name="circle" property="radius"/><br/>
        圆的周长:<jsp:getProperty name="circle" property="circum"/><br/>
        圆的面积:<jsp:getProperty name="circle" property="circleArea"/>
    </form>
</body>
</html>

2.Bean的page生命周期
Bean类相同

//page_scope.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="until9javabean.circle,java.util.*" %>
<jsp:useBean id="circle" class="until9javabean.circle" scope="page"/>
<!--
1.该页面进行半径设置并观察该页面的bean对象
2.使用跳转到下一个页面,观察下一个页面的bean对象的值和半径有所不同
-->
<html>
<head>
    <title>Bean的page生命周期</title>
</head>
<body>
    该Bean类对象:<%=circle.toString()%><br/>
    设置该Bean的半径为20:
    <%
        circle.setRadius(20);
    %>
    圆的半径:<jsp:getProperty name="circle" property="radius"/><br/>
    圆的周长:<jsp:getProperty name="circle" property="circum"/><br/>
    圆的面积:<jsp:getProperty name="circle" property="circleArea"/><br>
    <form action="page_scope1.jsp" method="post">
        <input type="submit" name="跳转">
    </form>
</body>
</html>
//page_scope1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="until9javabean.circle,java.util.*" %>
<jsp:useBean id="circle" class="until9javabean.circle" scope="page"/>
<html>
<head>
    <title>bean的page生命周期</title>
</head>
<body>
    该Bean类对象:<%=circle.toString()%><br/>
    圆的半径:<jsp:getProperty name="circle" property="radius"/><br/>
    圆的周长:<jsp:getProperty name="circle" property="circum"/><br/>
    圆的面积:<jsp:getProperty name="circle" property="circleArea"/><br>
</body>
</html>

3.Bean的session生命周期与page生命周期相同,只需要将scope改为session。显示效果就是,同一个用户情况下是,是引用的是同一个Bean对象,所以两次跳转的属性值,也是相同的。
4.Bean的application生命周期对于显示效果就是,先获取系统默认的数据,刷新一次之后数值变换,但是对象没有改变,说明引用的是同一个对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值