JSP程序设计练习--第三章-课后习题7
JSP程序设计练习--第三章-课后习题7
题3-7 Tag标记
编写一个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位小数。
代码设计
index.jsp
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<%@taglib prefix="calculator" tagdir="/WEB-INF/tags" %>
<html>
<body bgcolor="aqua">
<table cellspacing="1" cellpadding="1" width="20%" border="0">
<tr valign="bottom">
<td><a href="/index.jsp"><font size=3>index.jsp保留三位小数</font> </a> </td>
<td><a href="/index2.jsp"><font size=3>index2.jsp保留六位小数</font> </a> </td>
</tr>
</table>
<p>输入三角形三条边的值,计算三角形的面积
<form action="" method="get" name="form">
<table>
<tr>
<td>输入边a的值:</td>
<td><input type="text" name="a"></td>
</tr>
<tr>
<td>输入边b的值:</td>
<td><input type="text" name="b"></td>
</tr>
<tr>
<td>输入边c的值:</td>
<td><input type="text" name="c"></td>
</tr>
</table>
<br><input type="submit" value="提交" name="submit">
</form>
<%
String a = request.getParameter("a");
String b = request.getParameter("b");
String c = request.getParameter("c");
if (a!=null&&b!=null&&c!=null){
%> <calculator:GetArea numberA="<%=a%>" numberB="<%=b%>" numberC="<%=c%>" d="one"/>
<br><%=message%>
<br><%=area%>
<% }
%>
</body>
</html>
index2.jsp
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<%@taglib prefix="calculator" tagdir="/WEB-INF/tags" %>
<html>
<body bgcolor="#7fffd4">
<table cellspacing="1" cellpadding="1" width="20%" border="0">
<tr valign="bottom">
<td><a href="/index.jsp"><font size=3>index.jsp保留三位小数</font> </a> </td>
<td><a href="/index2.jsp"><font size=3>index2.jsp保留六位小数</font> </a> </td>
</tr>
</table>
<p>输入三角形三条边的值,计算三角形的面积:
<form action="" method="get" name="form">
<table>
<tr>
<td>输入边a的值:</td>
<td><input type="text" name="a"></td>
</tr>
<tr>
<td>输入边b的值:</td>
<td><input type="text" name="b"></td>
</tr>
<tr>
<td>输入边c的值:</td>
<td><input type="text" name="c"></td>
</tr>
</table>
<br><input type="submit" value="提交" name="submit">
</form>
<%
String a = request.getParameter("a");
String b = request.getParameter("b");
String c = request.getParameter("c");
if (a!=null&&b!=null&&c!=null){
%> <calculator:GetArea numberA="<%=a%>" numberB="<%=b%>" numberC="<%=c%>" d="two"/>
<br><%=message%>
<br><%=area%>
<% }
%>
</body>
</html>
GetArea.tag
<%@ tag pageEncoding="GB2312" %>
<%@attribute name="numberA" required="true" %>
<%@attribute name="numberB" required="true" %>
<%@attribute name="numberC" required="true" %>
<%@attribute name="d" required="true" %>
<%@variable name-given="area" scope="AT_END" %>
<%@variable name-given="message" scope="AT_END" %>
<%!
public double getArea(double a, double b, double c){
if (a+b>c&&a+c>b&&b+c>a){
double p = (a+b+c)/2.0;
double area = Math.sqrt(p*(p-a)*(p-b)*(p-c));
return area;
}
else
return -1;
}
%>
<%
try{
double a = Double.parseDouble(numberA);
double b = Double.parseDouble(numberB);
double c = Double.parseDouble(numberC);
double result = 0;
if (d.equals("one")){
result = getArea(a,b,c);
jspContext.setAttribute("area", String.format("%.3f", result));
jspContext.setAttribute("message", "求得面积保留3位小数");
}
else if (d.equals("two")){
result = getArea(a,b,c);
jspContext.setAttribute("area", String.format("%.6f", result));
jspContext.setAttribute("message", "求得面积保留6位小数");
}
}catch (Exception e){
jspContext.setAttribute("area", new Double(-1.0));
jspContext.setAttribute("message", e.toString());
}
%>
运行效果
- index.jsp
- index2.jsp