1 实验目的
- 理解JavaBean概念,掌握JavaBean的工作原理;
- 重点掌握JavaBean的设计要点;
- 重点掌握表单数据与JavaBean的对应关系。
2 实验原理
JavaBean是Java语言写的可重用组件,是符合某种规范的Java类,JavaBean满足下面规范:。
- JavaBean是具体的和公共的;
- 必须有一个无参构造方法;。
- 必须有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。
实验任务:编写JSP程序,使用有效范围是request的JavaBean显示公司员工信息。
编写一个Employee.java的JavaBean,含有员工编号、员工姓名、出生年月等属性,并提供相应的getXxx()和setXxx()方法。
编写inputAndShow.jsp页面,在该页面中创建一个名为employee的JavaBean。该页面提供一个用户输入员工编号、员工姓名和出生年月的表单,该表单的输入的内容提交给当前页面,当前页面使用表单提交的数据设置employee有关属性的值,然后显示employee各个属性的值。实验步骤。
【步骤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”/>
职工姓名:
出生日期:
图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>
- 实验任务:编写两个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占据内存空间不同)。 - 实验步骤。
【步骤1】编写input2show.jsp,参考代码如下:
<%@ page contentType=“text/html;charset=UTF-8” %>
<%@ page import=“bean.*”%>
<jsp:useBean id=“employee” class=“bean.Employee” scope=“session”/>
职工名称:
出生日期:访问show.jsp,查看有关信息。编写show.jsp参考代码如下:<%@ page contentType="text/html;charset=UTF-8" %><%@ page import="bean.Employee"%>
图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时,会影响到其他用户的使用。
- 实验任务:编写JSP程序,使用有效范围是application的JavaBean显示公司员工信息。
编写一个Employee.java的JavaBean,含有员工编号、员工姓名、出生年月等属性,并提供相应的getXxx()和setXxx()方法。
编写inputAndShow.jsp页面,在该页面中创建一个名为employee的JavaBean。该页面提供一个用户输入员工编号、员工姓名和出生年月的表单,该表单的输入的内容提交给当前页面,当前页面使用表单提交的数据设置employee有关属性的值,然后显示employee各个属性的值。 - 实验步骤。
【步骤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
四、思考题
- 如何获得请求参数?
- 如何在请求对象中共享数据?
五、实验总结
本实验实现了request对象、session对象、application对象的用法,实现数据的传递和共享。