什么是javaBean

  • JavaBean就是一个普通的java类,也称之为简单java对象–POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基于 Java 平台的软件组件思想
  • JavaBean遵循着特定的写法,通常有以下的规则:

    • 有无参的构造函数
    • 成员属性私有化
    • 封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法
  • 上面的文字看起来好像很高大上,javaBean其实非常简单,下面的代码就是按照特定写法、规则编写的一个JavaBean对象



    public class Person {
private String username ;
private int age; public Person() { } public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

为什么需要使用Javabean

  • 使用javaBean的好处就是:封装,重用,可读
  • 下面引用知乎一段回答:

JaveBean你可以理解为一辆货车,在你的java端和web页面进行数据传递的载体,你当然可以每个变量单独传递,或者使用集合传递,但是javabean可以使你的数据更有可读性,方便开发时明确变量的意义,也使其他阅读你代码的人能直接你的意图

如果把bean类与数据库联合使用,一张表使用bean类,可以使你的代码更加简洁高效,易于理解,现在大多数框架都会使用这种机制。


JSP行为–JavaBean

  • JSP技术提供了三个关于JavaBean组件的动作元素,即JSP行为(标签),它们分别为:

    • 【在JSP页面中查找javaBean对象或者实例化javaBean对象】
    • 【设置javaBean的属性】
    • 【获取javaBean的属性】

<jsp:useBean>

  • <jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象

    • 存在则直接返回该JavaBean对象的引用
    • 不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中
  • 语法:


<jsp:useBean id="实例化对象的名称" class="类的全名" scope="保存范围"/>
  • 如果JSP不支持<jsp:useBean>这个行为,我们要使用Person类是这样使用的

<%--这里需要导入Person类--%>
<%@ page import="domain.Person" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body> <%
//new出对象
Person person = new Person(); person.setName("zhongfucheng");
System.out.println(person.getName());
%> </body>
</html>
  • 效果如下

  • 我们使用<jsp:useBean>就显得非常简洁,不用导包,不用new出对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body> <jsp:useBean id="person" class="domain.Person" scope="page"/>
<%
person.setName("zhongfucheng");
System.out.println(person.getName());
%>
</body>
</html>
  • 也可以实现同样的效果:

  • 有人可能会想,凭什么写一个<jsp:useBean>这样的代码就可以创建出一个对象出来
  • 现在我把JavaBean中无参的构造函数改成有参的,我们看看会出现什么情况,出现异常了!

public Person(int age) {
this.age = age;
}

  • <jsp:useBean id="person" class="domain.Person" scope="page"/>内部原理是这样子的:

  • 通过上面的代码我们也知道了为什么要有一个无参的构造函数内部在new 对象的时候是没有传递参数进去的!

<jsp:setProperty>

  • 语法:

<jsp:setProerty name="对象名称" property="属性名" param="参数名" value="值">
  • 在语法上可分为4种模式

    • 自动匹配
    • 指定属性
    • 指定参数【很少用】
    • 指定内容【很少用】
  • 我们没有学习到<jsp:setProperty>,我们获取表单的信息,然后导入到javaBean对象中是这样的一种情况

  • 这是表单的页面代码


<form action="/zhongfucheng/1.jsp" method="post">
用户名:<input type="text" name="username">
年龄:<input type="text " name="age">
<input type="submit" value="提交">
</form>
  • 这是处理表单提交过来数据的jsp的代码


    <jsp:useBean id="person" class="domain.Person" scope="page"/>
<%
int age = Integer.parseInt(request.getParameter("age")); person.setAge(age); System.out.println(person.getAge()); %>
  • 这是可以完成的,但是相对来说,比较麻烦!

  • 我们来使用了来看看:

<jsp:useBean id="person" class="domain.Person" scope="page"/> <%--指定属性名称为age--%>
<jsp:setProperty name="person" property="age"/>
<%
System.out.println(person.getAge());
%>
  • 也可以完成,并且代码更少,功能更强大

  • 代码更少可以直观看出来,为什么我说它功能更加强大呢?表单提交过来的数据都是字符串,在我们没有用前,我们存储设置int类型或其他非字符串类型的数据是需要强转的!但是不需要我们强转,它内部自动帮我们转换了
  • 我们再来使用一下自动匹配来感受它的强大之处吧

<jsp:useBean id="person" class="domain.Person" scope="page"/> <%--property的值设置为*就代表自动匹配--%>
<jsp:setProperty name="person" property="*"/>
<%
System.out.println(person.getAge());
System.out.println(person.getName());
%>
  • 我们再来看一下效果:

  • 看到这里,有人可能会觉得好神奇:只要设置property的值就可以将表单传递过来的数据封装到JavaBean对象中了!这究竟是这样做到的???
  • 细心的朋友会发现,JavaBean的属性名称和表单的name属性设置的名称是一模一样的

private String username ;
private int age; 用户名:<input type="text" name="username">
年龄:<input type="text " name="age">
  • 如果我设置不一样还能不能用?我们试试:表单name属性的username改成是user

用户名:<input type="text" name="user">
  • 我们再来看看还能不能把表单的数据完整地封装JavaBean对象中

  • 我们可以发现:要想能够把表单带过来的数据成功封装到JavaBean对象上,名字要一致!也就是说:JavaBean属性名要和表单的name的名称一致
  • 至于原理,它是通过反射来做的,调用了内省的方法!,我们看编译后的JSP就明白了。


<jsp:getProperty>

  • 语法:

  • 该jsp行为十分简单,我们来使用一下就知道了。


<%--使用<jsp:getProperty>输出--%>
<jsp:getProperty name="person" property="username"/>
<jsp:getProperty name="person" property="age"/>
  • 效果:

  • 原理如下


JSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】的更多相关文章

  1. 第三篇:RESTful介绍

    在介绍restful之前先放一张从之前文章评论里看到的图,我觉得它把soap和rest之间的一些区别形容地非常形象. 在第一篇和第二篇中我们也介绍过,soap协议传递的报文要基于xml格式的soap消 ...

  2. cocos2d-x 第三篇 基本概念介绍

    场景(scene): 也有人叫做屏幕或舞台,是一个独立的程序流,一个程序可以有很多场景但当前运行的场景就只有一个.比如游戏中可以有介绍场景,菜单场景,第一关场景,过场1场景,第二关场景,胜利场景等.一 ...

  3. SlidingMenu第三篇 --- SlidingMenu使用介绍

    在Activity中通过SlidingMenu的构造方法,直接设置侧滑菜单 public class Main2Activity extends Activity { @Override protec ...

  4. Java EE基础之JSP(三)

         原来准备简单点,用一篇文章介绍完JSP的,没想到细节很多.这是第三篇也是最后一篇,这三篇文章介绍了基本的JSP知识,很多名词概念和用法,一定要在实践项目中使用之后才会有更加亲切的体会.第三篇 ...

  5. 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)

    该篇是 Grissom.CMS 框架系列文章的第三篇, 主要介绍框架用到的核心库 EasyJsonToSql, 把标准的配置文件和数据结构解析成可执行的 sql. 该框架能实现自动化增删改查得益于 E ...

  6. [应用篇]第三篇 JSP 标准标签库(JSTL)总结

    有一种友谊叫做: "陪我去小卖部." "不去," "我请你" "走." 你想起了谁:胖先生?还有人陪你吗? JSP 标准 ...

  7. JavaWeb学习总结第三篇--走进JSP页面元素

    JavaWeb学习(三)—走进JSP页面元素 JSP:Java Server Pages,译为Java服务器页面.其脚本采用Java语言,继承了Java所有优点.JSP元素可以分为指令元素.脚本元素和 ...

  8. 写一篇博文介绍JSP

    一.JSP概述 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的 ...

  9. Javabean及其在jsp中的应用

    Javabean及其在jsp中的应用 一.Javabean简介 用作JavaBean的类必须具有一个公共的.无参数的构造方法. JavaBean的属性与普通Java类的属性的概念不一样,JavaBea ...

随机推荐

  1. 如何设计和实现一个web app

    web app简介 web app其实不算是什么新鲜的东西,相比于传统的web和传统的app,web app这种web和app相结合的产物有的优点如下: 1. 开发上web app更有便捷性,ios开 ...

  2. 【Ubuntu 16】安装net-snmp

    使用tar.gz压缩包安装mongodb时报错,没有库文件 libnetsnmpmibs.so.3o cannot open file or directory 在网上找了一篇文章 需要安装net-s ...

  3. spring boot / cloud (二) 规范响应格式以及统一异常处理

    spring boot / cloud (二) 规范响应格式以及统一异常处理 前言 为什么规范响应格式? 我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队 ...

  4. Nodejs进阶:使用DiffieHellman密钥交换算法

    ## 简介 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥.目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端.服务端利 ...

  5. Struts2拦截器配置实例

    拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...

  6. Android 7.0 Power 按键处理流程

    Android 7.0  Power 按键处理流程 Power按键的处理逻辑由PhoneWindowManager来完成,本文只关注PhoneWindowManager中与Power键相关的内容,其他 ...

  7. Java 逆变与协变

    最近一直忙于学习模电.数电,搞得头晕脑胀,难得今天晚上挤出一些时间来分析一下Java中的逆变.协变.Java早于C#引入逆变.协变,两者在与C#稍有不同,Java中的逆变.协变引入早于C#,故在形式没 ...

  8. HDMI转MIPI DSI芯片方案TC358870XBG

    型号:TC358870XBG功能:HDMI1.4b转MIPI DSI通信方式:IIC分辨率:2560*1600@60fps/4k*2k@30fps电源:3.3/1.8/1.2/1.1封装形式:BGA8 ...

  9. C++栈和堆的生长方向

    C++内存区域分为5个区域.分别是堆,栈,自由存储区,全局/静态存储区和常量存储区. 栈:由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区.里面通常是局部变量,函数参数等. 堆:由new分 ...

  10. ABP 框架学习-01篇

    从来没有自己写过太多的技术性文章,博客里面的文章都是拷贝别人的东西,做一个笔记功能给自己用的.最近觉得应该写点自己的学习博客 https://aspnetboilerplate.com/ ABP框架, ...