JavaBeans

来源:互联网 发布:java 动态合成图片 编辑:程序博客网 时间:2024/03/29 23:25

1.JavaBean简介及设计原则

JavaBean简介及设计原则
JavaBeans就是符合某种特定的规范的Java类。使用javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。
javabean的设计原则
1、必须是一个公有的类
2、必须包含有一个无参的公有构造方法
3、属性必须是私有的
4、使用getter和setter方法对私有属性进行封装。
举例:

public class Students{   //公有类private String name;    //私有属性private ing age;public Studengs(){}     //公有无参构造方法public void setName(String name){     //使用了setter方法封装this.name = name;}public String getName(){        //使用了getter方法封装ruturn this.name;}public void setAge(ing age){this.age = age;}public int getAge(){return this.age;}}

2.什么是JSP动作元素

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

第一类是与存取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中,有2个元素<jap:invoke> <jsp:dobody>

3.使用普通方式创建JavaBean

像使用普通java类一样,创建javabean实例,可以new一个。
1、创建一个web project项目。
2、在src文件下,创建一个包,在包中创建一个类,满足设计原则即可
3、在index.jsp页面中通过import导入之前创建的类(import=”包名.类名”)
4、通过使用new创建Javabean实例(创建对象)
5、使用set方法赋值
6、使用get方法取值

package com;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;    }}
<%@ page language="java" import="java.util.*,com.Users" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><h1>使用普通方式创建JavaBean的实例</h1><%    Users user=new Users();    user.setUsername("admin");    user.setPassword("123456");%><hr>用户名:<%=user.getUsername() %><br>密码:<%=user.getPassword() %><br></body></html>

4.useBean动作元素

这里来介绍另一种使用javabeans的方法,在jsp页面中通常使用jsp动作标签使用javabean,究竟要使用哪些动作标签呢?分别是:
useBeans动作
setProperty动作
getProperty动作

<jsp:useBeans>作用:在jsp页面中实例化或者在指定范围内使用javaBean语法:<jsp:useBean id="标示符" class="java类名" scope="作用范围"/>jsp动作元素,useBean就是对应的动作,java的类名应该是一个全名包括包名

下面我们来举一个例子

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

5.setProperty


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

  • <jsp:setProperty name="JavaBean实例名" property="*" />(跟表单关联),这个星号表示根据这个表单所提交过来的参数的名字来和我javabeans当中的属性名来进行一一匹配,如果匹配上了就自动赋值。
    下面表示一个实例,做一个用户登陆的界面:
login.jsp<body><h1>系统登陆</h1><hr><form name="loginform" action="dologin.jsp" 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<body><jsp:useBean id="myUsers" class="com.Users" scope="page"/><h1>setProperty动作元素</h1><hr><!--根据表单自动匹配所有的属性 --><jsp:setProperty name="myUsers" property="*"/>用户名:<%=myUsers.getUsername() %><br>密码:<%=myUsers.getPassword() %><br></body>
  • <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" />(跟表单关联),对部分属性就行匹配,也就是对指定的属性名进行匹配
  • <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue"/>(手工设置)
  • <jsp:setProperty name="JavaBean实例名" property="propertyName属性名" param="request对象中的参数名"/>(跟request参数关联)不一定是表单传参,也有可能是url传参
<form name="loginform" action="dologin.jsp?mypass=999999" method="post"><jsp:setProperty property="password" name="myUsers" param="mypass"/>

6.getProperty

作用:获取指定Javabean对象的属性值
<jsp:getProperty name="javaBean实例名" property="属性名"/>
例子:

用户名:<jsp:getProperty name="myUsers" property="username"/><br>密 码:<jsp:getProperty name="myUsers" property="password"/>

7.JavaBean四个作用域范围

说明:使用userBeans的scope属性可以用来指定javabean的作用范围

  • page(仅在当前页面有效)
  • request(可以通过HttpRequest.getAttribute()方法获取javabean对象)
  • session(可以通过HttpSession.getAttribute()方法获取javabean对象)
  • application(可以通过ServletContext.getAttribute()方法获取javabean对象)
    application、session 可以直接获取javabean对象
    request 需要请求转发request.getRequestDispatcher(“xxx.jsp”).forward(request,response);获取javabean对象
    page pageContext不能获取javabean对象

测试作用域的范围,先做一个登陆的login.jsp,将信息提交到dologin.jsp,在这之中设置javaBean的作用域范围,同时添加一个超链接到testScope.jsp,在这之中看是否能查到用户名和密码信息。

  • 首先在使用application时可以正常得到结果,也可以直接使用另一种内部对象的方法。
<h1>javaBean的四个作用域范围</h1><jsp:useBean id="myUsers" class="com.Users" scope="application"/><hr>用户名:<%=myUsers.getUsername() %><br>密码:<%=myUsers.getPassword() %><br><!-- 使用内部对象的方法来得到属性值 -->用户名:<%=((Users)application.getAttribute("myUsers")).getUsername() %>密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %>
  • 下面来看session范围,我们知道打开超链接也属于一个会话范围。
<h1>javaBean的四个作用域范围</h1><jsp:useBean id="myUsers" class="com.Users" scope="session"/><hr>用户名:<%=myUsers.getUsername() %><br>密码:<%=myUsers.getPassword() %><br><!-- 使用内部对象的方法来得到属性值用户名:<%=((Users)application.getAttribute("myUsers")).getUsername() %>密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %> --> <!-- 使用内部对象的方法来得到属性值 -->用户名:<%=((Users)session.getAttribute("myUsers")).getUsername() %>密码:<%=((Users)session.getAttribute("myUsers")).getPassword() %>
  • 这里测试request
<jsp:useBean id="myUsers" class="com.Users" scope="request"/><hr>用户名:<%=myUsers.getUsername() %><br>密码:<%=myUsers.getPassword() %><br>用户名:<%=((Users)request.getAttribute("myUsers")).getUsername() %>密码:<%=((Users)request.getAttribute("myUsers")).getPassword() %>

结果都为null,这个原因也很简单,因为我们知道超链接是请求重定向,就是相当于发了一次新的请求,所以这个请求里并没有myUsers javabean对象,是获取不到用户名和密码的。
那么如何保证访问testScope.jsp的请求和dologin请求一样呢?我们这块就不能使用请求重定向了,我们可以使用服务器内部转发。

<%    request.getRequestDispatcher("testScope.jsp").forward(request,response);%>
  • 最后测试page对象,page只在当前页面有效,这个范围就是最小的。测试不管是重定向或者转发结果都为null。
<%String username1="";String password1="";if(pageContext.getAttribute("myUsers")!=null){    username1=((Users)pageContext.getAttribute("myUsers")).getUsername();    password1=((Users)pageContext.getAttribute("myUsers")).getPassword();   }%>用户名:<%=username1%>密码:<%=password1%>

8.Model1简介

Model1简介
1:Model1模型出现前,整个web应用的情况:几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应。
弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层的代码,Web程序的可扩展性和可维护性非常差。
2:javabean的出现可以使jsp页面中使用Javabean封装的数据或者调用Javabean的业务逻辑代码,这样大大提升了程序的可维护性

Model1分为三层(jsp+JavaBean):
1.界面层:由JSP页面进行与客户端浏览器的交互,可以直接调用JavaBeans
2.业务逻辑层:由JavaBeans进行处理业务逻辑,封装数据,并与数据库层进行交互
3.数据库层:底层数据库,可被javaBeans访问
避免了JSP页面直接进行业务逻辑处理所带来的维护性,扩展性差的弱点.体现了分层设计的思想
这里写图片描述

Model1:jsp+javabean,其中jsp为表示层和控制层,javabean为模式层
Model2:jsp+servlet+javabean,jsp为表示层,servlet为控制层,javabean为模式层
模式层Model,表示层View,控制层Control,合起来即为MVC。

原创粉丝点击