实验五 、bean的应用
一、实验目的
1. 掌握bean的结构。
2. 掌握bean的作用域。
3. 掌握bean的使用。
4. 掌握bean的书写规则,理解bean的作用域,在JSP页面中熟练使用bean。
二、实验内容
1、教材5.5.1节 小数表示为分数。
2、教材5.5.2节 记忆测试。
3、教材5.5.3节 成语接龙。
三、实验步骤
1.小数表示为分数
① 实验代码
文件ch5_1.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<style>
#tomStyle{
font-family:宋体;font-size:36;color:blue
}
</style>
<HTML>
<body bgcolor = #ffccff>
<form action="ch5_2.jsp" id=tomStyle method=post >
输入一个纯小数:<br>
<input type=text name="number" id=tomStyle size=16 value = 0.618 />
<br><input type="submit" id=tomStyle value="提交" /><br>
看小数的分数表示。
</form>
</body>
</HTML>
文件ch5_2.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML>
<body bgcolor = cyan>
<p style="font-family:宋体;font-size:36;color:red">
<jsp:useBean id="fraction" class="one.Fraction" scope="request" />
<jsp:setProperty name="fraction" property="number" param = "number" />
<jsp:getProperty name="fraction" property="number" />
表示成分数是:<br>
<jsp:getProperty name="fraction" property="numerator" /> /
<jsp:getProperty name="fraction" property="denominator" />
</p>
</body>
</HTML>
文件Fraction.java
package one;
public class Fraction {
public double number ; //存放小数
public long numerator ; //存放分子
public long denominator; //存放分母
public double getNumber(){
String numberString = String.valueOf(number);
String xiaoshuPart =
numberString.substring(numberString.indexOf(".")+1);
return Double.parseDouble("0."+xiaoshuPart);
}
public long getNumerator(){
return numerator;
}
public long getDenominator(){
return denominator;
}
public void setNumber(double number){
this.number = number;
String numberString = String.valueOf(number);
String xiaoshuPart =
numberString.substring(numberString.indexOf(".")+1);
int m = xiaoshuPart.length();
numerator = Long.parseLong(xiaoshuPart);
denominator = (long)Math.pow(10,m);
long greatCommonDivisor = f(numerator,denominator);
numerator = numerator/greatCommonDivisor;
denominator = denominator/greatCommonDivisor;
}
private long f(long a,long b) {
if(a==0) return 1;
if(a<b) {
long c = a;
a = b;
b = c;
}
long r=a%b;
while(r!=0) {
a = b;
b = r;
r = a%b;
}
return b;
}
}
② 运行结果
2.记忆测试
①实验代码
文件ch5_3.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML>
<body bgcolor = #ffccff>
<style>
#textStyle{
font-family:宋体;font-size:26;color:blue
}
</style>
<form action="ch5_4.jsp" id ="textStyle" method=post >
<input type=radio name="grade" value="5" />初级
<input type=radio name="grade" value="7" checked="ok" />中级
<input type=radio name="grade" value="10" />高级
<br><input type="submit" id ="textStyle" value="提交"/>
<input type="reset" id ="textStyle" value="重置" />
</form>
</body>
</HTML>
文件ch5_4.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Random" %>
<jsp:useBean id="memory" class="two.Memory" scope="session" />
<HTML>
<body bgcolor = #ffccff>
<style>
#tomStyle{
font-family:宋体;font-size:36;color:blue
}
</style>
<%
String grade = request.getParameter("grade");
String testString ="";
if(grade == null){
memory.setGrade(memory.getGrade());
}
else {
memory.setGrade(Integer.parseInt(grade));
}
if(memory.getIsGivenTestString()== false) {
memory.giveTestString();
testString = memory.getTestString();
memory.setIsGivenTestString(true);
}
else if(memory.getIsGivenTestString()== true){
response.sendRedirect("ch5_5.jsp");
}
%>
<p id = tomStyle>给5秒种记住您看到的字符序列:<br>
<%= testString %>
<br>5秒种后,将转到答题页。
<%
response.setHeader("refresh","5");
%>
</p>
</body>
</HTML>
文件ch5_5.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<jsp:useBean id="memory" class="two.Memory" scope="session" />
<HTML>
<body bgcolor = #ffccff>
<style>
#tomStyle{
font-family:宋体;font-size:26;color:blue
}
</style>
<form action="ch5_6.jsp" id = tomStyle method=post>
您记住的字符序列是怎样的,请选择:
<%
int n = memory.getGrade();
memory.setIsGivenTestString(false);
for(int i=1;i<=n;i++){
out.print("<br>第"+i+"个字符:");
out.print("<input type=radio id = tomStyle name=R"+i+" value='★'/>★"+
"<input type=radio id =tomStyle name=R"+i+" value='●' />●"+
"<input type=radio id =tomStyle name=R"+i+" value='▲' />▲"+
"<input type=radio id =tomStyle name=R"+i+" value='■' />■"+
"<input type=radio id =tomStyle name=R"+i+" value='◆' />◆");
}
%>
<br><input type="submit" id=tomStyle value="提交"/>
<input type="reset" id=tomStyle value="重置" />
</form>
</body>
</HTML>
文件ch5_6.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<jsp:useBean id="memory" class="two.Memory" scope="session" />
<HTML>
<body bgcolor = white >
<p style="font-family:宋体;font-size:26;color:blue">
<%
memory.setIsGivenTestString(false);
request.setCharacterEncoding("utf-8");
int n = memory.getGrade();
StringBuffer buffer = new StringBuffer();
for(int i=1;i<=n;i++){
buffer.append(request.getParameter("R"+i));
out.print(""+request.getParameter("R"+i));
}
String userAnswer = new String(buffer);
String testString = memory.getTestString();
if(testString.equals(userAnswer)){
out.print("您记忆不错");
}
else {
out.print("您没记忆住额!答案是:<br>"+testString);
}
%>
<br><a href = "ch5_4.jsp">返回,继续练习记忆</a>
<br><a href = "ch5_3.jsp">重新选择级别</a>
</p>
</body>
</HTML>
文件Memory.java
package two;
import java.util.ArrayList;
import java.util.Random;
public class Memory {
static ArrayList<String> list = new ArrayList<String>();
static {
list.add("★");
list.add("●");
list.add("▲");
list.add("■");
list.add("◆");
}
int grade = 5 ;
String testString;
boolean isGivenTestString = false;
public void setGrade(int n){
grade = n;
}
public int getGrade(){
return grade;
}
public void giveTestString(){
StringBuffer buffer = new StringBuffer();
Random random = new Random();
for(int i=0;i<grade;i++) {
int index = random.nextInt(list.size());
String str = list.get(index);
buffer.append(str);
}
testString = new String(buffer);
}
public void setIsGivenTestString(boolean b){
isGivenTestString =b;
}
public boolean getIsGivenTestString(){
return isGivenTestString;
}
public String getTestString(){
return testString;
}
}
②运行结果
3.成语接龙
①实验代码
文件ch5_7.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<jsp:useBean id="idioms" class="three.ContinueIdioms" scope="application" />
<style>
#tomStyle{
font-family:宋体;font-size:26;color:blue
}
</style>
<% request.setCharacterEncoding("utf-8");%>
<jsp:setProperty name="idioms" property="nowIdioms" param ="nowIdioms" />
<HTML>
<body bgcolor = #ffccff>
<p id = tomStyle>
目前的接龙情景:<br>
<textArea id = tomStyle rows=5 cols=38>
<%= idioms.getAllIdioms() %>
</textArea><br>
<form action="" id = tomStyle method = post >
继续接龙,输入成语:<text name="nowIdioms" value = 10 />
<br><input type="text" name ="nowIdioms" id = tomStyle />
<input type="submit" id = tomStyle value="提交"/>
</form>
</p>
</body>
</HTML>
文件ContinueIdioms.java
package three;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class ContinueIdioms {
LinkedList<String> listIdioms ;
public String nowIdioms;
public ContinueIdioms(){
listIdioms = new LinkedList<String>();
}
public synchronized void setNowIdioms(String s){
nowIdioms = s;
try{
String previous = listIdioms.getLast();
char endChar = previous.charAt(previous.length()-1);
char startChar = nowIdioms.charAt(0);
if(startChar == endChar)
listIdioms.add(nowIdioms);
}
catch(NoSuchElementException exp){
listIdioms.add(nowIdioms);
System.out.println(exp);
}
}
public String getAllIdioms(){
StringBuffer buffer = new StringBuffer();
Iterator<String> iterator =listIdioms.iterator();
if(iterator.hasNext() == false)
buffer.append("→");
while(iterator.hasNext()){
buffer.append(iterator.next()+"→");
}
return new String(buffer);
}
}
②运行结果
四、实验总结
本次实验学习了Javabean的内容掌握使用了requestbean对页面数据的存储。在第二个实验中使用了sessionbean与上一个实验做出了对比,体现了使用bean的方便,最后学习了application bean存储所有用户共享的数据,实现了成语接龙的效果