jsp与javaBean

一个JSP页面通过使用HTML标记为用户显示数据(静态部分),页面中变量的声明、程序片以及表达式为动态部分,对数据进行处理。如果Java程序片和HTML标记大量掺杂在一起使用,就不利于JSP页面的扩展和维护。JSP和JavaBean技术的结合不仅可以实现数据的表示和处理分离,而且可以提高JSP程序代码重用的程度,是JSP编程中常用的技术。
——JavaBean


jsp与javaBean



 

01


编写 JavaBean

Javabean是一个可重复使用的软件组件,是遵循一定标准,用Java语言编写的一个类,该类的一个实例称为JavaBean,简称bean

JavaBean具有可重用,升级方便,不依赖于平台等特点,为了让jsp引擎知道这个bean的属性和方法,JavaBean类必须遵从如下规则

(1)如果成员变量的名字是name,类中必须要有方法getName() (获取属性) 和setName() (修改属性)方法  (如果是boolean类型的成员变量,允许使用is代替get和set)

(2)类中方法的权限必须是public(如果不是则jsp页面不可访问)

(3)构造方法必须无参数

//必须含有包名package com.bean;public class Rectangle { private double length; private double width; //构造方法无参数 public Rectangle(){  length=20; width=10; } //Getters Setters public double getLength(){  return length; } public void setLength(double length){  this.length = length; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } //方法 public double computerArea(){ return length*width; } public double computerLength(){ return (length+width)*2; }}

JavaBean 可以在任何Java程序编写环境下完成编写,再通过编译成为一个字节码文件,为了让JSP引擎(比如 Tomcat)找到这个字节码,必须把字节码文件放在特定的位置。使用 Eclipse 集成环境开发JSP程序,Java类的字节码文件由 Eclipse 自动保存到Web工程的 build\classes中。

jsp与javaBean


02


jsp使用javaBean


在jsp页面中使用bean时,首先使用page指令的import属性导入创建的bean类 如

<%@page import=”com.bean.*”%>

动作标记useBean

格式

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

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

useBean标记各属性含义

属性名                                          描述
id 指定该JavaBean实例的变量名,通过id可以访问这个实例
class

指定JavaBean的类名。如果需要创建一个新的实例,Web容器会使用class指定的类,并调用无参数的构造方法来完成实例化

scope

JavaBean的作用范围,包括page、request、session 和 application.缺省值为page,表明此 JavaBean 只能应用于当前页;值;request 表明此 JavaBean 只能应用于当前的请求;session 表明此 JavaBean能应用于当前会话; application 则表明此 JavaBean 能应用于整个应用程序

type

通常在查找已存在的JavaBean时使用,这时使用type将不会

产生新的对象。如果是查找已存在的JavaBean对象,type属性的值可以是此对象的准确类名、其父类或者其实现的接口;如果是新建实例,则只能是准确类名或者父类。另外,如果能够确定此JavaBean的对象肯定存在,则指定type属性后可以省略class属性

当含有 useBean 动作标记的JSP页面被Web容器加载执行时,Web容器首先根据id的名字,在pageContent 内置对象中查看是否含有名字为id和作用域为scope的对象;如果该对象存在,Web容器就将这个对象的副本(bean)分配给JSP页面使用;如果没有找到,就根据class 指定的类创建一个名字是id的bean,并添加到 pageContent 对象中,同时将这个bean分配给JSP页面使用。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%--导入bean所在的包 --%><%@page import="com.bean.Rectangle"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%--动作标记usebean --%><jsp:useBean id="rectangle" class="com.bean.Rectangle" scope="page"/><p>矩形的周长<%=rectangle.computerLength() %></p></body></html>

getProperty动作标记


JavaBean 的实质是遵守一定规范的类所创建的对象,可以通过两种方式获取 bean的属性。

①在Java程序片或表达式中,使用bean对象调用getXxx()方法获取bean的属性

先通过<jsp:useBean>标记获得一个bean,再通过<jsp:getProperty>标记获取bean的属性值。

格式:

<jsp:getProperty name=”bean的名字” property=”bean属性”/>或

<jsp:getProperty name=”bean名字” property=”bean的属性”/></jsp:getProperty>

其中,name取值是bean的名字,与useBean标记中的id对应:property 取值是bean的一个属性名字,与创建该bean的类的成员变量名对应。这条指令相当于在Java表达式中使用bean 的名字调用 getXxx()方法

:创建bean的源文件 NewRectangle.java.该bean 的作用是计算矩形的面积和周长。编写一个JSP页面 useGetProperty.jsp,在该JSP页面中使用 useBean 标记创建一个名字是pig的bean,并使用 getProperty 动作标记获得pig的每个属性值。负责创建pig 的类是NewRectangle类

package com.bean;
public class NewRectangle { double length; double width; double rectangleArea; double rectangleLength;
public NewRectangle() { length = 20; width = 10; }
public double getLength() { return length; }
public void setLength(double length) { this.length = length; }
public double getWidth() { return width; }
public void setWidth(double width) { this.width = width; }//计算面积和周长 public double getRectangleArea() { return length * width; }
public double getRectangleLength() { return 2 * (width + length); }}

useGetProperty.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ page import="com.bean.NewRectangle"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>useGetProperty.jsp</title></head><body> <jsp:useBean id="pig" class="com.bean.NewRectangle" scope="page"/> <%--设置长度和宽度 --%> <%pig.setLength(30);%> <%pig.setWidth(20);%> <%--获取属性 --%> <p>矩形的长是:<jsp:getProperty property="length" name="pig"/> <p>矩形的宽是:<jsp:getProperty property="width" name="pig"/> <p>矩形的面积是:<jsp:getProperty property="rectangleArea" name="pig"/> <p>矩形的周长是:<jsp:getProperty property="rectangleLength" name="pig"/></body></html>

jsp与javaBean


setProperty动作标记

除了在Java程序片中使用bean对象调用setXxx()方法修改bean的属性值外,我们还可以使用 setProperty 动作标记修改bean的属性值。使用该动作标记之前,必须事先使用useBean 动作标记获得一个相应的bean.使用setProperty动作标记进行 bean 属性值的设置有三种方式。


1.表达式或字符串设置

1)用表达式设置bean的属性

<jsp:setProperty name=”bean的名字” property=”bean的属性” value=”<%=expression>”/>

2)用字符串设置bean的属性

<jsp:setProperty name=”bean的名字” property=”bean的属性” value=”字符串”/>

注:用表达式修改bean属性值时,表达式值的类型必须与bean的属性类型一致。用字符串修改bean属性值时,字符串会自动转化为bean的属性类型,不能转化成功的可能会抛出NumberFormatException异常

package com.bean;
public class Car { //两个属性 String tradeMark; String number; public String getTradeMark() { return tradeMark; } public void setTradeMark(String tradeMark) { this.tradeMark = tradeMark; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; }}

car.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ page import="com.bean.Car"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>car.jsp</title></head><body> <jsp:useBean id="smallCar" class="com.bean.Car" scope="page"/> <% String carNo = "京A8888"; %> <%--使用(使用字符串)setProperty标记设置smallCar的属性 tradeMark值为"宝马X6"--%> <jsp:setProperty property="tradeMark" name="smallCar" value="宝马X6"/> <%--使用(使用表达式)setProperty标记设置smallCar的属性 number值为carNo--%> <jsp:setProperty property="number" name="smallCar" value="<%=carNo %>"/> 汽车的品牌是:<jsp:getProperty property="tradeMark" name="smallCar"/> <br>汽车的牌号是:<jsp:getProperty property="number" name="smallCar"/></body></html>

2.通过HTTP表单参数值设置bean的属性

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

通过HTTP表单参数值设置bean的属性时,表单参数的名字必须与bean属性的名字相同。服务器会根据名字自动匹配,类型自动转换。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>inputCar.jsp</title></head><body> <%--表单提交 name名与属性名匹配--%> <form action="showCar.jsp" method="post" > 请输入汽车品牌: <input type="text" name="tradeMark"/> <br> 请输入汽车牌号: <input type="text" name="number"/> <br> <input type="submit" value="提交"/> </form></body></html>

showCar.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ page import="com.bean.Car"%><%request.setCharacterEncoding("utf-8"); %><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>showCar.jsp</title></head><body> <jsp:useBean id="smallCar" class="com.bean.Car" scope="page"/> <%--通过HTTP表单的参数的值设置bean的属性(表单参数与属性自动匹配)--%> <jsp:setProperty property="*" name="smallCar"/> 汽车的品牌是:<jsp:getProperty property="tradeMark" name="smallCar"/> <br>汽车的牌号是:<jsp:getProperty property="number" name="smallCar"/></body></html>

jsp与javaBean

jsp与javaBean

3.任意指定请求参数设置bean的属性

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

可以根据自己的需要,任意选择传递的参数,请求参数名无须与bean属性名相同。



实践

编写两个JSP页面:inputTriangle.jsp showTriangle.jsp.inputTriangle.jsp 提供一个表单,用户可以通过表单输入三角形的三条边提交给 showTriangle.jsp.用户提交表单后,JSP页面将计算三角形面积和周长的任务交给一个bean 去完成,创建bean的源文件是Triangle

以下代码仅供参考

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>输入三角形三边:<form action="showTriangle.jsp" method="post">边A:<input type="text" name="a"/><br>边B:<input type="text" name="b"/><br>边C:<input type="text" name="c"/><br><input type="submit" value="提交"></form></body></html>

showTriangle.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%--导包 --%><%@page import="com.bean.Triangle"%><%request.setCharacterEncoding("UTF-8"); %>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>
<jsp:useBean id="triangle" class="com.bean.Triangle" scope="page"/><%--通过HTTP表单设置参数值 --%><jsp:setProperty property="*" name="triangle"/>

三角形的三边是:<br><%--有错误的方式 边A: <%=triangle.getA()%> 边B:<%=triangle.getB()%> 边C :<%=triangle.getC()%> --%>边A :<jsp:getProperty property="a" name="triangle"/> 边B :<jsp:getProperty property="b" name="triangle"/> 边C :<jsp:getProperty property="c" name="triangle"/> <br><br>这三个边能构成三角形吗? <%=triangle.isTrangle()%><br><br>面积是: <%if(triangle.isTrangle()) out.print(triangle.TriangleArea());else out.print("错误");%></body></html>

Triangle.java

package com.bean;
public class Triangle {private double a,b,c;
public Triangle() {a=1;b=1;c=1;}public double getA() { return a;}
public void setA(double a) { this.a = a;}
public double getB() { return b;}
public void setB(double b) { this.b = b;}
public double getC() { return c;}
public void setC(double c) { this.c = c;}
public boolean isTrangle() { if(a+b<=c) return false; if(a+c<=b) return false; if(b+c<=a) return false; return true;}
//海伦公式求面积public double TriangleArea() { double p=(a+b+c)/2.0; return Math.sqrt(p*(p-a)*(p-b)*(p-c));}}

jsp与javaBean

jsp与javaBean





jsp与javaBean


来源:码农迪迪,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/87575

发表评论

电子邮件地址不会被公开。 必填项已用*标注

技术服务
技术服务
关注抖音
关注抖音
进群学习 侵权联系
返回顶部