当前位置: 首页 > news >正文

典型的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() 方法,这个方法根据 sideAsideB 和 sideC 的值动态计算并返回面积。因为 area 并不需要通过外部赋值,而是依赖于 sideAsideB 和 sideC 来计算。

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何实现全行业证照一站式结构化识别?Textln企业资质证照识别上线!
  • kafka 消费者线程安全问题详细探讨
  • 中台架构下的数据仓库与非结构化数据整合
  • 详解前驱图与PV操作
  • R语言中的shiny框架
  • 《AI设计类工具系列之一——FigJam AI》
  • 邀请功能的实现分析
  • 初识C语言(三)
  • 嵌入式开发中学习C++的用处?
  • 拼图缺口形状检测系统源码分享
  • 解锁电商新视界:京东商品详情API——您的深度商品信息探索利器
  • Javax Validation 自定义注解校验(身份证号校验)
  • 线程池的执行流程和配置参数总结
  • np.array_fancy_indexing花式索引
  • Vue.js入门
  • 收藏网友的 源程序下载网
  • 自己简单写的 事件订阅机制
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • cookie和session
  • CSS3 变换
  • DataBase in Android
  • ES6之路之模块详解
  • Github访问慢解决办法
  • gulp 教程
  • iOS | NSProxy
  • Java 多线程编程之:notify 和 wait 用法
  • Java多线程(4):使用线程池执行定时任务
  • JAVA之继承和多态
  • log4j2输出到kafka
  • mysql innodb 索引使用指南
  • node入门
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • ubuntu 下nginx安装 并支持https协议
  • vue 个人积累(使用工具,组件)
  • vue-cli在webpack的配置文件探究
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Zsh 开发指南(第十四篇 文件读写)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 浮现式设计
  • 免费小说阅读小程序
  • 面试遇到的一些题
  • 七牛云假注销小指南
  • 前嗅ForeSpider教程:创建模板
  • 原生Ajax
  • 7行Python代码的人脸识别
  • 大数据全解:定义、价值及挑战
  • 进程与线程(三)——进程/线程间通信
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #pragma once
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (7) cmake 编译C++程序(二)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (PADS学习)第二章:原理图绘制 第一部分