JavaEE(3)——JavaBean技术
1 实验目的
- 理解
JavaBean
概念,掌握JavaBean的工作原理。 - 重点掌握JavaBean的
设计要点
。 - 重点掌握表单数据与JavaBean的
对应关系
。
2 实验原理
JavaBean是Java语言写的可重用组件,是符合某种规范的Java类,JavaBean满足下面规范:
- JavaBean是
具体的
和公共的
;- 必须有
一个无参构造方法
;- 必须有
setXx()
方法和getXxx()
方法。
在JSP页面中访问JavaBean的方法有直接访问
和JSP标签访问
两种。
(1)直接访问JavaBean的方法。在页面导入JavaBean类,在JSP段实例化JavaBean:
<%@ page import="javaBean.userBean" %>
<%
userBean user = new userBean();
//使用user.setXxx()设置user的属性
//使用user.getXxx()访问user的属性
%>
(2)在JSP页面使用
<jsp:useBean>
标签:
<jsp:useBean id="bean对象名称" class="创建bean的类名称" scope="request"/>
<!--或者-->
<jsp:useBean id="bean对象名称" class="创建bean的类的名称" scope="request"></jsp:useBean>
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
%PROJECTROOT%/src/exp03/bean/Student.java
的内容如下:
package exp03.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 编写studentForm.jsp
%WEBROOT%/jsp/exp03/content01/studentForm.jsp
的内容如下:
<%--
Document : studentForm
Created on : 2018-10-3, 19:48:41
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JavaBean test</title>
</head>
<body>
<form action="studentRecv.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 编写studentRecv.jsp
<%--
Document : studentRecv
Created on : 2018-10-3, 19:51:50
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id="student" class="exp03.bean.Student" scope="request"/>
<html>
<head>
<title>JavaBean test</title>
</head>
<body>
直接从表单自动获取到的参数如下:<br />
<jsp:setProperty name="student" property="*"/>
学号:<%=student.getXh()%> <br />
姓名:<%=student.getName()%> <br />
出生日期:<%=student.getBirthday()%> <br />
<hr />
通过request.getParameter()获取到的表单参数如下:<br />
学号:<%=request.getParameter("xh")%> <br />
姓名:<%=request.getParameter("name")%> <br />
出生日期:<%=request.getParameter("birthday")%> <br />
</body>
</html>
3.1.4 运行测试
在浏览器地址栏输入以下URL访问之,如 图1
所示:
http://localhost:8081/Study/jsp/exp03/content01/studentForm.jsp
图1 - studentForm.jsp
单击提交
按钮,进入studentRecv.jsp,如 图2
所示:
图2 - studentRecv.jsp
3.2 限定JavaBean范围-request
任务描述:
- 编写JSP程序,使用有效范围是request的JavaBean显示公司员工信息。
- 编写一个Employee.java的JavaBean,含有员工编号、员工姓名、出生年月等属性,并提供相应的getXxx()和setXxx()方法。
- 编写inputAndShow.jsp页面,在该页面中创建一个名为employee的JavaBean。
- inputAndShow.jsp页面提供一个用户输入员工编号、员工姓名和出生年月的表单,该表单的输入的内容提交给当前页面,当前页面使用表单提交的数据设置employee有关属性的值,然后显示employee各个属性的值。
3.2.1 编写Employee.java
%PROJECTROOT%/src/exp03/bean/Employee.java
的内容如下:
package exp03.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;
}
}
3.2.2 编写inputAndShow.jsp
%WEBROOT%/jsp/exp03/content02/inputAndShow.jsp
的内容如下:
<%--
Document : inputAndShowEnployee
Created on : 2018-10-3, 20:10:52
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id="employee" class="exp03.bean.Employee" scope="request"/>
<html>
<body>
<% request.setCharacterEncoding("UTF-8");%>
<form action="" Method="post">
职工编号: <input type=text name="empID"><br />
职工姓名: <input type=text name="empName"><br />
出生日期: <input type=text name="birthday"><br />
<input type=submit value="提交" />
</form>
<jsp:setProperty name="employee" property="*" />
<table>
<tr>
<th>职工编号</th>
<th>职工姓名</th>
<th>出生日期</th>
</tr>
<tr>
<td><jsp:getProperty name="employee" property="empID" /></td>
<td><jsp:getProperty name="employee" property="empName" /></td>
<td><jsp:getProperty name="employee" property="birthday" />
</tr>
</table>
</body>
</html>
3.2.3 运行测试
http://localhost:8081/Study/jsp/exp03/content02/inputAndShowEnployee.jsp
图3 - inputAndShowEnployee.jsp初始界面
图4 - inputAndShowEnployee.jsp输入数据
图5 - inputAndShowEnployee.jsp提交结果
3.3 限定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
,与上面的相同。- inputToShow.jsp页面要求提供
输入职工信息的表单
,该表单将用户输入信息提交给当前页面,当前页面调用名称为employee的bean,并使用表单提交的数据设置employee的有关属性的值。- inputToShow.jsp中提供一个
超链接
,以便用户单击这个链接访问show.jsp。
相关说明:
如果用户访问某个Web服务的多个页面,每个页面都含有一个useBean标记,而且各个页面的useBean标记中的id的值相同,scope的值都是session,则该用户在这些页面中得到的bean值是相同的。
因为是同一个bean,占相同的内存空间。如果用户在一个页面中修改了bean的属性,其它页面的bean的属性也发生相同的变化。
当session消失后,JSP引擎会释放分配的Bean。
但不同用户的scope取值是session时,bean是不同的(因为bean占据内存空间不同)。
3.3.1 编写inputToShow.jsp
%WEBROOT%/jsp/exp03/content03/inputToShow.jsp
的内容如下:
<%--
Document : inputToShow
Created on : 2018-10-3, 21:45:08
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="employee" class="exp03.bean.Employee" scope="session"/>
<!DOCTYPE html>
<html>
<body>
<%
request.setCharacterEncoding("utf-8");
%>
<form action="" method="post">
职工编号: <input type=text name="empID"><br/>
职工名称: <input type=text name="empName"><br/>
出生日期: <input type=text name="birthday"><br/>
<input type=submit value="提交">
</form>
<jsp:setProperty name="employee" property="*" />
<a href="show.jsp">访问show.jsp,查看有关信息。</a>
</body>
</html>
3.3.2 编写show.jsp
%WEBROOT%/jsp/exp03/content03/show.jsp
的内容如下:
<%--
Document : show
Created on : 2018-10-3, 21:48:00
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="employee" class="exp03.bean.Employee" scope="session"/>
<!DOCTYPE html>
<html>
<table>
<tr> <th>职工编号</th>
<th>职工姓名</th>
<th>出生日期</th>
</tr>
<tr>
<td><jsp:getProperty name="employee" property="empID" /></td>
<td><jsp:getProperty name="employee" property="empName" /></td>
<td><jsp:getProperty name="employee" property="birthday" /></td>
</tr>
</body>
</html>
3.3.3 运行测试
http://localhost:8081/Study/jsp/exp03/content03/inputToShow.jsp
图6 - inputToShow.jsp初始页面
图7 - inputToShow.jsp输入数据
图8 - show.jsp显示session中的数据
3.4 限定JavaBean范围-application
- JSP引擎为Web服务目录下的所有JSP页面分配一个共享的bean。
- scope取值为application的用户所用的同名bean相同,当一个用户修改自己的bean时,会影响到其他用户的使用。
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" />
任务描述:
- 编写JSP程序,使用有效范围是application的JavaBean显示公司员工信息。
- 编写一个Employee.java的JavaBean,含有员工编号、员工姓名、出生年月等属性,并提供相应的getXxx()和setXxx()方法
- 编写inputAndShow.jsp页面,在该页面中创建一个名为employee的JavaBean。该页面提供一个用户输入员工编号、员工姓名和出生年月的表单,该表单的输入的内容提交给当前页面,当前页面使用表单提交的数据设置employee有关属性的值,然后显示employee各个属性的值。
3.4.1 编写Notice.java
%PROJECTROOT%/src/exp03/bean/Notice.java
的内容如下:
package exp03.bean;
import java.util.*;
import java.text.SimpleDateFormat;
public class Notice {
String name, title, content;
StringBuffer allMessage;
ArrayList<String> savedName, savedTitle, savedContent, savedTime;
public Notice() {
savedName = new ArrayList<>();
savedTitle = new ArrayList<>();
savedContent = new ArrayList<>();
savedTime = new ArrayList<>();
}
public void setName(String s) {
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("<table border=1>");
allMessage.append("<tr>");
allMessage.append("<th>留言者姓名</th>");
allMessage.append("<th>留言标题</th>");
allMessage.append("<th>留言内容</th>");
allMessage.append("<th>留言时间</th>");
allMessage.append("</tr>");
for (int k = 0; k < savedName.size(); k++) {
allMessage.append("<tr>");
allMessage.append("<td>");
allMessage.append(savedName.get(k));
allMessage.append("</td>");
allMessage.append("<td>");
allMessage.append(savedTitle.get(k));
allMessage.append("</td>");
allMessage.append("<td>");
allMessage.append("<textarea>");
allMessage.append(savedContent.get(k));
allMessage.append("</textarea>");
allMessage.append("</td>");
allMessage.append("<td>");
allMessage.append(savedTime.get(k));
allMessage.append("</td>");
allMessage.append("<tr>");
}
allMessage.append("</table>");
return allMessage;
}
}
3.4.2 编写inputNotice.jsp
%WEBROOT%/jsp/exp03/content04/inputNotice.jsp
的内容如下:
<%--
Document : inputNotice
Created on : 2018-10-3, 22:02:03
Author : Administrator
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="notice" class="exp03.bean.Notice" scope="application"/>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<body>
<form action="" method="post" name="form">
输入您的名字:<br />
<input type="text" name="name" /><br />
输入您的留言标题:<br />
<input type="text" name="title"><br />
输入您的留言:<br />
<textarea name="content" ROWs="10" COLS=36 WRAP="physical"></textarea><br />
<input type="submit" value="提交信息" name="submit" />
</form>
<hr />
<jsp:setProperty name="notice" property="*"/>
<a href="showNotice.jsp">查看留言板</a>
</body>
</html>
3.4.2 编写showNotice.jsp
%WEBROOT%/jsp/exp03/content04/showNotice.jsp
的内容如下:
<%--
Document : showNotice
Created on : 2018-10-3, 22:04:21
Author : Administrator
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="notice" class="exp03.bean.Notice" scope="application"/>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<body>
<jsp:getProperty name="notice" property="allMessage"/>
<a href="inputNotice.jsp">我要留言</a>
</body>
</html>
3.4.3 运行测试
http://localhost:8081/Study/jsp/exp03/content04/inputNotice.jsp
图9 - inputNotice.jsp初始界面
图10 - showNotice.jsp显示application数据
4 思考题
- 如何获得请求参数?
- 如何在请求对象*享数据?
5 实验总结
本实验实现了request对象、session对象、application对象的用法,实现数据的传递和共享。