
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页面中使用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>
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>
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));
}
}

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