Java Bean
是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用 Javabean减少重复代码,使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用,有以下的优点
- 可将HTML和Java代码分离,这主要是为了日后维护的方便。如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难。
- 可利用 JavaBean的优点。将常用到的程序写成 Java Bean组件,当在JSP要使用时,只要调用 Java Bean组件来执行用户所要的功能,不用再重复写相同的程序,这样一来也可以节省开发所需的时间。
一.JavaBean的开发要求
JavaBean本身就是一个类,属于Java的面向对象编程。
• 在JSP中如果要应用JSP提供的Javabean的标签来操作简单类的话,则此类必须满足如下的开发要求:
• 所有的类必须放在一个包中,在WEB中没有包的类是不存在的;
• 所有的类必须声明为public class,这样才能够被外部所访问;
• 类中所有的属性都必须封装,即:使用private声明;
• 封装的属性如果需要被外部所操作,则必须编写对应的setter、getter方法;
• 一个JavaBean中至少存在一个无参构造方法,此为JSP中的标签所使用
目录结构
第一个JavaBean程序
package com.org;
public class simpleBean{//如果没有不带构造方法会自动加进来
private String name;
private String age;
public void setName(String name)
{
this.name=name;
}
public void setAge(String age)
{
this.age=age;
}
public String getName() {
return this.name;
}
public String getAge() {
return this.age;
}
}
二. JSP中导入JavaBean
1.使用Page指令导入
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.org.*"%> <!-- 使用Page指令导入 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<%
simpleBean simple=new simpleBean();
simple.setName("小明");
simple.setAge("19");
%>
<h3>姓名:<%=simple.getName() %></h3>
<h3>年龄:<%=simple.getAge() %></h3>
</body>
</html>
2.使用useBean动作标签导入
除了使用import的语句之外,也可以使用JSP中提供的:<jsp:useBean>
指令 完成操作,指令的操作语法如下所示:
• <jsp:useBean id=“实例化对象名称” scope=“保存范围” class=“包.类名称”/>
• 主要属性:
• id:表示实例化对象的名称
• scope:表示此对象保存的范围,一共有四种属性范围:page、request、session、 application
• class:对象所对应的包.类名称
<%@ page contentType="text/html" pageEncoding="GBK"%>
<jsp:useBean id="simple" scope="page" class="com.org.simpleBean"/>
<html>
<head><title>JAVABEAN测试</title></head>
<body>
<%
simple.setName("小明");
simple.setAge(30);
%>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
三.JavaBean与表单交互
在JavaBean语法中实际上最大的特点就在于与表单的交互上,如果按照之前的做法,有一个表单提交了内容 给JSP,JSP中如果要是想进行接收的话,则需要通过request,分别进行接收,并设置到JavaBean对应的属性里。但是通过以下标签来简化获取:
• JSP中专门提供了JavaBean的属性设置标签:<jsp:setProperty>
• JSP中专门提供了JavaBean的属性取得标签:<jsp:getProperty>
• 设置和取得属性的标签依靠的是反射机制运行
4种设置方法
1、当Bean中的属性名跟参数名不一致时
<jsp:setProperty name="simple" property="name" param="userName"/>
等价于
String username=request.getParameter("userName");
simple.setName(username);
2.当Bean中的属性名跟参数名一致时
<jsp:setProperty name="simple" property="name"/>
等价于
String username=request.getParameter("name");
simple.setName(username);
3.给JavaBean的属性传具体的值
<jsp:setProperty name="simple" property="name" values="jack"/>
等价于
simple.setName("jack");
4.当参数名和Bean的属性名一一对应时的快捷设置方式
<jsp:setProperty name="simple" property="*"/>
<jsp:getProperty name="simple" property="name"/>
交互案例
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>JavaBean与表单交互</title></head>
<body>
<%request.setCharacterEncoding("GBK"); %>
<jsp:useBean id="simple" scope="page" class="com.org.SimpleBean"/>
<%--将表单的所有参数传递给JavaBean对应的同名属性--%>
<jsp:setProperty name="simple" property="*"/>
<%--将表单的name参数传递给JavaBean的name属性--%>
<jsp:setProperty name="simple" property="name" param="name"/>
<jsp:setProperty name="simple" property="name"/><%--当参数名称和属性同名时可以省略param--%>>
<%--将值jack传递给JavaBean的name属性--%>
<jsp:setProperty name="simple" property="name" value="jack"/>
<%--获取JavaBean的属性值并输出给客户端--%>
<h3>姓名:<jsp:getProperty name="simple" property="name"/></h3>
<h3>年龄:<jsp:getProperty name="simple" property="age"/></h3>
</body>
</html>
四. JavaBean保存范围
在<jsp:useBean>
的指令上存在了一个scope属性,表示的是一个 JavaBean的保存范围,保存的范围一共是四种:
• page:保存在一页的范围之中,跳转之后此JavaBean无效
• request:一个JavaBean对象可以保存在一次服务器跳转范围中
• session:在一个用户的操作范围中保存,重新打开浏览器的时候才会声 明新的JavaBean
• application:在整个服务器上保存,服务器关闭时才会消失。
<jsp:useBean>
的等价含义
<jsp:useBean id="cou" scope="session" class="com.org.Count"/> 等价于:
com.org.Count cou=null;
HttpSession scope=request.getSession();
cou=(com.org.Count)scope.getAttribute(“cou”);
if(cou==null){
cou=new com.org.Count();
scope.setAttribute(“cou”,cou);
}
程序代码:
首先编写一个Count.java类,来分别测试四种属性范围。
Count.java :用户计数操作的JavaBean
package com.org;
public class Count {
private int count = 0 ;
public Count(){
System.out.println("=========== 一个新的Count对象产生 ===========") ;
}
public int getCount(){
return ++ this.count ;
}
}
1.page范围的JavaBean
page范围的JavaBean只在本页有效,跳转后无效。
page_bean01.jsp: 定义page范围的JavaBean
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>page范围的JavaBean</title></head>
<jsp:useBean id="cou" scope="page" class="cn.mldn.lxh.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
<jsp:forward page="page_bean02.jsp"/>
</body>
</html>
page_bean02.jsp:跳转后的页面
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>page范围的JavaBean</title></head>
<jsp:useBean id="cou" scope="page" class="cn.mldn.lxh.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
</body>
</html>
2.request范围的JavaBean
request范围设置的JavaBean,则在一次服务器跳转中,将不会重复声明JavaBean对象。
request_bean01.jsp:设置request范围的JavaBean并跳转
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>request范围的JavaBean</title></head>
<jsp:useBean id="cou" scope="request" class="com.org.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
<jsp:forward page="request_bean02.jsp"/>
</body>
</html>
request_bean02.jsp:跳转后的页面
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>request范围的JavaBean</title></head>
<jsp:useBean id="cou" scope="request" class="com.org.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
</body>
</html>
3.session范围的JavaBean
当一个用户连接到JSP页面后,此session范围的JavaBean将会一直保留,直到会话结束。
session_bean.jsp:设置session范围的JavaBean
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>session范围的JavaBean</title></head>
<jsp:useBean id="cou" scope="session" class="com.org.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
</body>
</html>
4. applica范围的JavaBean
application范围的JavaBean是所有用户所共享的,只要声明后就会在服务器端保存,所有用户都可以直接访问此对象。
application_bean.jsp:定义application范围的JavaBean
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>application范围的JavaBean</title></head>
<jsp:useBean id="cou" scope="application" class="com.org.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
</body>
</html>