栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JSP】JSP与JavaBean || 含举例实战

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JSP】JSP与JavaBean || 含举例实战

目 录

概述编写JavaBean

保存bean的字节码创建与使用bean

使用beanbean的加载原理bean的有效范围(生命周期) 获取和修改beans的属性

getProperty动作标记setProperty动作标记 beans的辅助类
代码和PPT见github,感谢star

概述

Javabean是一种Java类,
通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。

具有以下特点:

    可以实现代码的重复利用。易编写、易维护、易使用。可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。

JSP页面可以将数据的处理过程指派给一个或几个bean来完成,即JSP页面调用bean完成数据的处理,并将有关处理结果存放bean中.JSP页面可以使用Java程序片或某些JSP指令标记显示bean中的数据,

即JSP页面的主要工作是显示数据,不负责数据的逻辑业务处理


Javabean分为可视组件和非可视组件。

在JSP中主要使用非可视组件。对于非可视组件,我们不必去设计它的外观,主要关心它的属性和方法。

编写Javabean就是编写一个Java的类,所以只要会写类就能编写一个Javabean,这个类创建的一个对象称为一个Javabean,简称bean

编写JavaBean

为了能让使用这个bean的应用程序构建工具(比如JSP引擎)知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则:

    如果类的成员变量的名字是xxx,类中提供两个方法:
    getXxx(),用来获取属性xxx。
    setXxx(),用来修改属性xxx.。
    后缀是将成员变量名字的首字母大写的字符序列。对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用“is”代替上面的“get”和“set”。类中声明的方法的访问属性都必须是public的。类中需提供public、无参数的构造方法

package tom.jiafei;
public class Circle {
    double radius;
    public Circle() {
       radius=1;
    }
    public double getRadius() {
       return radius;
    }
    public void setRadius(double newRadius) {
       radius=newRadius;
    }
    public double circleArea() {
       return Math.PI*radius*radius;
    }
    public double circlLength() {
       return 2.0*Math.PI*radius;
    }
}

保存bean的字节码

在当前Web服务目录下建立子目录结构:WEB-INFclasses,然后根据类的包名,在classes下再建立相应的子目录,比如类的包名为tom.jiafei,那么在classes下建立子目录结构:tomjiafei

将创建bean的字节码文件,比如Circle.class,复制到“WEB-INFclassestomjiafei”中

创建与使用bean 使用bean

使用JSP动作标记:useBean
加载使用Bean
语法格式:

或者


...
...

例如:

bean的加载原理

当JSP页面使用JSP需要使用一个bean时,JSP引擎将首先根据JSP动作标记给出的bean的id,以及scope,查找JSP引擎内置pageContent对象中是否含有这样的bean,如果这样的bean存在,JSP引擎就分配这样的bean给用户。

如果在pageContent中没有查找到JSP动作标记要求的bean,就根据class指定的字节码创建一个JSP动作标记要求的bean,并将所创建的bean添加到pageContent内置对象中。

bean的有效范围(生命周期)

scope取值范围给出了bean的存活时间(生命周期),即scope取值决定了JSP引擎分配给用户的bean的存活时间

page
有效范围是当前页面.不同用户的scope取值是page的bean也是互不相同的.request
bean的有效范围是request期间。不同用户的scope取值是request的bean也是互不相同的session
有效范围是用户的session(会话)期间。不同用户(即不同浏览器)的scope取值是session的bean是互不相同的(占有不同的内存空间)application
bean的有效范围是application期间。JSP引擎为Web服务目录下所有的JSP页面分配一个共享的bean,不同用户的scope取值是application的bean也都是相同的一个.

举例

例子1中,负责创建bean的类是上述的Circle类,创建的bean的名字是circle, circle的scope取值是page。example4_1.jsp的效果如图4.3所示。

<%@ page contentType="text/html;charset=GB2312" %>

   
   <%--通过上述JSP标记,用户获得了一个作用域是page,名字是circle的bean --%>
   

圆的初始半径是:<%=circle.getRadius()%> <% double newRadius =100; circle.setRadius(newRadius); //修改半径 %>

修改半径为<%= newRadius %>
目前圆的半径是:<%=circle.getRadius()%>
圆的周长是:<%=circle.circlLength()%>
圆的面积是:<%=circle.circleArea()%>



例子2使用scope取值为session,id为girl的bean,创建该bean的类文件仍然是上述的Circle.class。

例子2的example4_2_a.jsp页面中,girl的半径radius的值是1(图4.4).

然后连接到example4_2_b.jsp页面,显示半径radius的值,然后将girl的半径radius的值更改为99(图4.5),那么以后再刷新example4_2_a.jsp或example4_2_b.jsp时看到的bean的radius的值就都是99了(图4.6)

example4_2_a.jsp

<%@ page contentType="text/html;charset=GB2312" %>

   <%--通过JSP标记,用户获得一个作用域是session,id是girl的bean: --%>
   
 
这里是example4_2_a.jsp页面
圆的半径是: <%=girl.getRadius()%>
example4_2_b.jsp
******************************************************************************** example4_2_b.jsp <%@ page contentType="text/html;charset=GB2312" %> <%--通过JSP标记,用户获得一个作用域是session,id是girl的bean: --%>
这里是example4_2_b.jsp页面
当前圆的半径是: <%=girl.getRadius()%> <% girl.setRadius(99); //修改radius值 %>
修改后的圆的半径是:<%=girl.getRadius()%>

example4_2_a.jsp




例子3中example4_3.jsp将bean的scope的值设为application。当第一个用户访问这个页面时,显示bean的radius的值,然后把radius的值修改为1000(图4.7)。当其他用户访问这个页面时,看到的radius的值都是1000(图4.8)。

<%@ page contentType="text/html;charset=gb2312" %>

 
  圆的初始半径是:<%=boy.getRadius()%>
  <% boy.setRadius(1000);
  %>
 
修改后的圆的半径是:<%=boy.getRadius()%>

获取和修改beans的属性

JSP页面使用getProperty、setProperty标记获取或修改属性xxx时,必须保证bean有相应的getXxx和setXxx方法,

即对方法的名字的命名有特殊的要求,

而在程序片中直接用bean调用方法就不需要方法命名遵守getXxx和setXxx规则

getProperty动作标记

使用getProperty动作标记可以获得bean的属性值,并将这个值用串的形式发送给用户的浏览器。
使用getProperty动作标记之前,必须使用useBean动作标记获得相应的bean。


......

该指令相当于Java表达式:
<%= bean.getXxx() %>



setProperty动作标记

使用setProperty动作标记可以设置bean的属性值。使用这个标记之前,必须使用useBean标记得到一个相应的bean。

将bean属性的值设置为一个表达式的值或字符串

将bean属性的值设置为一个表达式的值的语法格式

将bean属性的值设置为一个字符串语法格式


通过HTTP表单的参数的值来设置bean的相应属性的值

用HTTP表单的所有参数的值设置bean相对应的属性的值

用HTTP表单的某个参数的值设置bean的某个属性的值

Student.java

package tom.jiafei;
public class Student  {
   String name=null;
   double height;
   public String getName() {
      return name;
   }
   public void setName(String newName){
      name=newName;
   }
   public double getHeight() {
      return height;
   }
   public void setHeight(double newHeight) {
      height=newHeight;
   }
}

举例1

<%@ page contentType="text/html;charset=gb2312" %>



 学生姓名:


学生身高:

<%-- a--%>

<%@ page contentType="text/html;charset=gb2312" %>


  
手机名称:
手机价格:
<%-- 指向到b页面--%>
手机名称:
手机价格:
<%-- 设置set的值,再get设置的值--%>
名称:
价格:
*************************************************************** <%-- b--%> <%@ page contentType="text/html;charset=gb2312" %>
名称:
价格:

beans的辅助类

有时在写一个bean的时候,除了需要用import语句引入JDK平台提供的类,可能还需要其它自己编写的一些类。

那么只要将这些类和创建bean的类写在一个java源文件中即可,但必须将源文件编译后产生的全部字节码文件复制到相应的目录中

package tom.jiafei;
import java.io.*;
class FileExtendName implements FilenameFilter {
   String str=null;
   FileExtendName (String s) {
      str="."+s;
   }
   public  boolean accept(File dir,String name) {
      return name.endsWith(str);
   }              
}
public class ListFile {
   String extendsName=null;
   String [] allFileName=null; 
   String dir=null;
   public void setDir(String dir) {
      this.dir =dir;
   }
   public String getDir() {
      return dir;
   }
   public void setExtendsName(String s) {
      extendsName=s;
   }
   public String getExtendsName() {
      return extendsName;
   }
   public String [] getAllFileName() {
      if(dir!=null) {
        File mulu=new File(dir);
        FileExtendName help=new FileExtendName(extendsName);
        allFileName=mulu.list(help);
      }
      return allFileName;
   }  
}


<%@ page contentType="text/html;charset=gb2312" %>


输入目录名,例如:D:/2000
输入文件的扩展名,例如:java

目录 中 扩展名是 的文件有: <% String [] fileName = file.getAllFileName(); if(fileName!=null) { for(int i=0;i"+fileName[i]); } } %>
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号