1 实验目的

  1. 理解JavaBean概念,掌握JavaBean的工作原理;
  2. 重点掌握JavaBean的设计要点;
  3. 重点掌握表单数据与JavaBean的对应关系。

2 实验原理

JavaBean是Java语言写的可重用组件,是符合某种规范的Java类,JavaBean满足下面规范:。

  1. JavaBean是具体的和公共的;
  2. 必须有一个无参构造方法;。
  3. 必须有setXx()方法和getXxx()方法,类的字段是通过set和get方法访问的。

在JSP页面中访问JavaBean的方法有直接访问JSP标签访问两种。

(1)直接访问JavaBean的方法:

首先在页面导入JavaBean类:

<%@ page import="javaBean.userBean" %>

在JSP段实例化JavaBean:

<% userBean user = new userBean(); %>

使用<% user.setXxx(); %>和<% user.getXxx(); %>访问JavaBean属性。

(2)直接访问JavaBean的方法:

在JSP页面使用useBean标签:

<jsp:useBean id=“bean对象名称” class=“创建bean的类名称” scope=“request”/> 或 <jsp:useBean id=“bean对象名称” class=“创建bean的类的名称” scope=“request”></jsp:useBean>

通过<jsp:setProperty name=“user” property=“name” param=“mUserName” />和<jsp:getProperty name=“user” property=“name” />设置或获取bean的属性。

3 实验任务与步骤

3.1 使用JavaBean获取表单参数

  • 设计一个JavaBean类Student.java,该JavaBean包含学号、姓名属性及各属性对应的getter和setter方法;
  • 设计表单页面input.jsp,提供学号、姓名等参数,提交给receive.jsp进行处理;
  • 设计接收参数的页面receive.jsp,实例化JavaBean对象,自动获取input.jsp提交的学号和姓名信息;
  • 使用JavaBean自动获取表单传来的参数。

3.1.1 编写Student.java

package bean;

public class Student {
	private String xh;
	private String name;
	private String birthday;
	public String getXh() {
		return xh;
	}
	public void setXh(String xh) {
		this.xh = xh;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirthday() {
		return birthday;

	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
}

3.1.2 编写input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>JavaBean test</title>
  </head>
  <body>
    <form action=" receive.jsp" mathod="post">
           学号:<input type="text" name="xh"><br>
           姓名:<input type="text" name="name"><br>
           出生日期:<input type="text" name="birthday"><br>
     <input type="submit" value="提交">
    </form>
  </body>
</html>

3.1.3 编写receive.jsp

<%@ page language="java" import="java.util.*,bean.Student" pageEncoding="utf-8"%>
<jsp:useBean id="st" class="bean.Student" scope="request"/>
<html>
  <head>
     <title>JavaBean test</title>
   </head>
  <body>
   直接从表单自动获取到的参数如下:<br>
  <jsp:setProperty name="st" property="*"/>
   学号:<%=st.getXh() %> <br>
   姓名:<%=st.getName()%> <br>
  出生日期:<%=st.getBirthday()%> <br><br>
  通过request.getParameter()获取到的表单参数如下:<br>
   学号:<%=request.getParameter("xh")%> <br>
   姓名:<%=request.getParameter("name")%> <br>
出生日期:<%=request.getParameter("birthday")%> <br>
  </body>
</html>

3.1.4 访问
使用下面的URL访问之:http://localhost:8080/prac03_JavaBean_getParam/input.jsp

将出现如图2-1所示表单界面。

图3-1
单击提交按钮,弹出图2 -2所示界面。

图3-2

3.2 限定JavaBean范围

设计一个JavaBean,其有效范围为request。
JSP页面使用useBean标记调用一个有效范围是request的JavaBean的语法如下:
<jsp:useBean id=“bean对象名称” class=“创建bean的类名称” scope=“request”/>

<jsp:useBean id=“bean对象名称” class=“创建bean的类的名称” scope=“request”></jsp:useBean>
通过<jsp:setProperty name=“user” property=“name” param=“mUserName” />和<jsp:getProperty name=“user” property=“name” />设置或获取bean的属性。
该Bean的有效范围是当前请求(request),当本次请求生命周期结束后,JSP引擎取消分配给该用户的bean。

  1. 实验任务:编写JSP程序,使用有效范围是request的JavaBean显示公司员工信息。
    编写一个Employee.java的JavaBean,含有员工编号、员工姓名、出生年月等属性,并提供相应的getXxx()和setXxx()方法。
    编写inputAndShow.jsp页面,在该页面中创建一个名为employee的JavaBean。该页面提供一个用户输入员工编号、员工姓名和出生年月的表单,该表单的输入的内容提交给当前页面,当前页面使用表单提交的数据设置employee有关属性的值,然后显示employee各个属性的值。

  2. 实验步骤。
    【步骤1】编写一个JavaBean文件Employee.java和一个页面文件inputAndShow.jsp。
    Employee.java参考代码如下:
    package bean;

public class Employee {
private String empID;
private String empName;
private String birthday;
public String getEmpID() {
return empID;
}
public void setEmpID(String empID) {
this.empID = empID;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
inputAndShow.jsp参考代码如下:
<%@ page contentType=“text/html;charset=UTF-8” pageEncoding=“UTF-8” %>
<jsp:useBean id=“employee” class=“bean.Employee” scope=“request”/>

<% request.setCharacterEncoding("UTF-8"); %> 职工编号:
职工姓名:
出生日期:
分析inputAndShow.jsp中红色代码的功能?【步骤2】使用下面的URL访问之。http://localhost:8080/prac03_JavaBean_scope/inputAndShow.jsp,将出现如图3-3所示表单界面。

图3-3
单击提交,弹出如图3-4所示界面。

图3-4
(三)设计一个JavaBean,其有效范围为session。
JSP页面使用useBean标记调用一个有效范围是session的JavaBean的语法如下:
<jsp:useBean id=“bean对象名称” class=“创建bean的类名称” scope=“session”/>

<jsp:useBean id=“bean对象名称” class=“创建bean的类的名称” scope=“session”></jsp:useBean>

  1. 实验任务:编写两个JSP页面:inputtoshow.jsp和show.jsp。Employee.java源文件与(二)相同。
    Input2show.jsp的具体要求:页面要求提供输入职工信息的表单,该表单将用户输入信息提交给当前页面,当前页面调用名称为employee的bean,并使用表单提交的数据设置employee的有关属性的值。并要求在input2Show.jsp中提供一个超链接,以便用户单击这个链接访问show.jsp。
    如果用户访问某个Web服务的多个页面,每个页面都含有一个useBean标记,而且各个页面的useBean标记中的id的值相同,scope的值都是session,则该用户在这些页面中得到的bean值是相同的,因为是同一个bean,占相同的内存空间。如果用户在一个页面中修改了bean的属性,其它页面的bean的属性也发生相同的变化。当session消失后,JSP引擎会释放分配的Bean。
    但不同用户的scope取值是session时,bean是不同的(因为bean占据内存空间不同)。
  2. 实验步骤。
    【步骤1】编写input2show.jsp,参考代码如下:
    <%@ page contentType=“text/html;charset=UTF-8” %>
    <%@ page import=“bean.*”%>
    <jsp:useBean id=“employee” class=“bean.Employee” scope=“session”/>
<% request.setCharacterEncoding("utf-8"); %> 职工编号:
职工名称:
出生日期:访问show.jsp,查看有关信息。
编写show.jsp参考代码如下:<%@ page contentType="text/html;charset=UTF-8" %><%@ page import="bean.Employee"%>
【步骤2】使用下面的URL访问之。http://localhost:8080/prac03_JavaBean_scope/input2show.jsp,将出现如图3-5所示表单界面,书如内容并单击提交,弹出图3-6所示界面。

图3-5

图3-6
(四)设计一个JavaBean,其有效范围为application。
JSP页面使用useBean标记调用一个有效范围是application的JavaBean的语法如下:
<jsp:useBean id=“bean对象名称” class=“创建bean的类名称” scope=“application”/>

<jsp:useBean id=“bean对象名称” class=“创建bean的类的名称” scope=“application”></jsp:useBean>
通过<jsp:setProperty name=“user” property=“name” param=“mUserName” />和<jsp:getProperty name=“user” property=“name” />设置或获取bean的属性。
JSP引擎为Web服务目录下的所有JSP页面分配一个共享的bean,scope取值为application的用户所用的同名bean相同,当一个用户修改自己的bean时,会影响到其他用户的使用。

  1. 实验任务:编写JSP程序,使用有效范围是application的JavaBean显示公司员工信息。
    编写一个Employee.java的JavaBean,含有员工编号、员工姓名、出生年月等属性,并提供相应的getXxx()和setXxx()方法。
    编写inputAndShow.jsp页面,在该页面中创建一个名为employee的JavaBean。该页面提供一个用户输入员工编号、员工姓名和出生年月的表单,该表单的输入的内容提交给当前页面,当前页面使用表单提交的数据设置employee有关属性的值,然后显示employee各个属性的值。
  2. 实验步骤。
    【步骤1】编写一个JavaBean文件Notice.java和一个页面文件inputNotice.jsp和showNotice.jsp。
    Notice.java参考代码如下:
    package bean;

import java.util.*;
import java.text.SimpleDateFormat;
public class Notice
{
String name,title,content;
StringBuffer allMessage;
ArrayList savedName,savedTitle,savedContent,savedTime;
public Notice()
{
savedName=new ArrayList();
savedTitle=new ArrayList();
savedContent=new ArrayList();
savedTime=new ArrayList();
}
public void setName(String s)
{
/try{
System.out.print(“s1=”+s+"/n");
byte bb[]=s.getBytes(“iso-8859-1”);
s=new String(bb,“UTF-8”);
System.out.print(“s2=”+s);
}
catch(Exception exp){}
/
name=s;
savedName.add(name);
Date time=new Date();
SimpleDateFormat matter=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String messTime=matter.format(time);
savedTime.add(messTime);
}
public void setTitle(String t)
{ title=t;
savedTitle.add(title);
}
public void setContent(String c)
{ content=c;
savedContent.add(content);
}
public StringBuffer getAllMessage()
{
allMessage=new StringBuffer();
allMessage.append("

");
allMessage.append("");
allMessage.append(“”);
allMessage.append(“”);
allMessage.append(“”);
allMessage.append(“”);
allMessage.append("");
for(int k=0;k<savedName.size();k++)
{
allMessage.append("");
allMessage.append("");
allMessage.append("");
allMessage.append("");
allMessage.append("");
allMessage.append("");
}
allMessage.append("
");
return allMessage;
}
}
inputNotice.jsp参考代码如下:
<%@ page contentType=“text/html;charset=utf-8” %>
<jsp:useBean id=“notice” class=“bean.Notice” scope=“application”/> 输入您的名字:

输入您的留言标题:

输入您的留言:

<%request.setCharacterEncoding("utf-8");%> 查看留言板showNotice .jsp参考代码如下:<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> <%request.setCharacterEncoding("utf-8");%> 我要留言【步骤2】使用下面的URL访问之。http://localhost:8080/prac03_JavaBean_scope/inputNotice.jsp,将出现如图3-7所示表单界面,输入内容并单击“提交信息”按钮,弹出图3-8所示界面。

图3-6

图3-8
四、思考题

  1. 如何获得请求参数?
  2. 如何在请求对象中共享数据?
    五、实验总结
    本实验实现了request对象、session对象、application对象的用法,实现数据的传递和共享。
10-03 14:26