题目
编写一个 Tag 文件 GetArea.tag 负责求出三角形的面积,并使用 variable 指令返回三角形的面积给调用该 Tag 文件的 JSP 页面。JSP 页面负责显示 Tag 文件返回的三角形的面积。JSP 在调用 Tag 文件时,使用 attribute 指令将三角形三边的长度传递给 Tag 文件。one.jsp 和 two.jsp 都使用 Tag 标记调用 GetArea.tag 。one.jsp 将返回的三角形的面积保留最多 3 位小数, two.jsp 将返回的三角形的面积保留最多 6 位小数.
代码
demo3.jsp
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<html>
<body>
<form action="one.jsp" method="GET" name="form">
三角形的边一:
<input type="text" name="s1"/>
三角形的边二:
<input type="text" name="s2"/>
三角形的边三:
<input type="text" name="s3"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
GetArea.tag
<%@ tag pageEncoding="UTF-8" %>
<%@ tag import = "java.util.*" %>
<%@ attribute name="size1" required="true" %>
<%@ attribute name="size2" required="true" %>
<%@ attribute name="size3" required="true" %>
<%@ variable name-given="area" variable-class="java.lang.Double" scope="AT_END" %>
<%!
public Double getArea(double size1, double size2, double size3){
//如果是三角形,则计算面积,并返回
if(size1 + size2 > size3 && size1 + size3 > size2 && size3 + size2 > size1 ){
double p = (size1 + size2 + size3) / 2.000000;
double area = Math.sqrt(p * (p - size1) * (p - size2) * (p - size3));
return area;
}else
return null;
}
%>
<%
try{
//转换类型
double s1 = Double.parseDouble(size1);
double s2 = Double.parseDouble(size2);
double s3 = Double.parseDouble(size3);
//返回值
jspContext.setAttribute("area",getArea(s1, s2, s3));
}catch(Exception e){
}
%>
one.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
//获取输入的值
String s1 = request.getParameter("s1");
String s2 = request.getParameter("s2");
String s3 = request.getParameter("s3");
%>
<%-- 引用tag文件 --%>
<tags:GetArea size1="<%=s1%>" size2="<%=s2%>" size3="<%=s3%>"/>
<div>
三角形的边分别为 <%=s1%>, <%=s2%>, <%=s3%>,面积为
<%-- 设置保留小数点后 3 位 --%>
<fmt:formatNumber value="<%=area%>" type="number" pattern="#.##" maxFractionDigits="3"/>
</div>
two.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
//获取输入的值
String s1 = request.getParameter("s1");
String s2 = request.getParameter("s2");
String s3 = request.getParameter("s3");
%>
<%-- 引用tag文件 --%>
<tags:GetArea size1="<%=s1%>" size2="<%=s2%>" size3="<%=s3%>"/>
<div>
三角形的边分别为 <%=s1%>, <%=s2%>, <%=s3%>,面积为
<%-- 设置保留小数点后 6 位 --%>
<fmt:formatNumber value="<%=area%>" type="number" pattern="#.##" maxFractionDigits="6"/>
</div>
执行结果