JavaEE(3)——JavaBean技术

版权声明:[email protected] https://blog.csdn.net/zhaoxuyang1997/article/details/82931531

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
图1 - studentForm.jsp


单击提交按钮,进入studentRecv.jsp,如 图2 所示:
图2 - studentRecv.jsp
图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 的内容如下:

扫描二维码关注公众号,回复: 3442989 查看本文章
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初始界面
图3 - inputAndShowEnployee.jsp初始界面


图4 - inputAndShowEnployee.jsp输入数据
图4 - inputAndShowEnployee.jsp输入数据


图5 - 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.jspshow.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初始页面
图6 - inputToShow.jsp初始页面


图7 - inputToShow.jsp输入数据
图7 - inputToShow.jsp输入数据


图8 - show.jsp显示session中的数据
图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初始界面
图9 - inputNotice.jsp初始界面


图10 - showNotice.jsp显示application数据
图10 - showNotice.jsp显示application数据


4 思考题

  • 如何获得请求参数?
  • 如何在请求对象中共享数据?

5 实验总结

本实验实现了request对象、session对象、application对象的用法,实现数据的传递和共享。

猜你喜欢

转载自blog.csdn.net/zhaoxuyang1997/article/details/82931531