先看代码与实现:
文件结构
triangle_area4.jsp
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<body>
<%--<jsp:useBean>:用于在JSP中实例化JavaBean。在这里,它实例化了javabean.Triangle类的对象,并赋予ID为triangle。
如果在此之前已经存在该ID的Bean,则使用已存在的对象,不再重新创建。--%>
<jsp:useBean id="triangle" class="javabean.Triangle" />
<%--<jsp:setProperty>:用于设置JavaBean的属性值--%>
<jsp:setProperty name="triangle" property="sideA" value="3.0" />
<jsp:setProperty name="triangle" property="sideB" value="4.0" />
<jsp:setProperty name="triangle" property="sideC" value="5.0" />
<%--<jsp:getProperty>:用于从JavaBean中读取属性值,并在JSP页面上显示--%>
三角形的三条边分别为: <jsp:getProperty name="triangle" property="sideA" />,
<jsp:getProperty name="triangle" property="sideB" />,
<jsp:getProperty name="triangle" property="sideC" />,面积为:
<jsp:getProperty name="triangle" property="area" />
</body>
</html>
Triangle.class
package javabean;
public class Triangle {
private double sideA;
private double sideB;
private double sideC;
private double area;
public Triangle() {
}
public double getSideA() {
return this.sideA;
}
public void setSideA(double var1) {
this.sideA = var1;
}
public double getSideB() {
return this.sideB;
}
public void setSideB(double var1) {
this.sideB = var1;
}
public double getSideC() {
return this.sideC;
}
public void setSideC(double var1) {
this.sideC = var1;
}
public void setArea(double var1) {
this.area = var1;
}
public double getArea() {
double var1 = 0.0;
if (this.sideA + this.sideB > this.sideC && this.sideA + this.sideC > this.sideB && this.sideB + this.sideC > this.sideA) {
double var3 = (this.sideA + this.sideB + this.sideC) / 2.0;
var1 = Math.sqrt(var3 * (var3 - this.sideA) * (var3 - this.sideB) * (var3 - this.sideC));
}
return var1;
}
}
该项目的JavaBean 实现原理体现
JavaBean Triangle
类定义了三角形的三个边sideA
、sideB
、sideC
,并包含了一个area
属性用于计算三角形的面积。JavaBean是一种特殊的Java类,它通常符合以下几个条件:
- 属性私有化 :类的属性(如
sideA
、sideB
、sideC
等)是private
的,确保外部代码不能直接访问。 - 提供getter和setter方法:每个属性都有相应的getter和setter方法,用于访问和修改这些属性。
在Triangle
类中,getArea()
方法根据三角形的三个边长,通过海伦公式(Heron's Formula)计算三角形的面积:
MVC设计模式的体现
Model(模型) :Triangle
类是JavaBean,用于保存和处理数据(即三角形的三条边和面积计算)。
View(视图) :triangle.jsp
是用于显示数据的JSP页面,使用<jsp:useBean>
等标签与Triangle
类进行交互。
Controller(控制器):虽然在你的项目中没有明显的控制器代码,但JSP页面实际上在某种程度上扮演了部分控制器的角色,通过处理数据的显示逻辑。
项目实现流程
用户访问triangle.jsp
页面。JSP通过<jsp:useBean>
标签实例化javabean.Triangle
类,生成一个triangle
对象。通过<jsp:setProperty>
标签,设置三角形的三条边sideA
、sideB
和sideC
的值。triangle.jsp
页面使用<jsp:getProperty>
读取并展示三角形的边长和通过getArea()
方法计算出的面积。
关于getArea()自动调用的疑问(重点)
<jsp:getProperty>
标签会调用 Triangle
类中的 getArea()
方法,这个方法根据 sideA
、sideB
和 sideC
的值动态计算并返回面积。因为 area
并不需要通过外部赋值,而是依赖于 sideA
、sideB
和 sideC
来计算。
换句话说,area
的值不是直接存储的,而是通过逻辑计算得到的。当 triangle
的边长设置好后,每次调用 getArea()
方法时,它都会重新计算并返回面积。
JSP 与 JavaBean 的 工作原理:在使用 jsp:getProperty
时,JSP 引擎会通过 Java 反射机制 来寻找对应属性的 getter 方法(在这里是 getArea()
)。即使你没有为 area
显式赋值,JSP 仍然能够通过这个 getter 方法获得计算后的结果。