Java Web开发——第五章JSP和JavaBean

前言

本章为《JSP实用教程》第四版 耿祥义 张跃平主编
软件版本号为:

Tomcat:9.0
Java:jdk13

5.1 编写和使用JavaBean

5.1.1 编写JavaBean

编写 JavaBean 就是编写一个 Java 的类。JavaBean。这个类创建的一个对象称为一个JavaBean , 简称 bean ,分配给 bean 的变量(成员变量) ,也称 bean 的属性。为了能让使用 bean 的应用程序构建工具(比如 Tomcat 服务需)使用JSP 动作标记知道 bean 的属性和方法,在类的命名上需要遵守以下规则 :
(1) 如果类的成员变量(也称 bean 的属性)的名字是 xxx,那么为了获取或更改 bean 的属
性的值,类中必须提供两个方法 :

getxxx() ,用来获取属性 xxx。

setxxx() ,用来修改属性 xxx。

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

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

(3) 类中必须有一个构造方法是 public 无参数的。

注意:保存 Java 源文件时,保存类型选择为“所有文件” ,将编码选择为“ANSI”。

5.1.2 保存bean的字节码

为了使 JSP 页面使用 bean,Tomcat 服务器必须使用相应的字节码文件创建一个对象,即创建一个bean。为了让 Tomecat 服务器能找到字节码文件,字节码文件必须保存在特定的目录中。
ch5 \WEB-INF\classes 目录下,根据包名对应的路径 ,在 classes 目录下再建立相应的子目录。
为了调试程序方便,可以直接按照 bean 的包名将 bean 的源文件(例如 Circle. java) 保存在\WEB-INF\classes\tom\jiafei 目录中,然后用命令行进入 tom\jiafei 的父目录 classes(不要进入tom 或jiafei 目录)编译 Circle. java

5.1.3 创建与使用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. jiafeli. Circle” scope =“page” />

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

class = “tom. jiafei.Circle”

bean的有效范围和生命周期

scope 的取值范围给出了bean 的生命周期(存活时间) ,即 scope 取值决定了 Tomcat 服务器分配给用户的 bean 的有效范围和生命周期 ,因此需要理解 scope 取值的具体意义。

(1) page bean。scope 取值为 page 的 bean 称为 page bean,page bean 的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。
(2) session bean。scope 取值为 session 的 bean 称为
session bean session bean 的有效范围是用户访问的 Web服务目录下的各个页面,存活时间是用户的会话期(session)间 ,直到用户的会话消失(session对象达到了最大生存时间或用户关闭自己的剂览需以及服务器关闭)
(3) request bean。scope 取值为 request 的bean 称为 request bean ,request bean 的有效范围是用户请求的当前页面,存活时间是从用户的请求产生到请求结束。
(4) application bean。scope 取值为application 的 bean 称为 application bean,application bean 的有效范围是当前 Web服务目录下的各个页面,存活时间直到 Tomcat 服务需关闭。

注意:当使用 session bean 时,要保证用户端支持 Cookie。

5.2 获取和修改bean的属性

当JSP 页面使用 getProperty ,setProperty 标记获取或修改属性 xxx 时,必须保证 bean 有相应的getXxx 和 setXxx 方法,即对方法名字的命名有特殊的要求。下面讲述怎样使用JSP 的动作标记 getProperty setProperty 去获取和修改 bean 的属性。

5.2.1 getProperty动作标记

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 属性值。
(1) 将 bean 属性值设置为一个表达式的值或字符序列。

< jsp:setProperty name = "bean 的 id " property = “bean 的属性” value = “<% = expression%>”/>
< jsp:setProperty name = "bean 的 id " property =“bean 的属性” value = “字符序列”/>

value 给出的值的类型要和 bean 的属性的类型一致。
(2) 通过 HTTP 表单的参数值来设置 bean 的相应属性值。
用 form 表单的所有参数值设置 bean 相对应属性值的使用格式如下 :

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

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

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

5.3 bean的辅助类

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

5.4 JSP与bean结合的简单例子

5.4.1 三角形bean

Triangle.java

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;
   }
}

example5_6.jsp

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

ComputerBean.java

package red.star;
public class ComputerBean {
   double numberOne,numberTwo,result;
   String operator="+";
   public void setNumberOne(double n) {
      numberOne=n;
   }
   public double getNumberOne() {
      return numberOne; 
   }
   public void setNumberTwo(double n) {
      numberTwo=n;
   }
   public double getNumberTwo() {
      return numberTwo; 
   }
   public void setOperator(String s) {
      operator=s.trim();
   }
   public String getOperator() {
      return operator;
   }
   public double getResult() {
      if(operator.equals("+"))
          result=numberOne+numberTwo;
      else if(operator.equals("-"))
          result=numberOne-numberTwo;
      else if(operator.equals("*"))
          result=numberOne*numberTwo;
      else if(operator.equals("/"))
          result=numberOne/numberTwo;
      return result; 
   }
}

example5_7.jsp

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

运行结果
在这里插入图片描述

总结

欢迎指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值