java web 开发——第五章JSP与JavaBean

系列文章目录


文章目录

  • 5.1 编写和使用JavaBean
  • 5.2 获取和修改bean的属性值
  • 5.3 bean的辅助类
  • 5.4 JSP与bean结合的简单例子


前言

本章难点为掌握如何获取和修改bean的属性


5.1 编写和使用JavaBean

5.1.1 编写JavaBean


编写JavaBean 就是编写一个Java的类,所以只要会写类就能编写一个JavaBean。 这个类创建的一个对象称为一个JavaBea#,简称 bean,分配给bean的变量(成员变量),也称bean 的属性。为了能让使用bean 的应用程序构建工具(比如Tomcat服务器)使用JSP动作标记知道 bean的属性和方法,在类的命名上需要遵守以下规则:
(1)如果类的成员变量(也称bean的属性)的名字是xxx,那么为了获取或更改bean的属性的值,类中必须提供两个方法:
getXxx(),用来获取属性xxx。setXxx(),用来修改属性xxx。
(2)类中定义的方法的适问权限都必须是public的。
(3)类中必须有一个构造方法是 public,无参数的。
 

5.1.2 保存bean的字节码


为了使JSP页面使用bean,Tomeat服务器必须使用相应的字节码文件创建一个对象,即创建一个bean 为了让Tomcat 服务器能找到字节码文件,字节码文必须保存在特定的目录中。
ch5 \WEB-INF\classes 目录下,根据包名对应的路径,在classes目录下再建立相应的子目录。例如,包名tom. jiafei对应的路径是tom\jiafei,那么在 classes目录下建立子目录结构tom\jiafei

将创建bean的字节码文件,例如Circle. class,复制到\WEB-INF\classes\ tom\jiafei 中为了调试程序方便,可以直接按照 bean的包名将 bean的源文件(例如Circle. java)保存在\WEB-INF\classes\tom\jiafei 目录中,然后用命令行进人tom\jiafei 的父目录classes(不要进人tom或jiafei 目录)编译Circle.java:

classes > javac tom\jiafei\Circle. java

5.1.3 创建和使用bean

  1. 使用bean

使用JSP动作标记useBean 加载使用bean,语法格式是:

<jsp:useBean id="bean的名字"class="创建bean的类”scope="bean有效范围“/>

<jsp:useBean id="bean的名字”class="创建bean的类”scope ="bean 有效范围”>
</jsp:useBean>

例如:

<jsp:useBean id="circle" class ="tom.jiafei. Circle" scope = page"/>

需要特别注意的是,其中的“创建bean的类”要带有包名,例如:

class= "tom. jiafei.Circle"

      2.bean 的加载原理

当JSP 页面使用JSP动作标记useBean加载一个bean时,Tomcat 服务器首先根据JSP的动作标记 useBean中id给出的bean名字以及 scope 给出的使用范围(bean 生命周期),在Tomcat 服务器管理的pageContent 内置对象中查找是否含有这样的bean(对象)。如果这样的bean(对象)存在,Tomcat 服务器就复制这个bean(对象)给JSP 页面,就是常说的Tomcat 服务器分配这样的bean给JSP 页面。 如果在pageContent 中没有查找到JSP动作标记要求的bean,就根据class指定的类创建一个bean,并将所创建的bean添加到pageContent中。通过Tomcat服务器创建bean可以看出,首次创建一个新的bean时需要用相应的字节码文件创建对象,当某些JSP页面再需要同样的bean时,Tomcat服务器直接将pageContent中已有的bean分配给JSP页面,从而提高JSP页面bean的使用效率。

注:如果修改了字节码文件,必须重新启动Tomcat服务器才能使用新的字节码文件。

    3.bean的有效范围和生命周期

(1) page bean。 scope 取值为page的 bean 称为page bean,page bean 的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。需要注意的是,不同用户(浏览器)的page bean 也是互不相同的。也就是说,当两个用户同时访问同一个JSP 页面时,一个用户对自己 page bean 的属性的改变,不会影响到另一个用户。


(2) session bean。 scope 取值为session的bean 称为 session bean, session bean的有效范
围是用户访问的Web服务目录下的各个页面,存活时间是用户的会话期(session)间,直到用户的会话消失(session对象达到了最大生存时间或用户关闭自己的浏览器以及服务器关闭,见4.3.1节)。也就是说,当两个用户同时访问同一个Web服务目录,一个用户对自己session bean属性的改变,不会影响到另一个用户(一个用户在不同Web服务目录的session bean互不相同)。


(3) request bean。 scope取值为 request 的bean称为request bean, request bean 的有效范围是用户道求的当前页面,存活时间是从用户的请求产生到请求结束。也就是说,当两个用户同时请求同一个JSP页面时,一个用户对自己request bean属性的改变,不会影响到另一个用户。

(4) application bean。 scope 取值为application的bean 称为application bean ,application bean 的有效范围是当前Web服务目录下的各个页面,存活时间直到Tomcat 服务器关闭。Tomcat 服务器为访问Web服务目录的所有用户分配一个共享的bean,即不同用户的application bean 也都是相同的一个。也就是说,任何一个用户对自己application bean 属性的改变,都会影响到其他用户(不同Web服务目录的application bean互不相同)。

5.2 获取和修改bean的属性

5.2.1 getProperty动作标记

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

getProperty 动作标记的语法格式是:

<jsp:getProperty name = "bean的id” property = "bean 的属性”/>

<jsp:getProperty name = “bean 的id"property="bean的属性”>

</jsp:getProperty >

其中,name 取值是bean的id,用来指定要获取哪个bean的属性的值,property取值是该bean的一个属性的名字。

注:让 request调用 setCharacterEncoding方法设置编码为UTF-8,以避免显示bean的属性值出现乱码现象。

5.2.2 setProperty动作标记

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

setProperty动作标记可以通过俩种方式设置bean的属性值。

 (1)将 bean属性值设置为一个表达式的值或字符序列。

<jsp;setProperty name="bean的id" property="bean的属性"

value="<%=expression%>"/>

<jsp:setProperty name="bean的id" property="bean的属性"

value="字符序列"/>

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

1.form 表单的所有参数值设置bean相对应属性值的使用格式如下:

<jsp:setProperty name = "bean的id的名字"property="*"/>

在setProperty 标记的上述用法中不具体指定)bean属性值将对应 form 表单中哪个参数指定的值,系统会自动根据名字进行匹配对应,但要求bean属性的名字必须在form表单币有名称相同的参数名字相对应,Tomcat服务器会自动将参数的字符串值转换为bean 相对应的属性值。

2.用form表单的某个参数的值设置bean的某个風性值的使用格式如下:

<jsp:setProperty name ="bean 的名字"property="属性名"paran="参数名”/>

setProperty 标记的上述用法具体指定bean属性值将对应表单中哪个参数名(param)指定的值,这种设置bean 的属性值的方法,不要求property给出的bean 属性的名字和param给出的参数名一致,即不要求bean属性的名字必须和表单中的某个参数名字相同。

5.3 bean的辅助类

在写一个创建bean的类时,除了需要用import 语句引人JDK提供的类,可能还需要自己编写一些其他的类,只要将这样类的包名和 bean类的包名一致即可(也可以和创建bean的类写在一个Java源文件中)。

在下面的例子中使用一个bean 列出Tomcat服务器驻留的计算机上某目录中特定扩展名文件。创建bean的ListFile类,需要一个实现FilenameFilter接口的辅助类FileExtendName,该类可以帮助bean列出指定扩展名的文件。

例子中使用ListFile类创建request bean。用户通过表单设置request bean的extends Name的属性值,request bean列出目录中由extendsName属性值指定的扩展名的文件。

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" %>
<%@ page pageEncoding = "utf-8" %> 
<% request.setCharacterEncoding("utf-8");
%>
<style>
   #textStyle{
      font-family:宋体;font-size:36;color:blue 
   }
</style>
<jsp:useBean id="file" class="tom.jiafei.ListFile" scope="request"/>
<HTML><body id=textStyle bgcolor = #ffccff>
<form action="" Method="post">
输入目录名(例如D:/2000)<input type=text name="dir" id=textStyle size=15/><br>
输入文件的扩展名(例如java)<input type=text name="extendsName" id=textStyle size=6>
<input type=submit id=textStyle value="提交"/>
</form>
<jsp:setProperty name="file" property="dir" param="dir"/>
<jsp:setProperty name="file" property="extendsName" param="extendsName"/>
<br><b>目录 <jsp:getProperty name="file" property="dir"/>中
 扩展名是 <jsp:getProperty name="file" property="extendsName"/> 的文件有:
<% String [] fileName = file.getAllFileName();
     if(fileName!=null) {
       for(int i=0;i<fileName.length;i++) {
          out.print("<br>"+fileName[i]); 
       } 
     }
%>
</body></HTML>

5.4 JSP与bean结合的简单例子

5.4.1 三角形bean

使用request bean(Triangle 类负责创建)完成三角形的有关数据的处理。例子中的JSP 页面提供一个form 表单,用户可以通过 form 表单将三角形三边的长度提交给该页面。用户提交form 表单后,JSP页面将计算三角形面积的任务交给一个 request bean 去完成。 

package red.star;
public class Triangle {
   double sideA=-1,sideB=-1,sideC=-1;
   String area;
   boolean isTriangle;
   public void setSideA(double a) {
      sideA=a;
   }
   public double getSideA() {
      return sideA;
   }
   public void setSideB(double b) {
      sideB=b;
   }
   public double getSideB() {
      return sideB;
   }
   public void setSideC(double c) {
      sideC=c;
   }
   public double getSideC() {
      return sideC;
   }
   public String getArea() {
      double p=(sideA+sideB+sideC)/2.0;
      if(isTriangle){
         double result= Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
         area = String.format("%.2f",result);//保留2位小数。
      }
      return area;
   }
   public boolean getIsTriangle(){
      if(sideA<sideB+sideC&&sideB<sideA+sideC&&sideC<sideA+sideB)
         isTriangle=true;
      else   
         isTriangle=false;
      return isTriangle;
   }
}
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<style>
   #textStyle{
      font-family:宋体;font-size:36;color:blue 
   }
</style>
<% request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="triangle" class="red.star.Triangle" scope="request"/>
<HTML><body id = textStyle bgcolor=#ffccff>
<form action="" method="post" >
输入三角形三边:
边A:<input type=text name="sideA" id = textStyle value=0 size=5/>
边B:<input type=text name="sideB" id = textStyle value=0 size=5/>
边C:<input type=text name="sideC" id = textStyle value=0 size=5/>
<br><input type=submit id = textStyle value="提交"/>
</form>
<jsp:setProperty name="triangle" property="*"/>
三角形的三边是:
<jsp:getProperty name="triangle" property="sideA"/>,
<jsp:getProperty name="triangle" property="sideB"/>,
<jsp:getProperty name="triangle" property="sideC"/>.
<br><b>这三个边能构成一个三角形吗?<jsp:getProperty name="triangle" property="isTriangle"/>
<br>面积是:<jsp:getProperty name="triangle" property="area"/></b>
</body></HTML>



总结

本章主要学习了如何编写和使用JavaBean,获取和修改bean的属性值,了解了bean的辅助类,学习了JSP与bean结合的简单例子。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值