javaBean详解

参考:http://zhaoyuqiang.blog.51cto.com/6328846/1134056

1、javaBean是什么

JavaBean是使用Java语言开发的一个可重用的组件,其本身是一个类,属于Java的面向对象编程。在jsp的开发中可以使用javaBean减少重复代码,使整个jsp代码的开发更简洁。使用JavaBean必须要满足的条件是(重点记忆):

  • 所有的JavaBean类必须要放在包中
  • 类必须是public
  • 类中所有的属性必须要封装(就是用private修饰)
  • 封装的属性如果需要被外部所操作,必须要编写setter、getter方法
  • 必须要含有不带参数的构造方法
    一个JavaBean示例如下:

    package javaBean01;    //必须放在包中
    public class SimpleBean {  
    private String name;    //必须封装
    private int age;  
    public SimpleBean(){    //无参构造方法
    
    }  
    public void setName(String name){  
        this.name=name;  
    }  
    public void setAge(int age){  
        this.age=age;  
    }  
    public String getName(){  
        return this.name;  
    }  
    public int getAge(){  
        return this.age;  
    }  
    }  

2、使用JavaBean

既然有javaBean了,那我们的jsp怎么使用javaBean呢?

(1)new实例化Javabean

把Javabean当成一般的Java类,通过new实例化,但是实例化之前一定要导入Javabean这个类
示例:

<%@page import="javaBean01.simpleBean"%><!-- 导入包-->
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'javaBean_01.jsp' starting page</title>
  </head>

  <body>
    <%
        simpleBean sb=new simpleBean();
        sb.setName("Tom");
        sb.setAge(21);
    %>
    姓名:<%=sb.getName() %><br>
    年龄:<%=sb.getAge() %><br>
  </body>
</html>

执行结果:
这里写图片描述

(2)<jsp:useBean>指令

指令语法为:

<jsp:useBean id="实例化对象名称" scope="保存范围" class="包.类名称"/>
  • id:表示实例化对象的名称
  • scope:表示此对象保存的范围,一共有四种:page、request、session和application
  • class :JavaBean对象所对应的包.类名称

    示例(javaBean_01.jsp):

 <%@ page language="java" contentType="text/html; charset=utf-8"%>
<jsp:useBean id="javabean" scope="page" class="javaBean01.simpleBean"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'javaBean_01.jsp' starting page</title>
  </head>

  <body>
    <%
        javabean.setName("vivien");
        javabean.setAge(21);
    %>
    姓名:<%=javabean.getName() %><br>
    年龄:<%=javabean.getAge() %><br>
  </body>
</html>

浏览器显示:
这里写图片描述
这里id的值相当于实例化了一个对象。class就是我们的包.类名称,实际上在使用以上标签的时候,都会自动调用javaBean中的无参构造方法,其实这里是使用反射机制进行的实例化
注意:当javaBean也就是SimpleBean.java这个页面修改后,一定要重启服务器,否则不会显示修改内容。

(3)setProperty

这里写图片描述
第一种使用示例:
这个是和表单关联的,首先新建一个含有表单的form.jsp

<body>
    <form action="jsp/work.jsp" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <!--这里的name属性的值一定要和JavaBean中的name名字相同,age也是如此-->
                <td><input type="text" name="name" value=""></td>
            </tr>
            <tr>
                <td>年龄:</td>
                <td><input type="text" name="age" value=""></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input value="提交" type="submit"></td>
            </tr>
        </table>
    </form>
  </body>

work.jsp:

 <body>
    <jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
   <!--在这里因为前面form中的name、age和Javabean中一样,所以进行了自动匹配,property="*",表示匹配的属性是所有的,如果property="name",那么只匹配name,age值就为空,这也是接下来讲的第二种-->
    <jsp:setProperty name="sb" property="*" />
    用户名:<%=sb.getName() %><BR>
    年龄:<%=sb.getAge() %><BR>
  </body>

结果:
这里写图片描述

这里写图片描述

第二种使用示例:
与第一种差不多,区别就是指定了匹配哪些属性
其他不变,把work.jsp的property改为age,表示只匹配age:

<body>
    <jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
    <jsp:setProperty name="sb" property="age" />
    用户名:<%=sb.getName() %><BR>
    年龄:<%=sb.getAge() %><BR>
  </body>

结果显示:
这里写图片描述

这里写图片描述

第三种使用示例:
这种方法和表单无关了,只是手工设置
work.jsp修改如下:

 <body>
    <jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
    <jsp:setProperty name="sb" property="name" value="lisi"/>
    <jsp:setProperty name="sb" property="age" value="20"/>
    用户名:<%=sb.getName() %><BR>
    年龄:<%=sb.getAge() %><BR>
  </body>

显示结果:
这里写图片描述

这里写图片描述
尽管在form.jsp中设置了name=”zhangsan”,age=11,但是在work.jsp因为通过value重新设置了值,所以显示不同

第四种使用示例:
这种方法一般用于获得request参数里面带有的值
form.jsp其他地方不变,改变action属性添加newname参数:

<form action="jsp/work.jsp?newname=vivien" method="post">
......

work.jsp:

<body>
    <jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
    <jsp:setProperty name="sb" property="name" param="newname"/>
    <jsp:setProperty name="sb" property="age"/>
    用户名:<%=sb.getName() %><BR>
    年龄:<%=sb.getAge() %><BR>
  </body>

显示结果:
这里写图片描述
这里写图片描述

(4)getProperty

作用:获取指定Javabean对象的属性值
<jsp:getProperty name="JavaBean实例名" property="属性名"/>
work.jsp代码:

<body>
    <jsp:useBean id="sb" class="javaBean01.simpleBean" scope="page"/>
    <jsp:setProperty name="sb" property="*"/>
    用户名:<jsp:getProperty property="name" name="sb"/><BR>
    年龄:<jsp:getProperty property="age" name="sb"/><BR>
  </body>

3、工作路径问题

这里写图片描述
在项目底下有如上图所示的结构,jsp是jsp页面,js是javascript小脚本,css是样式,images是图片存放区,index.jsp一般作为主页面显示。WEB-INF里面的lib是存放jar包的,classes是存放.java文件的。
大家在学习java的时候应该都知道,.java文件必须编译成.class文件才能使用。javaBean本身是一个.java文件,那么它被编译成.class文件后放在哪儿呢? 就放在上图中的classes中,打开这个文件夹,可以看到一个javaBean01的文件夹,这个文件夹实际上是SimpleBean.java的包。这个文件里面才是.class文件,也就是我们的SimpleBean.java。
实际上在WEB-INF中的lib和classes文件夹相当于一个默认的classpath,classpath是类执行时所需要的一个重要的环境变量属性,当Tomcat启动后,WEB-INF的lib和classes都会自动配置到classpath中。

注意:如果JavaBean中文件内容发生了更改,一定要重启服务器!!!这个很重要,今天碰到这个问题,因为没有重启服务器,一直报错!!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值