实验名称
Javabean的应用
实验内容
设计程序,区别不同有效范围的bean。设计求三角形面积和周长的例子。本实验默认使用scope=“page”的周期。
实验目的
认识JavaBean,掌握JSP中使用JavaBean的方法;利用Javabean组件实现JSP的基本应用。
实验要求
1、 要求设计两个页面,第一个页面负责接收三角形三边数据,第二页面负责结果输出。
2、 可以使用request对象获取表单数据,也可以使用setProperty的param属性直接获取表单的数据。
3、 思考如何才可以使用setProperty中property=“*”的情况,并写在实验总结当中。
实验步骤(代码、运行结果)
代码
src的triangle包中三角形类代码
package triangle;
public class Triangle {
private double side1;
private double side2;
private double side3;
public String toString() {
return "Triangle [side1=" + side1 + ", side2=" + side2 + ", side3=" + side3 + "]";
}
public double getSide1() {
return side1;
}
public void setSide1(double side1) {
this.side1 = side1;
}
public double getSide2() {
return side2;
}
public void setSide2(double side2) {
this.side2 = side2;
}
public double getSide3() {
return side3;
}
public void setSide3(double side3) {
this.side3 = side3;
}
public boolean isTri(double side1,double side2,double side3){
if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1){
return false;
}else{
return true;
}
}
public double Sum(double side1,double side2,double side3) {
double sum= side1+side2+side3;
return sum;
}
public double Area(double side1,double side2,double side3) {
double area;
double p = (side1+side2+side3)/2;
area = Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
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>My JSP 'Triangle.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body bgcolor="pink">
<h1 style="text-align: center;text-shadow: 5px 5px 5px #0bceb1;font-size: 4em;">请输入三角形的三条边</h1>
<form action="triangle/TriangleCheck.jsp" method="post">
<table width="350px" border="#19b8ef 2px solid" height="300px" align="center" style="margin: 0 auto;text-align: center;padding: 50px 50px; ">
<tr>
<td>边1:</td>
<td><input type="text" name="side1"></td> <%-- 边1 --%>
</tr>
<tr>
<td>边2:</td>
<td><input type="text" name="side2"></td> <%-- 边2 --%>
</tr>
<tr>
<td>边3:</td>
<td><input type="text" name="side3"></td> <%-- 边3 --%>
</tr>
<tr style="text-align: center">
<td class="po"><input type="submit" value="计算" ></td>
<td class="po"><input type="reset" vale="重置" ></td>
</tr>
</table>
</form>
</body>
</html>
后台处理代码
是三角形输出周长与面积,不是三角形返回到初始界面
<%@ page language="java" import="java.util.*,java.lang.*,java.math.*" 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>My JSP 'TriangleScope.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body bgcolor="pink" >
<jsp:useBean id="tr" class="triangle.Triangle" />
<jsp:setProperty property="side1" name="tr" value="<%=Double.parseDouble(request.getParameter("side1")) %>"/>
<jsp:setProperty property="side2" name="tr" value="<%=Double.parseDouble(request.getParameter("side2")) %>"/>
<jsp:setProperty property="side3" name="tr" value="<%=Double.parseDouble(request.getParameter("side3")) %>"/>
<%
if(tr.isTri(tr.getSide1(),tr.getSide2(),tr.getSide3())){
double length = tr.Sum(tr.getSide1(),tr.getSide2(),tr.getSide3());
double area = tr.Area(tr.getSide1(),tr.getSide2(),tr.getSide3());
%>
<div>
<table width="600px" height:150px style="margin: 0 auto;display: flex;font-size: 3em" align="center">
<tr>
<td>三角形的周长是:</td>
<td><%=length %></td>
</tr>
<tr>
<td>三角形的面积是:</td>
<td><%=area %></td>
</tr>
</table>
</div>
<%
}else{
System.out.println("不是三角形");
response.sendRedirect("Triangle.jsp");
}
%>
</body>
</html>
运行结果
初始界面
输入数字构成三角形
输入数字构不成三角形
总结
setProperty中property=“*”的情况
该形式是设置Bean 属性的快捷方式。在Bean 中属性的名字,类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。
property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
scope取值
scope(范围)即JSP 中变量或对象的作用域,有四个取值:page、request、session、application,这四个取值范围是从小到大排列的。
page:当前访问的页面内有效,关闭页面重新打开或刷新后变量或对象重置;
request:变量或对象存在于一次完整HTTP 请求与响应期间,完成后被释放。所以在forward跳转的几个页面内都有效,但sendRedirect方式跳转所返回的页面内无效,因为这种方式是完整的两次HTTP 请求与响应(A.jsp请求—>B(使用sendRedirect(“…/C.jsp”)—>响应A.jsp后请求C.jsp—>C.jsp—>响应A.jsp,那么在A.jsp中范围为request的变量在返回的C.jsp中将不可用)。(说明:include指令是静态包含,所以包含jsp页面时融合为一个整体)
session:会话期间。
application:服务启动期间。