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

什么是javaBean

  • JavaBean就是一个普通的java类,也称之为简单java对象--POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基于 Java 平台的软件组件思想html

  • JavaBean遵循着特定的写法,一般有如下的规则:java

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

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对象并将它以指定的名称存储到指定的域范围中
  • 语法:dom

<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

    • <jsp:setProperty name="对象名称" property="*"/>自动匹配
    • <jsp:setProperty name="对象名称" property="属性名称"/>指定属性
    • <jsp:setProperty name="对象名称" property="属性名称" param="参数名称"/>指定参数【不多用】
    • <jsp:setProperty name="对象名称" property="属性名称" value="内容"/>指定内容【不多用】
  • 咱们没有学习到<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:getProperty name="对象名" property="属性名"/>
  • 该jsp行为十分简单,咱们来使用一下就知道了。

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

 

 

  • 原理以下

 

 

若是文章有错的地方欢迎指正,你们互相交流。习惯在微信看技术文章的同窗,能够关注微信公众号:Java3y

相关文章
相关标签/搜索