JSP 与Java bean

目录

前言

5.1 编写Javabean和使用Javabean

5.1.1编写Javabean

5.1.2 保存bean的字节码

5.1.3 创建与使用bean

1.使用bean

2.bean的加载原理

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

5.2 获取和修改bean的属性

5.2.1 getProperty动作标记

5.2.2 setProperty动作标记

5.3 bean的辅助类

5.4 JSP与bean结合的简单例子

5.4.1 三角形bean

5.4.2 四则运算bean

5.4.3 浏览图像 bean

5.4.4 日历bean

5.4.5 计数器bean

 总结


前言

        JSP(Java Server Pages)是一种基于Java技术的动态网页开发技术,它允许开发人员将Java代码嵌入到HTML页面中,从而实现动态生成网页的功能。而Java bean则是一种Java类,它具有一些特殊的属性和方法,可以被JSP页面调用,从而实现更加灵活的动态网页开发。本文将详细介绍JSP和Java bean的相关知识。

5.1 编写Javabean和使用Javabean

JSP页面可以将数据的处理过程指派给一个或几个bean来完成,即JSP页面调用这些bean完成数据的处理,并将有关处理结果存放到bean中,然后JSP页面负责显示bean中的数据。

5.1.1编写Javabean

编写Javabean就是编写一个Java的类,所以只要会写类就能编写一个Javabean。这个类创建的一个对象称为一个Javabean,简称bean,分配给bean的变量(成员变量),也称bean的属性。为了能让使用bean的应用程序构建工具(比如Tomcat服务器)使用JSP动作标记知道bean的属性和方法,只须在类的方法命名上遵守以下规则:

1)如果类的成员变量,也称bean的属性的名字是xxx,那么为了获取或更改bean的属性的值,类中必须提供两个方法:

getXxx(),用来获取属性xxx

setXxx(),用来修改属性xxx.

也就是方法的名字用getset为前缀,后缀是将属性(成员变量)名字的首字母大写的字符序列

2)类中定义的方法的访问权限都必须是public的。

3)类中定义的构造方法必须是public、无参数的。

5.1.2 保存bean的字节码

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(不要进入tomjiafei目录)编译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"

2bean的加载原理

          Tomcat服务器首先在Tomcat服务器管理的pageContent内置对象中查找是否含有这样的bean如果这样的bean存在Tomcat服务器就分配这样的bean给用户,如果在pageContent没有查找到JSP动作标记要求的bean,就根据class指定的类创建一个bean,并将所创建的bean添加到pageContent。通过Tomcat服务器创建bean的过程可以看出,首次创建一个新的bean需要用相应类的字节码文件创建对象,当某些JSP页面再需要同样的bean时,Tomcat服务器直接将pageContent中已经有的bean分配给JSP页面,提高了JSP使用bean的效率。

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

page bean

scope取值为pagebean称为page bean.

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

page bean的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。

不同用户(浏览器)的page bean互不相同的。也就是说,当两个用户同时访问一个JSP页面时,一个用户对自己page bean的属性的改变,不会影响到另一个用户。

例子5_1中负责创建page bean的类Circle类,page bean的名字是circle

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<style>
   #textStyle{
      font-family:宋体;font-size:36;color:blue 
   }
</style>
<HTML><body bgcolor = #ffccff>
<p id = "textStyle">
<jsp:useBean id="circle" class="tom.jiafei.Circle" scope="page" />
<%--通过useBean标记,获得有效期限是page,名字是circle的bean --%>
圆的初始半径是:<%=circle.getRadius()%>
<%  double newRadius =100;  
    circle.setRadius(newRadius);   //修改半径。
%>
<br>修改半径为<%= newRadius %>
<br><b>圆的半径是:<%=circle.getRadius()%>
<br><b>圆的周长是:<%=circle.circleLength()%>
<br><b>圆的面积是:<%=circle.circleArea()%>
</p></body></HTML>

 

 

5.2 获取和修改bean的属性

使用useBean动作标记获得一个bean后,在Java程序片或表达式中bean就可以调用方法产生行为,如前面的例子5_1~5_3所示,这种情况下,不要求创建bean的类准守setXxxgetXxx等规则

5.2.1 getProperty动作标记

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

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

<jsp:getProperty  name="beanid "  property="bean的属性">

</jsp:getProperty>

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

JSP页面使用getProperty标记获取属性xxx的值时,必须保证bean有相应的getXxx方法,即对方法的名字的命名有特殊的要求。

5.2.2 setProperty动作标记

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

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

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

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

                                                                  value= "字符序列" />

value给出的值的类型要和bean的属性的类型一致。

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

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

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

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

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

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

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

5.3 bean的辅助类

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

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

<%@ 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 JSPbean结合的简单例子

          JSP页面中调用bean可以将数据的处理从页面中分离出来,实现代码复用,以便更有效地维护一个Web应用。

         在本节中,创建bean的类的包名都是red.star,使用的Web服务目录仍然是ch5,因此,需要在ch5下建立如下的目录结构:

ch5\WEB-INF\classes\red\star

       创建bean的字节码文件都需要保存在上述目录中。为了调试程序方便,可以直接按照创建bean的类的包名将相应的Java源文件保存在Web服务目录的相应目录中,比如将Java源文件保存在Web服务目录ch5WEB-INF\classes\red\star目录中,然后使用MS-DOS命令行进入\red\star的父目录classes,如下编译Java源文件:

classes> javac red\star\源文件名

5.4.1 三角形bean

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

<%@ 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>

 

 

5.4.2 四则运算bean

例子5_7使用session beanCompuerBean类负责创建)完成四则运算。例子中的JSP页面提供一个form表单,用户可以通过form表单输入两个数,选择四则运算符号提交给该页面。用户提交form表单后,JSP页面将计算任务交给session bean去完成

<%@ 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="computer" class="red.star.ComputerBean" scope="session"/>
<HTML><body id = textStyle bgcolor=#ffccff>
<jsp:setProperty name="computer" property="*"/>
<form action="" method=post >
   <input type=text name="numberOne" id = textStyle size=6/>
   <select name="operator" id = textStyle >
       <option value="+" id = textStyle>+
       <option value="-" id = textStyle>-
       <option value="*" id = textStyle>*
       <option value="/" id = textStyle>/
   </select> 
   <input type=text name="numberTwo" id = textStyle size=6/>
    <br> <input type="submit" value="提交" id = textStyle "/>
</form> 
<b>
<jsp:getProperty name="computer" property="numberOne"/> 
<jsp:getProperty name="computer" property="operator"/>  
<jsp:getProperty name="computer" property="numberTwo"/> =
<jsp:getProperty name="computer" property="result"/></b>
</body></HTML>

 

 

5.4.3 浏览图像 bean

例子5_8中的JSP页面通过单击超链接“下一张”或“上一张”浏览图像,JSP页面将获取图像名字的任务交给session bean去完成,JSP页面根据bean获得的图像名字显示图像。

<%@ 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="play" class="red.star.Play" scope="session" />
<%
    String webDir = request.getContextPath();//获取当前Web服务目录的名称
    webDir = webDir.substring(1); //去掉名称前面的目录符号:/
%>
<jsp:setProperty  name="play" property="webDir" value="<%= webDir %>"/> 
<jsp:setProperty  name="play" property="index"  param = "index" /> 
<HTML><body bgcolor = cyan><p id = textStyle>
<image src = 
 image/<jsp:getProperty name="play" property="showImage"/> width =300 height =200>
</image><br> 
<a href ="?index=<%=play.getIndex()+1 %>">下一张</a>
<a href ="?index=<%=play.getIndex()-1 %>">上一张</a>
</p></body></HTML>

 

 

5.4.4 日历bean

例子5_9使用session beanCalendar类负责创建)显示某月的日历。用户单击“下一月”,“上一月”超链接可以翻阅日历。也可以输入年份,选择月份,单击 form表单中的提交键查看日历。

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<style>
   #textStyle{
      font-family:宋体;font-size:18;color:blue 
   }
</style>
<% request.setCharacterEncoding("utf-8");
%>
<HTML><body id = textStyle bgcolor = #ffccff>
<jsp:useBean id="calendar" class="red.star.Calendar" scope="session" />
<jsp:setProperty  name="calendar" property="year"   param = "year"/> 
<jsp:setProperty  name="calendar" property="month"  param = "month" /> 
<jsp:getProperty  name="calendar" property="year" /> 年
<jsp:getProperty  name="calendar" property="month" />月的日历:<br>
<jsp:getProperty  name="calendar" property="saveCalender" /> 
<br><a href ="?month=<%=calendar.getMonth()+1 %>">下一月</a>
<a href ="?month=<%=calendar.getMonth()-1 %>">上一月</a>
<form action="" method = get >
输入年份<input type=text name="year"  id = textStyle  size=6 />
选择月份 <select name="month" id = textStyle size =1>
  <option value="1">1月</option>
  <option value="2">2月</option>
  <option value="3">3月</option>
  <option value="4">4月</option>
  <option value="5">5月</option>
  <option value="6">6月</option>
  <option value="7">7月</option>
  <option value="8">8月</option>
  <option value="9">9月</option>
  <option value="10">10月</option>
  <option value="11">11月</option>
  <option value="12">12月</option>
</select><br> 
<input type="submit" value="提交" id = textStyle "/>
</form> 
</body></HTML>

 

 

 

5.4.5 计数器bean

例子5_10使用application beanComputerCount类负责创建)记录Web服务目录被访问的次数。只要用户第1次访问(用户的session被创建)Web服务目录,那么当前Web服务目录的访问计数就增加1。如果用户的session没有消失,用户再访问当前Web服务目录,访问的计数不再增1

 

 总结

JSP和Java bean是Java技术中非常重要的两个组成部分,它们可以结合使用,实现更加灵活和方便的动态网页开发。本文介绍了JSP和Java bean的基本原理和结合应用,希望对读者有所帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值