【Web编程技术实验八】基于JavaBean的三角形测试系统(SpringMVC实现)

一、实验背景

本次实验要实现一个三角形测试系统

  • 用户输入三条边的长度
  • 系统判断能否构成三角形
  • 若能构成,判断三角形类型(锐角/直角/钝角)
  • 计算并显示三角形面积

核心技术: SpringMVC + JavaBean + JSP


二、技术原理

2.1 什么是JavaBean?

JavaBean是一个遵循特定规范的Java类,用于封装数据。它包含:

  • 私有属性
  • 无参构造方法
  • Getter和Setter方法

2.2 MVC设计模式

角色 作用 本实验实现
Model(模型) 封装数据和业务逻辑 TriangleBean.java
View(视图) 用户界面 triangle.jsp
Controller(控制器) 处理请求 TriangleController.java

2.3 三角形判断的数学原理

判断能否构成三角形:

两边之和大于第三边

判断三角形类型(勾股定理):

  • a² + b² = c² → 直角三角形
  • a² + b² > c² → 锐角三角形
  • a² + b² < c² → 钝角三角形

计算面积(海伦公式):

p = (a + b + c) / 2
面积 = √[p(p-a)(p-b)(p-c)]


三、核心代码

3.1 JavaBean(TriangleBean.java)

public class TriangleBean {
    private double sideA, sideB, sideC;
    private boolean isValid;
    private String triangleType;
    private double area;
    private String message;
    
    // 判断能否构成三角形
    public void validateTriangle() {
        if (sideA <= 0 || sideB <= 0 || sideC <= 0) {
            isValid = false;
            message = "❌ 边长必须为正数!";
            return;
        }
        
        if (sideA + sideB > sideC && sideA + sideC > sideB && sideB + sideC > sideA) {
            isValid = true;
            message = "✅ 可以构成三角形";
            calculateType();
            calculateArea();
        } else {
            isValid = false;
            message = "❌ 不能构成三角形";
            area = 0;
        }
    }
    
    // 判断三角形类型
    private void calculateType() {
        double a2 = sideA * sideA;
        double b2 = sideB * sideB;
        double c2 = sideC * sideC;
        
        if (a2 + b2 == c2 || a2 + c2 == b2 || b2 + c2 == a2) {
            triangleType = "直角三角形";
        } else if (a2 + b2 < c2 || a2 + c2 < b2 || b2 + c2 < a2) {
            triangleType = "钝角三角形";
        } else {
            triangleType = "锐角三角形";
        }
    }
    
    // 计算面积(海伦公式)
    private void calculateArea() {
        double p = (sideA + sideB + sideC) / 2;
        area = Math.sqrt(p * (p - sideA) * (p - sideB) * (p - sideC));
        area = Math.round(area * 100) / 100.0;
    }
    
    // Getter和Setter方法
    // ...
}

3.2 Controller(TriangleController.java)

java
@Controller
public class TriangleController {
    
    @RequestMapping("/triangle")
    public String triangle() {
        return "triangle";
    }
    
    @RequestMapping("/calculate")
    public String calculate(
            @RequestParam double sideA,
            @RequestParam double sideB,
            @RequestParam double sideC,
            Model model) {
        
        TriangleBean triangle = new TriangleBean();
        triangle.setSideA(sideA);
        triangle.setSideB(sideB);
        triangle.setSideC(sideC);
        triangle.validateTriangle();
        
        model.addAttribute("triangle", triangle);
        return "triangle";
    }
}

3.3 JSP页面(triangle.jsp)

jsp
<form action="calculate" method="post">
    <input type="number" name="sideA" required>
    <input type="number" name="sideB" required>
    <input type="number" name="sideC" required>
    <button type="submit">判断三角形</button>
</form>

<c:if test="${triangle != null}">
    <div class="result">
        <p>边长:${triangle.sideA} / ${triangle.sideB} / ${triangle.sideC}</p>
        <c:choose>
            <c:when test="${triangle.valid}">
                <p>✅ ${triangle.message}</p>
                <p>三角形类型:${triangle.triangleType}</p>
                <p>三角形面积:${triangle.area}</p>
            </c:when>
            <c:otherwise>
                <p>❌ ${triangle.message}</p>
            </c:otherwise>
        </c:choose>
    </div>
</c:if>

四、运行效果

4.1 测试用例1:直角三角形(3,4,5)

项目 结果
输入 3, 4, 5
能否构成 ✅ 能
三角形类型 直角三角形
面积 6.0

屏幕截图 2026-05-31 115249

屏幕截图 2026-05-31 120349

4.2 测试用例2:等边三角形(3,3,3)

项目 结果
输入 3,3,3
能否构成 ✅ 能
三角形类型 等边三角形
面积 约3.897

屏幕截图 2026-05-31 120648

4.3 测试用例4:不能构成三角形(1,2,3)

项目 结果
输入 1, 2, 3
能否构成 ❌ 不能
提示信息 两边之和不大于第三边

屏幕截图 2026-05-31 121603

五、遇到的问题及解决

问题1:Spring配置后404错误

现象:访问/calculate时返回404

原因:

Java类没有编译成.class文件

Tomcat找不到Controller

解决:

确保WEB-INF/lib下有Spring的jar包

确保WEB-INF/classes下有编译后的.class文件

检查spring-servlet.xml中的包扫描路径是否正确

问题2:三角形类型判断不准确

原因:判断逻辑写反了

解决:根据勾股定理重新梳理:

直角:a² + b² = c²

锐角:a² + b² > c²

钝角:a² + b² < c²

问题3:面积计算精度问题

原因:double类型计算后小数位过多

解决:使用Math.round(area * 100) / 100.0保留两位小数

六、项目结构

text
TriangleTest/
├── triangle.jsp
└── WEB-INF/
    ├── web.xml
    ├── spring-servlet.xml
    ├── lib/
    │   ├── spring-webmvc-5.3.30.jar
    │   ├── javax.servlet-api-4.0.1.jar
    │   └── jstl-1.2.jar
    └── classes/
        └── com/triangle/
            ├── bean/TriangleBean.class
            └── controller/TriangleController.class

七、总结

通过本次实验,我掌握了:

JavaBean的使用:封装数据,分离业务逻辑

MVC设计模式:Model(数据+逻辑)、View(界面)、Controller(请求处理)

SpringMVC框架:@Controller、@RequestMapping、@RequestParam注解

三角形判断的数学原理:不等式定理、勾股定理、海伦公式

posted @ 2026-05-31 12:24  只整冰红茶  阅读(13)  评论(0)    收藏  举报