JavaBean

    技术2022-07-12  75

    Java Bean

    是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用 Javabean减少重复代码,使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用,有以下的优点

    可将HTML和Java代码分离,这主要是为了日后维护的方便。如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难。可利用 JavaBean的优点。将常用到的程序写成 Java Bean组件,当在JSP要使用时,只要调用 Java Bean组件来执行用户所要的功能,不用再重复写相同的程序,这样一来也可以节省开发所需的时间。

    一.JavaBean的开发要求

    JavaBean本身就是一个类,属于Java的面向对象编程。

    • 在JSP中如果要应用JSP提供的Javabean的标签来操作简单类的话,则此类必须满足如下的开发要求: • 所有的类必须放在一个包中,在WEB中没有包的类是不存在的; • 所有的类必须声明为public class,这样才能够被外部所访问; • 类中所有的属性都必须封装,即:使用private声明; • 封装的属性如果需要被外部所操作,则必须编写对应的setter、getter方法; • 一个JavaBean中至少存在一个无参构造方法,此为JSP中的标签所使用

    目录结构

    第一个JavaBean程序

    package com.org; public class simpleBean{//如果没有不带构造方法会自动加进来 private String name; private String age; public void setName(String name) { this.name=name; } public void setAge(String age) { this.age=age; } public String getName() { return this.name; } public String getAge() { return this.age; } }

    二. JSP中导入JavaBean

    1.使用Page指令导入

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.org.*"%> <!-- 使用Page指令导入 --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>主页</title> </head> <body> <% simpleBean simple=new simpleBean(); simple.setName("小明"); simple.setAge("19"); %> <h3>姓名:<%=simple.getName() %></h3> <h3>年龄:<%=simple.getAge() %></h3> </body> </html>

    2.使用useBean动作标签导入

    除了使用import的语句之外,也可以使用JSP中提供的:<jsp:useBean>指令 完成操作,指令的操作语法如下所示: • <jsp:useBean id=“实例化对象名称” scope=“保存范围” class=“包.类名称”/> • 主要属性: • id:表示实例化对象的名称 • scope:表示此对象保存的范围,一共有四种属性范围:page、request、session、 application • class:对象所对应的包.类名称

    <%@ page contentType="text/html" pageEncoding="GBK"%> <jsp:useBean id="simple" scope="page" class="com.org.simpleBean"/> <html> <head><title>JAVABEAN测试</title></head> <body> <% simple.setName("小明"); simple.setAge(30); %> <h3>姓名:<%=simple.getName()%></h3> <h3>年龄:<%=simple.getAge()%></h3> </body> </html>

    三.JavaBean与表单交互

    在JavaBean语法中实际上最大的特点就在于与表单的交互上,如果按照之前的做法,有一个表单提交了内容 给JSP,JSP中如果要是想进行接收的话,则需要通过request,分别进行接收,并设置到JavaBean对应的属性里。但是通过以下标签来简化获取: • JSP中专门提供了JavaBean的属性设置标签:<jsp:setProperty> • JSP中专门提供了JavaBean的属性取得标签:<jsp:getProperty> • 设置和取得属性的标签依靠的是反射机制运行

    4种设置方法

    1、当Bean中的属性名跟参数名不一致时

    <jsp:setProperty name="simple" property="name" param="userName"/> 等价于 String username=request.getParameter("userName"); simple.setName(username);

    2.当Bean中的属性名跟参数名一致时

    <jsp:setProperty name="simple" property="name"/> 等价于 String username=request.getParameter("name"); simple.setName(username);

    3.给JavaBean的属性传具体的值

    <jsp:setProperty name="simple" property="name" values="jack"/> 等价于 simple.setName("jack");

    4.当参数名和Bean的属性名一一对应时的快捷设置方式

    <jsp:setProperty name="simple" property="*"/> <jsp:getProperty name="simple" property="name"/>

    交互案例

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>JavaBean与表单交互</title></head> <body> <%request.setCharacterEncoding("GBK"); %> <jsp:useBean id="simple" scope="page" class="com.org.SimpleBean"/> <%--将表单的所有参数传递给JavaBean对应的同名属性--%> <jsp:setProperty name="simple" property="*"/> <%--将表单的name参数传递给JavaBean的name属性--%> <jsp:setProperty name="simple" property="name" param="name"/> <jsp:setProperty name="simple" property="name"/><%--当参数名称和属性同名时可以省略param--%>> <%--将值jack传递给JavaBean的name属性--%> <jsp:setProperty name="simple" property="name" value="jack"/> <%--获取JavaBean的属性值并输出给客户端--%> <h3>姓名:<jsp:getProperty name="simple" property="name"/></h3> <h3>年龄:<jsp:getProperty name="simple" property="age"/></h3> </body> </html>

    四. JavaBean保存范围

    在<jsp:useBean>的指令上存在了一个scope属性,表示的是一个 JavaBean的保存范围,保存的范围一共是四种: • page:保存在一页的范围之中,跳转之后此JavaBean无效 • request:一个JavaBean对象可以保存在一次服务器跳转范围中 • session:在一个用户的操作范围中保存,重新打开浏览器的时候才会声 明新的JavaBean • application:在整个服务器上保存,服务器关闭时才会消失。

    <jsp:useBean>的等价含义

    <jsp:useBean id="cou" scope="session" class="com.org.Count"/> 等价于: com.org.Count cou=null; HttpSession scope=request.getSession(); cou=(com.org.Count)scope.getAttribute(“cou”); if(cou==null){ cou=new com.org.Count(); scope.setAttribute(“cou”,cou); }

    程序代码:

    首先编写一个Count.java类,来分别测试四种属性范围。 Count.java :用户计数操作的JavaBean

    package com.org; public class Count { private int count = 0 ; public Count(){ System.out.println("=========== 一个新的Count对象产生 ===========") ; } public int getCount(){ return ++ this.count ; } }

    1.page范围的JavaBean page范围的JavaBean只在本页有效,跳转后无效。

    page_bean01.jsp: 定义page范围的JavaBean

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>page范围的JavaBean</title></head> <jsp:useBean id="cou" scope="page" class="cn.mldn.lxh.demo.Count"/> <body> <h3><jsp:getProperty name="cou" property="count"/>次访问!</h3> <jsp:forward page="page_bean02.jsp"/> </body> </html>

    page_bean02.jsp:跳转后的页面

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>page范围的JavaBean</title></head> <jsp:useBean id="cou" scope="page" class="cn.mldn.lxh.demo.Count"/> <body> <h3><jsp:getProperty name="cou" property="count"/>次访问!</h3> </body> </html>

    2.request范围的JavaBean

    request范围设置的JavaBean,则在一次服务器跳转中,将不会重复声明JavaBean对象。

    request_bean01.jsp:设置request范围的JavaBean并跳转

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>request范围的JavaBean</title></head> <jsp:useBean id="cou" scope="request" class="com.org.Count"/> <body> <h3><jsp:getProperty name="cou" property="count"/>次访问!</h3> <jsp:forward page="request_bean02.jsp"/> </body> </html>

    request_bean02.jsp:跳转后的页面

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>request范围的JavaBean</title></head> <jsp:useBean id="cou" scope="request" class="com.org.Count"/> <body> <h3><jsp:getProperty name="cou" property="count"/>次访问!</h3> </body> </html>

    3.session范围的JavaBean

    当一个用户连接到JSP页面后,此session范围的JavaBean将会一直保留,直到会话结束。

    session_bean.jsp:设置session范围的JavaBean

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>session范围的JavaBean</title></head> <jsp:useBean id="cou" scope="session" class="com.org.Count"/> <body> <h3><jsp:getProperty name="cou" property="count"/>次访问!</h3> </body> </html>

    4. applica范围的JavaBean

    application范围的JavaBean是所有用户所共享的,只要声明后就会在服务器端保存,所有用户都可以直接访问此对象。

    application_bean.jsp:定义application范围的JavaBean

    <%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>application范围的JavaBean</title></head> <jsp:useBean id="cou" scope="application" class="com.org.Count"/> <body> <h3><jsp:getProperty name="cou" property="count"/>次访问!</h3> </body> </html>
    Processed: 0.012, SQL: 10