1、JavaBean概述
JavaBean组件就是利用Java语言编写的组件,就是一个封装好的容器,使用者不知道内部构造,但是它可以适应用户要求的功能。每个JavaBean都实现一个特定功能,通过合理的组织不同功能的JavaBean,可以快速生成一个全新的应用好吃呢关系。一个应用程序就是一个房间,一个JavaBean就是房间里的家居。
JavaBean优点
可以提高代码的重用性,使得整个代码更加具有逻辑性和整洁性,将各个功能进行分开。复杂简单化,将复杂需求分解成简单的功能模块,这些模块相互独立、可以继承、重用,这样为软件开发提供一个简单、紧凑、优秀的解决方案。
(1)一次性编写
(2)任何地方可执行
(3)任何地方可重用
JavaBean种类
(1)可视化JavaBean:具有GUI图形用户界面的JavaBean
(2)不可视JavaBean:没有GUI图形用户界面的JavaBean,对用户是不可见的。
(a)值JavaBean严格遵循JavaBean的命名规范,用来封装表单数据,作为信息的容器。
UserInfo.java
/**
*
*/
package com.jc.bean;
/**
* @author JC.Liu
*
* 2019年9月28日-上午11:01:51
*/
public class UserInfo {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public UserInfo(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd;
}
}
(b)工具JavaBean可以不遵循JavaBean规范,通常用于封装业务逻辑,数据操作等。(连接数据库、对数据库进行增删改查等)。工具JavaBean可以实现业务逻辑与页面显示的分离,提高代码的可读性和易维护性。
Tools.java
package com.jc.tool;
public class Tools {
public String change(String source) {
source=source.replace("<", "<");
source=source.replace(">", ">");
return source;
}
}
JavaBean规范
标准规范:
(1)实现java.io.Serializable接口:实现java.io.Serializable接口的类实例化的对象被JVM转化成一个字节序列,并且能够将这个字节序列完全恢复为原来的对象,序列化机制可以弥补网络传输中不同操作系统的差异问题。
(2)是一个公共类
(3)类中必须存在一个无参构造函数
(4)提供对应的setXXX()和getXXX()方法来获取类中的属性。方法中的“XXX”是属性名称,属性第一个字母应该大写。假如属性为布尔型,则可使用isXXX()方法代替getXXX()方法。
示例:
SimpleUserInfo.java
public class SimpleUserInfo implements java.io.Serializable{//继承接口
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public SimpleUserInfo() { //创建无参构造函数
}
}
2、JavaBean属性
JavaBean属性分类:
(1)简单属性 (2)索引属性 (3)绑定属性 (4)约束属性
简单属性:在JavaBean中对应了简单的setXXX()和getXXX()方法的变量。
格式如下:
public void setXXX(type value);
public type getXXX();
索引属性:需要通过索引访问的属性。
方法:
public void setXXX(type[] value); //用于给类型为数组的属性赋值。
public type[] getXXX(); //用于返回一个数组
public void setXXX(int index,type value); //增加了一个索引参数,用于为数组中索引为index的元素赋值为value指定的值。
publilc type getXXX(int index); //增加了一个表示索引的参数,用来返回数组索引为index的元素值。
3、JavaBean应用
(1)创建JavaBean
JavaBean实质就是一个遵循特殊规范的java类,所以创建一个JavaBean就是在遵循这些规范的基础上创建一个java类。
步骤:
(a)新建一个Book的Web项目
(b) 创建一个类包,com.jc.bean中的Book类
(c)创建相关的setXXX()、getXXX()方法
/**
*
*/
package com.jc.bean;
/**
* @author JC.Liu
*
* 2019年9月28日-上午11:53:42
*/
public class Book {
private String name;
private String pwd;
private String sex;
private String qq;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public Book(String name, String pwd, String sex, String qq) {
super();
this.name = name;
this.pwd = pwd;
this.sex = sex;
this.qq = qq;
}
}
(2)在JSP页面中应用JavaBean
jsp中通常应用的是不可视JavaBean。当它被编译成class文件后,需要放在WEB-INF\classes目录下,才可以在jsp页面中被调用。
(a)在jsp页面中应用值JavaBean
值JavaBean作为信息的容器,通常用于封装表单数据,也就是将用户向表单字段中输入的数据存储在JavaBean对应的属性中。
运行代码:
不适用JavaBean的方法:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<form action="showLogin.jsp">
<h2>用户登录</h2>
用户名:<input type="text" name="userName">
<br>
密 码:<input type="password" name="userPass"><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
showLogin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name= request.getParameter("userName");
if(name==null){
name="";
}
String pwd = request.getParameter("userPass");
if(pwd==null){
pwd="";
}
%>
<center>
<b>用户名:</b><%=name %>
<b>密码:</b><%=pwd%>
</center>
运行结果:
使用JavaBean方法
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<form action="showLogin.jsp">
<h2>用户登录</h2>
用户名:<input type="text" name="userName">
<br>
密 码:<input type="password" name="userPass"><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
Book.java
/**
*
*/
package com.jc.bean;
/**
* @author JC.Liu
*
* 2019年9月28日-上午11:53:42
*/
public class Book {
private String userName;
private String userPass;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public Book(String userName, String userPass) {
super();
this.userName = userName;
this.userPass = userPass;
}
}
showLogin.jsp
<%@ page language="java" import="com.jc.bean.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="user" class="com.jc.bean.Book">
<jsp:setProperty name="user" property="*"></jsp:setProperty>
</jsp:useBean>
<center>
<b>用户名:</b><jsp:getProperty name="user" property="userName"/>
<b>密码:</b><jsp:getProperty name="user" property="userPass"/>
</center>
程序分析:
<jsp:useBean>标识用于创建一个Bean实例,标识中的id属性用来指定一个变量,程序中将使用该变量名对所创建的Bean实例进行引用,class属性指定一个完整的类名。
<jsp:setProperty>标识通常和<jsp:getProperty>一起使用,将用来调用由<jsp:useBean>标识创建的Bean实例中setXXX()方法将请求中参数赋给Bean中对应的属性。标识中的name属性用于指定一个Bean实例,property为标识必须存在的属性,可选值为"*"或者指定Bean中的属性。
当取值为"*"时,则resquest请求中的所有参数值将被一一赋值给Bean中与参数具有相同名字的属性;
当取值为Bean值时,则只会将request中与该属性同名的一个参数的值赋给这个Bean属性。
<jsp:getProperty>属性用来从指定的Bean中读取指定属性的值,并输出到页面中。
(3)在JSP页面中应用工具JavaBean
工具JavaBean通常用于封装业务逻辑、数据操作等,可以实现业务逻辑和前台程序的分离,提高代码的可读性和可维护性。
未使用JavaBean方法
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<form action="showLogin.jsp" method="post">
<h2>用户留言</h2>
标题:<input type="text" name="title" size="30">
<br>
内容:<textarea name="content" rows="5" cols="25"></textarea>
<br><br>
<input type="submit" value="留言">
<input type="reset" value="重置">
</form>
showLogin.jsp
<%@ page language="java" import="com.jc.bean.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String title=request.getParameter("title");
String content=request.getParameter("content");
if(title==null){
title="";
}
title=title.replace("<", "<");
title=title.replace(">", ">");
content=content.replace("<", "<");
content=content.replace(">", ">");
%>
标题:<%=title%>
<br>
内容:<%=content%>
运行结果:
4、JavaBean应用实例
(1)应用JavaBean 解决中文乱码
在jsp程序开发中,通过表单提交的数据如果存在中文,传输到页面时会出现乱码。
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<form action="showLogin.jsp" method="post">
<table border="1" rules="rows">
<tr height="30">
<td>留言者:</td>
<td><input type="text" name="author" size="20"></td>
</tr>
<tr height="30">
<td>留言标题:</td>
<td><input type="text" name="title" size="40"></td>
</tr>
<tr height="30">
<td>留言内容:</td>
<td><textarea name="content" rows="8" cols="35"></textarea></td>
</tr>
<tr align="center" height="30">
<td colspan="2">
<input type="submit" value="提交">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
WordSingle.java
/**
*
*/
package com.jc.word;
/**
* @author JC.Liu
*
* 2019年9月28日-下午3:45:17
*/
public class WordSingle {
private String author;
private String title;
private String content;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public WordSingle(String author, String title, String content) {
super();
this.author = author;
this.title = title;
this.content = content;
}
public WordSingle() {
}
}
Tools.java
/**
*
*/
package com.jc.tool;
import java.io.UnsupportedEncodingException;
/**
* @author JC.Liu
*
* 2019年9月28日-下午3:46:43
*/
public class Tools {
public static String toChinese(String str) {
if(str==null) {
str="";
}
try {
str=new String(str.getBytes("ISO-8859-1"),"utf-8");
}catch (UnsupportedEncodingException e) {
str="";
e.printStackTrace();
}
return str;
}
}
showLogin.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
%>
<jsp:useBean id="myword" class="com.jc.word.WordSingle" scope="request">
<jsp:setProperty name="myword" property="*"/>
</jsp:useBean>
<jsp:forward page="show.jsp"/>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.jc.tool.*"%>
<jsp:useBean id="myword" class="com.jc.word.WordSingle" scope="request">
<table border="1" height="200" rules="rows">
<tr>
<td>留言者:</td>
<td><%=Tools.toChinese(myword.getAuthor()) %></td>
</tr>
<tr height="30">
<td align="center">留言标题:</td>
<td><%=Tools.toChinese(myword.getTitle()) %></td>
</tr>
<tr>
<td align="center">留言内容:</td>
<td>
<textarea rows="8" cols="35" readonly="readonly">
<%=Tools.toChinese(myword.getContent()) %>
</textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="index.jsp">继续留言</a>
</td>
</tr>
</table>
</jsp:useBean>
运行结果:
本期学习到此结束,欢迎各位关注交流。