输入三角形三条边的长度,计算并显示三角形的面积。
设计分析:
• 界面 JSP:输入三条边(input.jsp),显示三角形面积(show.jsp);
• 模型 JavaBean:(Triangle.java)判断三条边是否能组成三角形,计算三角形面积;
• 控制器 Servlet:从input.jsp 接收三条边输入的数据,创建响应的JavaBean 实例,验证输入合法性后再计算三角形面积结果发给show.jsp。
思考:如果输入比较复杂,验证合法性工作怎么处理比较好(从功能上考虑)?
package com.inspur.ch12;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
*
*
*/
public class ComputServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws UnsupportedEncodingException, IOException {
HttpSession session = request.getSession();
// 从input.jsp 接收三条边输入的数据,创建响应的JavaBean 实例,验证输入合法性后再计算三角形面积结果发给show.jsp。
// 如果输入比较复杂,验证合法性工作怎么处理比较好
String length1 = request.getParameter("length1");
String length2 = request.getParameter("length2");
String length3 = request.getParameter("length3");
//
// if((a+b)>c&&(a+c>b)&&(b+c)>a)
//1.校验输入的三条边是否为大于0的数值
double num1 = 0;
double num2 = 0;
double num3 = 0;
try {
num1 = Double.parseDouble(length1);
num2 = Double.parseDouble(length2);
num3 = Double.parseDouble(length3);
} catch (NumberFormatException e) {
session.setAttribute("error", "输入的三条边的长度必须为大于0的数值");
response.sendRedirect(request.getContextPath() + "/input.jsp");
return;
}
if(num1<=0||num2<=0||num3<=0){
session.setAttribute("error", "输入的三条边的长度必须为大于0的数值");
response.sendRedirect(request.getContextPath() + "/input.jsp");
return;
}
//2.校验是否能组成三角形
Triangle triangle = new Triangle();
boolean isTriangle = triangle.isTrTriangle(num1, num2, num3);
if (!isTriangle) {
session.setAttribute("error", "输入的三条边的长度不能组成三角形,必须任何两条边之和大于第三边");
response.sendRedirect(request.getContextPath() + "/input.jsp");
return;
}
//3.计算面积
double area=triangle.computArea(num1,num2,num2);
session.setAttribute("area", area);
response.sendRedirect(request.getContextPath() + "/show.jsp");
}
}
package com.inspur.ch12;
/**
* 判断三条边是否能组成三角形,计算三角形面积;
*
*/
public class Triangle {
/**
* 判断三条边是否能组成三角形
*
* @return 如果能组成三角形则返回true,否则返回false
*/
public boolean isTrTriangle(double num1, double num2, double num3) {
if ((num1 + num2) > num3 && (num1 + num3) > num2
&& (num2 + num3) > num1) {
return true;
}
return false;
}
/**
* 计算面积
*
* @return 面积
*/
public double computArea(double num1, double num2, double num3) {
double area = 0.0;
double p = (num1 + num2 + num3) / 2;
area = Math.sqrt(p * (p - num1) * (p - num2) * (p - num3));
return area;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>接收三条边输入的数据</title>
</head>
<body>
<font color="red"> ${sessionScope.error } </font>
<form action="computServlet" method="post">
<hr>
<h2>请输入三角形的三条边的长度</h2>
<p>
请输入第一条边长度:<input type="text" name="length1">
</p>
<p>
请输入第二条边长度:<input type="text" name="length2">
</p>
<p>
请输入第三条边长度:<input type="text" name="length3">
</p>
<p>
<input type="submit" value="计算面积">
</p>
</form>
<br>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>显示用户名</title>
</head>
<body>
<p>该三角形的面积:<%=session.getAttribute("area") %></p>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
" target="_blank">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>computServlet</servlet-name>
<servlet-class>com.inspur.ch12.ComputServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>computServlet</servlet-name>
<url-pattern>/computServlet</url-pattern>
</servlet-mapping>
</web-app>