典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式

先看代码与实现:

文件结构

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 类定义了三角形的三个边sideAsideBsideC,并包含了一个area属性用于计算三角形的面积。JavaBean是一种特殊的Java类,它通常符合以下几个条件:

  • 属性私有化 :类的属性(如sideAsideBsideC等)是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>标签,设置三角形的三条边sideAsideBsideC的值。triangle.jsp页面使用<jsp:getProperty>读取并展示三角形的边长和通过getArea()方法计算出的面积。

关于getArea()自动调用的疑问(重点)

<jsp:getProperty> 标签会调用 Triangle 类中的 getArea() 方法,这个方法根据 sideAsideBsideC 的值动态计算并返回面积。因为 area 并不需要通过外部赋值,而是依赖于 sideAsideBsideC 来计算。

换句话说,area 的值不是直接存储的,而是通过逻辑计算得到的。当 triangle 的边长设置好后,每次调用 getArea() 方法时,它都会重新计算并返回面积。

JSP 与 JavaBean 的 工作原理:在使用 jsp:getProperty 时,JSP 引擎会通过 Java 反射机制 来寻找对应属性的 getter 方法(在这里是 getArea())。即使你没有为 area 显式赋值,JSP 仍然能够通过这个 getter 方法获得计算后的结果。

相关推荐
星火开发设计2 分钟前
二叉树详解及C++实现
java·数据结构·c++·学习·二叉树·知识·期末考试
Ahtacca17 分钟前
解决服务间通信难题:Spring Boot 中 HttpClient 的标准使用姿势
java·spring boot·后端
宋情写21 分钟前
JavaAI05-Chain、MCP
java·人工智能
C++chaofan27 分钟前
Java 并发编程:synchronized 优化原理深度解析
java·开发语言·jvm·juc·synchronized·
better_liang35 分钟前
每日Java面试场景题知识点之-Docker容器化部署
java·docker·微服务·devops·容器化·企业级开发
悟空码字36 分钟前
SpringBoot整合Kafka,实现高可用消息队列集群
java·spring boot·后端
天天摸鱼的java工程师36 分钟前
从等电梯到写调度系统:一个Java程序员的脑洞实践
java·后端
qq_12498707531 小时前
基于springboot的仁和机构的体检预约系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计·计算机毕业设计
开开心心_Every1 小时前
免费进销存管理软件:云端本地双部署
java·游戏·微信·eclipse·pdf·excel·语音识别
虫小宝1 小时前
优惠券app安全策略:基于OAuth2.0的第三方平台授权与数据保护
java