zoukankan      html  css  js  c++  java
  • JavaBean基础学习总结

    学习目标:

    • 掌握JavaBean的基本定义格式。
    • 掌握Web目录的标准结构。
    • 掌握JSP中对JavaBean支持的三个标签,即<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>。

    一.JavaBean的基本定义格式:

    • JavaBean的优点:可将Html和java代码分离,对日后代码维护带来方便,在开发过程中将常用的程序写成JavaBean组件,当JSP使用时,只需要调用JavaBean组件来执行用户所需要的功能即可,不用重复编写代码,节省开发时间。
    • 在JSP开发过程应用JavaBean的标签操作java程序是,对java程序类的要求:

        1.所以的类必须声明为public class,这样才可以被外部所访问。

        2.类中所有属性都必须封装,即使用private声明。

        3.封装的属性必须编写setter,getter方法。

        4.一个JavaBean至少有一个无参的构造方法。

    如下代码:

    package org.lxh.JavaBean;
    
    public class JavaBeanDemo {
    	private String name;//封装属性
    	private int age;
    	public JavaBeanDemo(){//无参构造方法
    		
    	}
    	public void setName(String name){//属性修改器,setter方法
    		this.name=name;
    	}
    	public void setAge(int age){
    		this.age=age;
    	}
    	public String getName(){//属性的访问器,getter方法
    		return this.name;
    	}
    	public int getAge(){
    		return this.age;
    	}
    }
    

    二.web目录的标准结构图:

    三.JSP中支持的三个JavaBean标签:

    • <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
    • <jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
    • <jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。

    3.1.<jsp:useBean>标签

      <jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。 
      常用语法:
     <jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>
      "id"属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。
      "class"属性用于指定JavaBean的完整类名(即必须带有包名)。
      "scope"属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application等四个值中的一个,其默认值是page。

    <jsp:useBean>标签使用实例代码:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%--
    在jsp中使用jsp:useBean标签来实例化一个Java类的对象
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
        <jsp:useBean>:表示在JSP中要使用JavaBean。
        id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
        class:此对象对应的包.类名称
        scope:此javaBean的保存范围,四种范围:page、request、session、application
    --%>
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
    <%
        //person对象在上面已经使用jsp:useBean标签实例化了,因此在这里可以直接使用person对象
        //使用setXxx方法为对象的属性赋值
        //为person对象的name属性赋值
        person.setName("小小高");
        //为person对象的Sex属性赋值
        person.setSex("男");
        //为person对象的Age属性赋值
        person.setAge(21);
    %>
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>jsp:useBean操作实例</title>
      </head>
      
      <body>
        <%--使用getXxx()方法获取对象的属性值 --%>
        <h2>姓名:<%=person.getName()%></h2>
        <h2>性别:<%=person.getSex()%></h2>
        <h2>年龄:<%=person.getAge()%></h2>
      </body>
    </html>
    

      

    3.2、<jsp:useBean>执行原理

       上面我们在index.jsp中使用<jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>实例化了一个gacl.javabean.study.Person类的对象,那么这个peson对象是怎么实例化出来的呢?index.jsp在执行的过程中首先会翻译成一个servlet,因此我们可以通过查看index.jsp页面生成的servlet的java代码来查看peson对象的实例化过程

      找到tomcat服务器下的"workCatalinalocalhost项目名称orgapachejsp"这个目录,就可以看到将index.jsp页面翻译成servlet的java源码了。

      使用文本编辑器打开index_jsp.java文件,在_jspService方法中可以看到person对象的创建过程。

      下面我们来分析一下上述生成的代码:

    gacl.javabean.study.Person person = null;
          synchronized (_jspx_page_context) {
            person = (gacl.javabean.study.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
            if (person == null){
              person = new gacl.javabean.study.Person();
              _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
            }
          }
    

      

      首先是定义一个person对象,值是null

    gacl.javabean.study.Person person = null;//定义一个空的person对象

      然后是使用pageContext对象的getAttribute方法获取存储在PageContext.PAGE_SCOPE域中的Person对象

    person = (gacl.javabean.study.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);

      如果在PageContext.PAGE_SCOPE域中的Person对象没有找到person对象,那么就创建一个新的person对象,然后使用pageContext对象的setAttribute方法将新创建的person存储在PageContext.PAGE_SCOPE域中

    if (person == null){
              person = new gacl.javabean.study.Person();
              _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
    }

      也就是说,在index.jsp中使用<jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>来实例化person对象的过程实际上是执行了上述的java代码来实例化Person对象。这就是<jsp:useBean>标签的执行原理:"首先在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。

    3.3、带标签体的<jsp:useBean>标签

    语法:
        <jsp:useBean ...> 
            Body 
        </jsp:useBean> 
    功能:
        Body部分的内容只在<jsp:useBean>标签创建JavaBean的实例对象时才执行。这种做法用得不多,了解一下即可

    3.4、<jsp:setProperty>标签

      <jsp:setProperty>标签用于设置和访问JavaBean对象的属性。 
    语法格式一:
    <jsp:setProperty name="beanName" property="propertyName" value="string字符串"/>

    语法格式二:
    <jsp:setProperty name="beanName" property="propertyName" value="<%= expression %>" />

    语法格式三:
    <jsp:setProperty name="beanName" property="propertyName" param="parameterName"/>

    语法格式四:
    <jsp:setProperty name="beanName" property= "*" />
      name属性用于指定JavaBean对象的名称。 
      property属性用于指定JavaBean实例对象的属性名。
      value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。  
      param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。

    <jsp:setProperty>标签使用范例1:使用jsp:setProperty标签设置person对象的属性值,代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%--
    在jsp中使用jsp:useBean标签来实例化一个Java类的对象
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
        <jsp:useBean>:表示在JSP中要使用JavaBean。
        id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
        class:此对象对应的包.类名称
        scope:此javaBean的保存范围,四种范围:page、request、session、application
    --%>
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
    
    <%--
    使用jsp:setProperty标签设置person对象的属性值
    jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
    但是jsp:setProperty对于复合数据类型无法自动转换
    --%>
    <jsp:setProperty property="name" name="person" value="小小高"/>
    <jsp:setProperty property="sex" name="person" value="男"/>
    <jsp:setProperty property="age" name="person" value="21"/>
    <%--
    birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
    <jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
    --%>
    <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>jsp:setProperty操作实例</title>
      </head>
      
      <body>
        <%--使用getXxx()方法获取对象的属性值 --%>
        <h2>姓名:<%=person.getName()%></h2>
        <h2>性别:<%=person.getSex()%></h2>
        <h2>年龄:<%=person.getAge()%></h2>
        <h2>出生日期:<%=person.getBirthday()%></h2>
      </body>
    </html>
    

      

    <jsp:setProperty>标签使用范例2:使用请求参数为bean的属性赋值,代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%--
    在jsp中使用jsp:useBean标签来实例化一个Java类的对象
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
        <jsp:useBean>:表示在JSP中要使用JavaBean。
        id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
        class:此对象对应的包.类名称
        scope:此javaBean的保存范围,四种范围:page、request、session、application
    --%>
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
    
    <%--
        jsp:setProperty标签可以使用请求参数为bean的属性赋值
        param="param_name"用于接收参数名为param_name的参数值,然后将接收到的值赋给name属性
    --%>
    <jsp:setProperty property="name" name="person" param="param_name"/>
    
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>jsp:setProperty操作实例</title>
      </head>
      
      <body>
          <%--使用getXxx()方法获取对象的属性值 --%>
           <h2>姓名:<%=person.getName()%></h2>
      </body>
    </html>
    

      

    <jsp:setProperty>标签使用范例3:用所有的请求参数为bean的属性赋值,代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%--
    在jsp中使用jsp:useBean标签来实例化一个Java类的对象
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
        <jsp:useBean>:表示在JSP中要使用JavaBean。
        id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
        class:此对象对应的包.类名称
        scope:此javaBean的保存范围,四种范围:page、request、session、application
    --%>
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
    
    <%--
        jsp:setProperty标签用所有的请求参数为bean的属性赋值
        property="*"代表bean的所有属性
    --%>
    <jsp:setProperty property="*" name="person"/>
    
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>jsp:setProperty标签使用范例</title>
      </head>
      
      <body>
        <%--使用getXxx()方法获取对象的属性值 --%>
        <h2>姓名:<%=person.getName()%></h2>
        <h2>性别:<%=person.getSex()%></h2>
        <h2>年龄:<%=person.getAge()%></h2>
      </body>
    </html>
    

      

    3.5、<jsp:getProperty>标签

      <jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中。
      语法:
          <jsp:getProperty name="beanInstanceName" property="PropertyName" />
        name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。 
        property属性用于指定JavaBean实例对象的属性名。
      如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。

    范例:使用jsp:getProperty获取bean对象的属性值,代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%--
    在jsp中使用jsp:useBean标签来实例化一个Java类的对象
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
        <jsp:useBean>:表示在JSP中要使用JavaBean。
        id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
        class:此对象对应的包.类名称
        scope:此javaBean的保存范围,四种范围:page、request、session、application
    --%>
    <jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
    
    <%--
    使用jsp:setProperty标签设置person对象的属性值
    jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
    但是jsp:setProperty对于复合数据类型无法自动转换
    --%>
    <jsp:setProperty property="name" name="person" value="小小高"/>
    <jsp:setProperty property="sex" name="person" value="男"/>
    <jsp:setProperty property="age" name="person" value="21"/>
    <%--
    birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
    <jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
    --%>
    <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>jsp:getProperty操作实例</title>
      </head>
      
      <body>
        <%--使用jsp:getProperty标签获取对象的属性值 --%>
        <h2>姓名:<jsp:getProperty property="name" name="person"/></h2>
        <h2>性别:<jsp:getProperty property="sex" name="person"/></h2>
        <h2>年龄:<jsp:getProperty property="age" name="person"/></h2>
        <h2>出生日期:<jsp:getProperty property="birthday" name="person"/></h2>
      </body>
    </html>
    

      

  • 相关阅读:
    es6语法快速上手(转载)
    width百分比
    利用switch case 来运行咱们结婚吧
    利用if else来运行咱们结婚吧
    利用if else 来计算车费
    利用switch case判断是今天的第多少天
    利用if else判断是否及格
    利用if,else判断输入的是不是一个正整数
    再练一遍猜拳
    用if else 判断是不是7的倍数等
  • 原文地址:https://www.cnblogs.com/x-ll123/p/7279913.html
Copyright © 2011-2022 走看看