Javabean基础知识

来源:互联网 发布:女生香水 知乎 编辑:程序博客网 时间:2024/06/03 17:17

Javabean简介

Javabeans就是符合某种特定的规范的Java类。使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。

Javabean的设计原则
是一个公有的类
包含无参的公有构造方法
属性是私有的
属性使用getter和setter方法

JSP动作元素

JSP动作元素,动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。

有五类JSP动作元素
第一类是与存取JavaBean有关的,包括:

<jsp:useBean><jsp:setProperty><jsp:getProperty>

第二类是JSP1.2就开始有的基本元素,包括6个动作元素

<jsp:include><jsp:forward><jsp:param><jsp:plugin><jsp:params><jsp:fallback>

第三类是JSP2.0新增加的元素,主要与JSP Document有关,包括六个元素

<jsp:root><jsp:declaration><jsp:scriptlet><jsp:expression><jsp:text><jsp:output>

第四类是JSP2.0新增加的元素,主要用来动态生成XML元素标签的值,包括3个动作

<jsp:attribute><jsp:body><jsp:element>

第五类是JSP2.0新增加的元素,主要用在Tag File中,有两个元素

<jsp:invoke><jsp:dobody>

我们要看的就是第一类,与存取JavaBean有关的

在JSP页面中如何使用Javabeans

1.像使用普通java类一样,创建javabean实例。

建一个用户类,遵循javabean的设计原则

package com.po;/* * 用户类 * */public class Users {    private String username;//用户名    private String password;//密码    //保留此默认的构造方法    public Users()    {    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }   }

在jsp页面中使用的时候,可以使用page的import属性将它导入

<%@ page import="com.po.Users" %>

然后是使用:

    <%        Users user = new Users();       user.setUsername("admin"); //设置用户名       user.setPassword("123456");//设置密码    %>    <h1>使用普通方式创建javabean的实例</h1>    <hr>       用户名:<%=user.getUsername() %><br>       密码:<%=user.getPassword() %><br>

2.在JSP页面中通常使用jsp动作标签使用javabean。

useBeans动作
setProperty动作
getProperty动作

1.useBean动作标签

<jsp:useBeans>

作用:在jsp页面中实例化或者在指定范围内使用javabean:

<jsp:useBean id="标示符" class="java类名" scope="作用范围"/>

这里就不需要page指令来引入
代码如下:

  <body>    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>    <h1>使用useBean动作创建javabean的实例</h1>    <hr>       用户名:<%=myUsers.getUsername() %><br>       密码:<%=myUsers.getPassword() %><br>  </body>

不过这里获得的值都为null,因为没有对username和password进行初始化,可以用setProperty来初始化。

2.setProperty动作标签

<jsp:setProperty>

作用:给已经实例化的Javabean对象的属性赋值,一共有四种形式

<jsp:setProperty name="JavaBean实例名" property="*"/>(跟表单关联)<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名"/>(跟表单关联)<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue"/>(手工设置)<jsp:setProperty name="JavaBean实例名" property="propertyName" param="request对象中的参数名"/>(跟request参数关联)

第一种形式,name是我们要实例化JavaBean的id或者说名字,property的 * 表示要根据表单提交过来的参数的名字和JavaBean中的属性的名字进行一一匹配,如果匹配上了就自动赋值。
既然和表单相关联,所以要在项目中创建一个表单,可以创建一个用户登录界面

<body>    <h1>系统登录</h1>    <hr>    <form name="loginForm" action="dologin.jsp?mypass=999999" method="post">      <table>        <tr>          <td>用户名:</td>          <td><input type="text" name="username" value=""/></td>        </tr>        <tr>          <td>密码:</td>          <td><input type="password" name="password" value=""/></td>        </tr>        <tr>          <td colspan="2" align="center"><input type="submit" value="登录"/></td>        </tr>      </table>    </form>  </body>

然后是dologin.jsp页面,里边重点讲解setProperty动作元素的使用。
要用到JavaBean所以要用useBean来实例化一个对象,同时后边还要显示用户名和密码

  <body>    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>    <h1>setProperty动作元素</h1>    <hr>   <!--根据表单自动匹配所有的属性 -->   <%--    <jsp:setProperty name="myUsers" property="*"/>     --%>   <!--根据表单匹配所有部分的属性 -->   <%--    <jsp:setProperty name="myUsers" property="username"/>     --%>   <!--根表单无关,通过手工赋值给属性 -->   <%--    <jsp:setProperty name="myUsers" property="username" value="lisi"/>   <jsp:setProperty name="myUsers" property="password" value="888888"/>   --%>   <!--通过URL传参数给属性赋值 -->   <jsp:setProperty name="myUsers" property="username"/>   <jsp:setProperty name="myUsers" property="password" param="mypass"/>   <!-- 使用传统的表达式方式来获取用户名和密码 -->   <%--            用户名:<%=myUsers.getUsername() %><br>       密码:<%=myUsers.getPassword() %><br>    --%>   <!-- 使用getProperty方式来获取用户名和密码 -->      用户名:<jsp:getProperty name="myUsers" property="username"/> <br>      密码:<jsp:getProperty name="myUsers" property="password"/><br>   <br>   <br>      <a href="testScope.jsp">测试javabean的四个作用域范围</a>      <%          request.getRequestDispatcher("testScope.jsp").forward(request, response);      %>  </body>

注意setProperty动作标签里的name和useBean动作标签的内容是一样的。
第一种方式里,这里边会到User类中看是否有对应的属性username和password,如果有就会自动调用set方法,将表单提交过来的用户名和密码给这个属性来赋值。
第二种方式没有用 * ,所以不会自动匹配所有属性,对部分属性进行匹配。
第三种方式的话,表单上边写的是没有作用的,username和password都给定了。
第四种,param是通过url地址传参的方式,在login.jsp中,传过来一个参数mypass,这样用户名是自己写的,密码就是这个mypass的值。

3.getProperty动作标签

<jsp:getProperty>

作用:获取指定Javabean对象的属性值。

<jsp:getProperty name="JavaBean实例名" property="属性名"/>

在前边的例子的代码中已经实现了,详情看前边的代码。

JavaBean四个作用域范围

说明:使用useBeans的scope属性可以用力啊指定javabean的作用范围

作用域范围有四种,如下:
page:仅在当期页面有效
request:可以通过HttpRequest.getAttribute()方法取得JavaBean对象
session:可以通过HttpSession.getAttribute()方法取得JavaBean对象
application:可以通过application.getAttribute()方法取得JavaBean对象

新建一个testScope.jsp来测试作用范围
在前边的dologin.jsp下边加一个超链接,链接到testScope.jsp
在testScope.jsp中新建一个javabean。若在dologin设置作用范围是application,这是最大的(全局),然后在testScope也设置application,那么在testScope中可以获得用户名和密码。获取用户名和密码的时候也可以通过getProperty来实现,也可以用内置对象获取(需要用page指令将User引入)。
不仅是application,都写为session也可以。
request不可以,因为超链接等于是一次请求重定向,请求重定向就相当于发送了一次新的请求,而这个请求里并没有myUsers这个JavaBean实例。可以使用服务器内部转发来实现,request.getRequestDispatcher("testScope.jsp").forward(request, response);
page的范围是最小的,只在当前的页面有效,所以不管是请求重定向还是请求转发都不行。

  <body>    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>    <h1>setProperty动作元素</h1>    <hr>   <!--根据表单自动匹配所有的属性 -->   <%--    <jsp:setProperty name="myUsers" property="*"/>     --%>   <!--根据表单匹配所有部分的属性 -->   <%--    <jsp:setProperty name="myUsers" property="username"/>     --%>   <!--根表单无关,通过手工赋值给属性 -->   <%--    <jsp:setProperty name="myUsers" property="username" value="lisi"/>   <jsp:setProperty name="myUsers" property="password" value="888888"/>   --%>   <!--通过URL传参数给属性赋值 -->   <jsp:setProperty name="myUsers" property="username"/>   <jsp:setProperty name="myUsers" property="password" param="mypass"/>   <!-- 使用传统的表达式方式来获取用户名和密码 -->   <%--            用户名:<%=myUsers.getUsername() %><br>       密码:<%=myUsers.getPassword() %><br>    --%>   <!-- 使用getProperty方式来获取用户名和密码 -->      用户名:<jsp:getProperty name="myUsers" property="username"/> <br>      密码:<jsp:getProperty name="myUsers" property="password"/><br>   <br>   <br>      <a href="testScope.jsp">测试javabean的四个作用域范围</a>      <%          request.getRequestDispatcher("testScope.jsp").forward(request, response);      %>  </body>