武汉学院-信工学院-欧阳小伟

JSP和JavaBean

Web开发基础
武汉学院-信工学院-欧阳小伟

本章教学内容

  • 认识JavaBean
  • 编写/使用JavaBean
  • JavaBean的范围
  • DAO(Data Access Object)
Web开发基础
武汉学院-信工学院-欧阳小伟

认识JavaBean

Bean是什么意思?

  • 豆子、豆荚
Web开发基础
武汉学院-信工学院-欧阳小伟

认识JavaBean

  • 在程序的语境下象征着封装
Web开发基础
武汉学院-信工学院-欧阳小伟

认识JavaBean

那为什么JSP要使用JavaBean进行封装?

Web开发基础
武汉学院-信工学院-欧阳小伟

JSP的既要又要

  • 既要: 在jsp中编写(缝合)html/java代码
  • 又要: 可以有java代码,但不能太多
Web开发基础
武汉学院-信工学院-欧阳小伟

使用JavaBean前

Web开发基础
武汉学院-信工学院-欧阳小伟

使用JavaBean后

Web开发基础
武汉学院-信工学院-欧阳小伟

认识JavaBean

  • 广义:普通的Java类
  • 狭义:严格按照JavaBean规范来编写的Java类
Web开发基础
武汉学院-信工学院-欧阳小伟

编写JavaBean

[本机实操演示]

package beans;

public class Student {
	private String stuno;
	private String stuname;
	public String getStuno() {
		return stuno;
	}
	public void setStuno(String stuno) {
		this.stuno = stuno;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}	
}
Web开发基础
武汉学院-信工学院-欧阳小伟

JavaBean编写说明

  • 要定义成员变量,同时要为每个成员变量定义getter/setter方法
  • 通过getter/setter方法来读/写对应的成员变量
  • 属性名由getter/setter决定
Web开发基础
武汉学院-信工学院-欧阳小伟
  • 注意:下面这段程序里属性名是xingming,而不是name
private String name;
public String getXingming() {
    return this.name;
}
public void setXingming(String name) {
    this.name = name;
}
Web开发基础
武汉学院-信工学院-欧阳小伟

编写JavaBean的Tips

  • boolean类型:要将getter方法改为is
  • 数组类型
  • 使用IDEA直接生成getter/setter
    • 选中class中的字段
    • 右键点击Generate
    • 点击getter and setter
Web开发基础
武汉学院-信工学院-欧阳小伟

使用JavaBean--定义JavaBean

  • 方法一:JSP中实例化JavaBean
<%
	Student student = new Student();
	// 使用student对象
%>
  • 方法二:使用<jsp:useBean>标签
<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
  • 两种方法等价
Web开发基础
武汉学院-信工学院-欧阳小伟

JSP的还要

  • JSP里可以有java代码,但不能太多,最好能像html标签那样写
Web开发基础
武汉学院-信工学院-欧阳小伟

使用JavaBean--设置JavaBean属性

  • 方法一:直接编写Java代码
<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<% 
	student.setStuname("张华"); 
%> 
  • 方法二:使用<jsp:setProperty>标签
<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<jsp:setProperty property="stuname" name="student" value="张华" />
Web开发基础
武汉学院-信工学院-欧阳小伟

使用JavaBean--当属性值的来源是request参数时

<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<jsp:setProperty property="stuname" name="student" param="studentName" />

等价于

<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<% String str = request.getParameter("studentName"); %>
<jsp:setProperty property="stuname" name="student" value="<%= str %>" />
Web开发基础
武汉学院-信工学院-欧阳小伟

使用Javabean--当属性值的来源是request参数时

<jsp:setProperty property="*" name="student" />
  • 将所有和属性名相同的参数的值放入到student相应的属性中
Web开发基础
武汉学院-信工学院-欧阳小伟

使用JavaBean--获取JavaBean属性

  • 方法一:
<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<jsp:setProperty property="stuname" name="student" value="rose" />
<%= student.getStuname() %>
  • 方法二:
<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<jsp:setProperty property="stuname" name="student" value="rose" />
<jsp:getProperty property="stuname" name="student" />
Web开发基础
武汉学院-信工学院-欧阳小伟

Question:判断题:JavaBean规定成员变量的读/写通过getter方法和setter方法进行。

  • 正确
  • 错误
Web开发基础
武汉学院-信工学院-欧阳小伟

JavaBean范围

<jsp:useBean id="student"  class="beans.Student" scope="page|request|session|application" />
  • scope 可以有如下几种选择:
    • page
    • request
    • session
    • application
Web开发基础
武汉学院-信工学院-欧阳小伟

page范围

page范围表示JavaBean对象的作用范围只是在实例化其的页面上,只在当前页面可用,在别的页面中不能被认识;

Web开发基础
武汉学院-信工学院-欧阳小伟

request范围

request范围表示JavaBean实例除了可以在当前页面上可用之外,还可以在通过forward方法跳转的目标页面中被认识到;

Web开发基础
武汉学院-信工学院-欧阳小伟

session范围

session范围表示JavaBean对象可以存在session中,该对象可以被同一个用户同一次会话的所有页面认识到;

Web开发基础
武汉学院-信工学院-欧阳小伟

application范围

当scope的属性值为application时,该对象可以被所有用户的所有页面认识到

Web开发基础
武汉学院-信工学院-欧阳小伟

Question:当scope=___________时,JavaBean对象可以被所有用户的所有页面认识。

Web开发基础
武汉学院-信工学院-欧阳小伟

DAO和VO

  • DAO: Data Access Object
  • VO: Value Object
Web开发基础
武汉学院-信工学院-欧阳小伟

DAO和VO

  • DAO: 负责对数据库进行访问的类
  • VO: 在DAO中将查询到的每条记录封装为Student对象,该Student对象就是VO
Web开发基础
武汉学院-信工学院-欧阳小伟

DAO和VO

[本机实操演示]

Web开发基础
武汉学院-信工学院-欧阳小伟

DAO的优势

  • 易于维护
  • 开发效率更高
  • 便于分工
Web开发基础
武汉学院-信工学院-欧阳小伟

本章重点

  • JavaBean的使用
  • DAO的编写
Web开发基础