实验8-基于Javabean的三角形测试系统的设计与实现
实验8-基于Javabean的三角形测试系统的设计与实现
实验目的
1.理解并使用 JavaBean 封装数据与业务逻辑;
2.理解 MVC 模式:视图、模型、控制器分离;
3.熟悉 SpringMVC 的基本流程:请求分发、参数接收、模型传递、视图跳转。
系统功能说明
- 合法性校验:
是否为正整数、是否满足三角形三边关系; - 类型判定:
锐角 / 直角 / 钝角三角形; - 面积计算:
海伦公式; - 异常提示:
非自然数、边长≤0、不能构成三角形、非数字输入; - 结果展示:
提示信息、三角形类型、面积; - 支持返回重新输入
整体架构(MVC)
-
Model(模型):
Triangle.java(JavaBean,封装三边、结果、判断逻辑) -
Controller(控制器):
TriangleController.java(SpringMVC 接收参数、调用模型、跳转视图) -
View(视图)
hello.jsp(输入页)、index.jsp(结果页)
实验成果
代码分析
Triangle.java
点击查看代码
package com.triangle;
public class Triangle {
// 三边
private int sideA;
private int sideB;
private int sideC;
// 结果信息
private String resultMsg; // 提示信息
private String triangleType;// 三角形类型
private double area; // 面积,非三角形默认为0
// 无参构造(JavaBean规范)
public Triangle() {}
// 全参构造
public Triangle(int sideA, int sideB, int sideC) {
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
// 初始化时直接执行判定逻辑
judgeTriangle();
}
/**
* 核心方法:判定三角形、类型、面积
*/
public void judgeTriangle() {
// 1. 判断是否为自然数(边长必须>0)
if (sideA <= 0 || sideB <= 0 || sideC <= 0) {
resultMsg = "输入错误:边长必须是正自然数!";
triangleType = "非三角形";
area = 0;
return;
}
// 2. 三角形三边规则:任意两边之和大于第三边
boolean isTriangle = (sideA + sideB > sideC)
&& (sideA + sideC > sideB)
&& (sideB + sideC > sideA);
if (!isTriangle) {
resultMsg = "无法构成三角形:不满足两边之和大于第三边!";
triangleType = "非三角形";
area = 0;
return;
}
// 3. 可以构成三角形,排序三边 a<=b<=c
int a = sideA, b = sideB, c = sideC;
int temp;
if (a > b) { temp = a; a = b; b = temp; }
if (a > c) { temp = a; a = c; c = temp; }
if (b > c) { temp = b; b = c; c = temp; }
// 4. 判断 锐角/直角/钝角 三角形
long a2 = (long) a * a;
long b2 = (long) b * b;
long c2 = (long) c * c;
if (a2 + b2 == c2) {
triangleType = "直角三角形";
resultMsg = "输入三边可以构成三角形";
} else if (a2 + b2 > c2) {
triangleType = "锐角三角形";
resultMsg = "输入三边可以构成三角形";
} else {
triangleType = "钝角三角形";
resultMsg = "输入三边可以构成三角形";
}
// 5. 海伦公式计算面积
double p = (a + b + c) / 2.0;
area = Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
public int getSideA() {
return sideA;
}
public void setSideA(int sideA) {
this.sideA = sideA;
}
public int getSideB() {
return sideB;
}
public void setSideB(int sideB) {
this.sideB = sideB;
}
public int getSideC() {
return sideC;
}
public void setSideC(int sideC) {
this.sideC = sideC;
}
public String getResultMsg() {
return resultMsg;
}
public void setResultMsg(String resultMsg) {
this.resultMsg = resultMsg;
}
public String getTriType() {
return triType;
}
public void setTriType(String triType) {
this.triType = triType;
}
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
}
TriangleController.java
点击查看代码
package com.triangle;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class TriangleController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// 1. 获取请求参数:三条边长
String aStr = arg0.getParameter("sideA");
String bStr = arg0.getParameter("sideB");
String cStr = arg0.getParameter("sideC");
// 2. 实例化JavaBean
Triangle triBean = new Triangle();
// 3. 字符串转数字,防止空参数
try {
int a = Integer.parseInt(aStr);
int b = Integer.parseInt(bStr);
int c = Integer.parseInt(cStr);
// 给JavaBean赋值
triBean.setSideA(a);
triBean.setSideB(b);
triBean.setSideC(c);
// 执行判定与计算逻辑
triBean.calculate();
} catch (NumberFormatException e) {
// 输入非数字时的异常处理
triBean.setResultMsg("错误:请输入合法自然数!");
triBean.setTriType("非三角形");
triBean.setArea(0);
}
// 4. 封装数据到 ModelAndView,跳转结果页面
ModelAndView mv = new ModelAndView();
// 存入JavaBean,供JSP取值
mv.addObject("triangle", triBean);
// 指定跳转视图名
mv.setViewName("index");
return mv;
}
}
hello.jsp
点击查看代码
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>三角形计算器</title>
<style>
body {
font-family: "Microsoft YaHei", sans-serif;
text-align: center;
margin-top: 100px;
}
h1 {
font-size: 48px;
font-weight: bold;
margin-bottom: 50px;
}
.form-item {
margin: 20px auto;
font-size: 24px;
}
input[type="text"] {
font-size: 20px;
padding: 15px;
width: 400px;
border: 1px solid #ccc;
border-radius: 4px;
margin-left: 10px;
}
button {
background-color: #1677ff;
color: white;
border: none;
padding: 18px 60px;
font-size: 22px;
border-radius: 6px;
cursor: pointer;
margin-top: 20px;
}
button:hover {
background-color: #0d5fcc;
}
</style>
</head>
<body>
<h1>三角形计算器</h1>
<!-- 把 action 改成自己的控制器路径 -->
<form method="post" action="hello.do">
<div class="form-item">
边长A:
<input name="sideA" type="text" id="sideA" placeholder="请输入正整数" size="45" />
</div>
<div class="form-item">
边长B:
<input name="sideB" type="text" id="sideB" placeholder="请输入正整数" size="45" />
</div>
<div class="form-item">
边长C:
<input name="sideC" type="text" id="sideC" placeholder="请输入正整数" size="45" />
</div>
<p>
<input type="submit" name="提交" id="提交" value="计算三角形"
style="background-color:#1677ff; color:white; border:none; padding:18px 60px; font-size:22px; border-radius:6px; cursor:pointer;" />
</p>
</form>
</body>
</html>
index.jsp
点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>三角形计算器 - 结果页面</title>
<style>
.container { width: 400px; margin: 100px auto; text-align: center; }
.result { margin: 20px 0; padding: 15px; border: 1px solid #ddd; border-radius: 4px; }
.back-btn { padding: 8px 20px; background: #28a745; color: white; text-decoration: none; border-radius: 4px; }
</style>
</head>
<body>
<div class="container">
<h1>计算结果</h1>
<div class="result">
<p><strong>提示信息:</strong>${triangle.resultMsg}</p>
<p><strong>三角形类型:</strong>${triangle.triangleType}</p>
<p><strong>面积:</strong>${triangle.area}</p>
</div>
<a href="${pageContext.request.contextPath}/Triangle/view/input.do" class="back-btn">返回重新输入</a>
</div>
</body>
</html>
结果介绍
- 输入页

- 锐角三角形

- 直角三角形

- 钝角三角形

- 非法输入:两边之和不大于第三边

- 异常:非数字 / 负数


网站访问链接:http://47.111.183.105:8080/Trangle/hello.jsp
问题解决
问题一:页面与请求编码不统一导致中文乱码
通过统一设置UTF-8编码并配置编码过滤器解决
问题二:页面或请求地址配置不当引发404错误
核对页面存放路径、表单提交地址与Spring配置文件中的控制器路径后恢复正常
问题三:传统控制器缺少必要的处理器映射器与适配器,造成请求无法执行
补充对应配置即可修复
问题四:三角形判定逻辑不完善、三边未排序,出现类型判断与面积计算错误
优化判断条件、先对边长排序并按要求将非三角形面积置零后功能正常
问题五:输入非数字内容触发类型转换异常
通过try-catch捕获异常并给出提示;此外还存在页面跳转相对路径错误的问题,修正路径后可正常返回输入页面
实验总结
这次实验完成了 JavaBean 与 SpringMVC 的三角形判定系统设计,实现了边长输入、合法性校验、三角形类型判断及面积计算功能,加深了对 JavaBean、MVC 模式和 SpringMVC 框架的理解。
实验中,我们按照 JavaBean 规范编写实体类,封装边长、结果信息、类型和面积,并在类中完成自然数校验、三边关系判断、三角形分类及海伦公式求面积等逻辑。通过 SpringMVC 控制器接收前端参数,调用 JavaBean 处理业务,再将结果传递到 JSP 页面展示,实现了视图、模型、控制器的分离,降低了耦合度。
测试覆盖了合法输入、非自然数、非三角形等场景,系统运行稳定。过程中也遇到 get/set 命名错误、方法调用异常等问题,经排查得以解决,提升了调试能力。
通过本次实验,我们掌握了 JavaBean 开发流程和 SpringMVC 基础使用,提高了 Web 编程实践能力,为后续 Web 开发学习打下良好基础。

浙公网安备 33010602011771号