专栏首页Java3yJSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】

JSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】

什么是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:useBean【在JSP页面中查找javaBean对象或者实例化javaBean对象】
    • jsp:setProperty【设置javaBean的属性】
    • jsp:getProperty【获取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:setProperty了来看看:
    <jsp:useBean id="person" class="domain.Person" scope="page"/>

    <%--指定属性名称为age--%>
    <jsp:setProperty name="person" property="age"/>
    <%
        System.out.println(person.getAge());
    %>
  • 也可以完成,并且代码更少,功能更强大
  • 代码更少可以直观看出来,为什么我说它功能更加强大呢?表单提交过来的数据都是字符串,在我们没有用jsp:setProperty前,我们存储设置int类型或其他非字符串类型的数据是需要强转的!但是jsp:setProperty不需要我们强转,它内部自动帮我们转换了
  • 我们再来使用一下自动匹配来感受它的强大之处吧
    <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"/>
  • 效果:
  • 原理如下

如果文章有错的地方欢迎指正,大家互相交流。

本文分享自微信公众号 - Java3y(gh_085b56c42174)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最新Java高薪面试题+答案+解析!

    今天老九君给大家分享一些Java面试需要的题目哟~ 01 anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类,是否可以im...

    老九君
  • 深入剖析:认识Oracle 中的 NULL 值

    杨廷琨,网名 yangtingkun 云和恩墨技术总监,Oracle ACE Director,ACOUG 核心专家 经常看到很多人提出和NULL有关的问题。N...

    数据和云
  • 【超详细】20K以上的高薪Java程序员所需技能大汇总

    总所周知,Java是目前使用最为广泛的网络编程语言之一。 它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点。 一般的JAVA程序员或许只需知...

    老九君
  • 干货 | Java 中不得不知的异常和处理详解

    简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用...

    老九君
  • 必看 | 新人必看的Java基础知识点大梳理

    各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的“冰镇西瓜,”给大家清凉一下,压压惊。但这个大西瓜可不是一般的大西瓜,是...

    老九君
  • 【干货】20K以上的高薪Java必掌握的基础知识点(二)

    怎么样!上一期的知识点小伙伴都掌握了多少呢?复习的同时有没有查漏补缺的巩固自己的基础知识呢?今天我们来复习Java基础知识第二期! 61、Math 类提供了许多...

    老九君
  • 【超详细】Java入门学习进阶知识点汇总

    入门阶段,主要是培养Java语言的编程思想。了解Java语言的语法,书写规范等,掌握Eclipse、MyEclipse等开发工具,编写Java代码的能力。学完这...

    老九君
  • 【新手必读】Java初学者,你遇到的问题都在这了

    我们在初次接触某种编程语言时,都会有许许多多的疑问和困惑,老九君收集了小伙伴遇到的一些常见的Java基础问题,希望能对大家的Java学习有所帮助。 初识篇 1、...

    老九君
  • 【新手必读】Java初学者,你遇到的问题都在这了

    很多小伙伴初次接触Java时往往会感觉十分迷茫,在这里老九君收集并解答了同学们遇到的一些基础问题,希望能对大家的Java学习之路有所帮助。 初识篇 1、什么是J...

    老九君
  • 这是篇Java数据库开发的干货,你确定不收藏吗?

    无论你开发的是一款PC端的Web应用,还是一款移动端的app,都需要一个数据库来存储你的业务数据(包括电商的商品信息、游戏的道具信息、社交的人员信息等等)。可以...

    老九君

扫码关注云+社区

领取腾讯云代金券