JavaBean是使用Java语言开发的一个可重用的组件,在JSP开发中可以使用JavaBean
减少重复代码,使得整个JSP页面变得整洁,JSP搭配JavaBean使用有如下优点:
1.可以将HTML和JAVA代码分离,主要是为了日后的维护。
2.可以利用JavaBean的优点,把常用的程序写成JavaBean,这样在JSP使用中可以调用
JavaBean来实现功能,不用再重复地写相同的程序了,节约了开发时间。
JavaBean标签操作的简单类,该类必须满足以下:
1.所有的类必须放在一个包之中,在Web中是没有包的类的存在的。
2.所有的类必须声明 public class ,这样才能被外部所访问。
3.类中所有的属性必须进行封装,即使用private声明。
4.封装的属性如果需要被外部使用,则必须编写对应的getter、setter方法。
5.一个JavaBean中至少存在一个无参构造方法,此方法为JSP中的标签所使用。
一.使用JavaBean
在WEB-INF目录中,新建一个文件夹“classes”,此文件夹中可以存放*.class文件。
写一个简单的JavaBean:
package com.zyy.jwb;
public class SimpleBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这里如果使用MyEclipse,在发布项目后,会自动进行编译。没有使用的话,我们可以
CMD -> javavc -d . X:/xxx/xxx/xxx.java 进行编译。
使用page指令中的import:
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="com.zyy.jwb.*"%>
<%
SimpleBean bean = new SimpleBean();
bean.setName("CaMnter");
bean.setAge(18);
%>
<h2>
Name:
<%=bean.getName()%></h2>
<h2>
Age:
<%=bean.getAge()%></h2>
使用<jsp:useBean>标签:
除了使用import语句外,也可以使用<jsp:useBean>标签完成。
这是该标签的语法:
<jsp:useBean id="你想给实例化对象起的名字" scope="保存范围" class="包.类" / >
scope能设置的内容就是那四个属性范围:page、request、session、application。
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="bean" scope="page" class="com.zyy.jwb.SimpleBean" />
<%
bean.setName("CaMnter");
bean.setAge(18);
%>
<h2>
Name:
<%=bean.getName()%></h2>
<h2>
Age:
<%=bean.getAge()%></h2>
注意:class属性中要写到具体到类名,如:包/类名 。不能是这样:包/*。
实质:
1.在使用<jsp:useBean>标签的时候,会默认调用JavaBean类的无参构造函数进行对象
的实例化。这里,我们可以在无参构造函数中加一条输出语句就能在后台Tomcat服务器上看到
输出语句了。
2.<jsp:useBean>标签依靠反射机制完成直接对对象的实例化。
说明:每次修改JavaBean的时候都要进行服务器的重启才能有效,但是我们可以在Tomcat目录
下/conf/server.xml中 找到你的虚拟目录配置,然后添加一个reloadable="true"即可实
现自动加载,我们就可以修改JavaBean后,刷新一下页面就能看到更改后的效果了。
<Context path="/CaMnter" docBase="X:\xxx" reloadable="true">
二.<setProperty>标签
使用<setProperty>标签,可以通过“*”的形式完成对属性的自动设置。
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="bean" scope="page" class="com.zyy.jwb.SimpleBean" />
<jsp:setProperty name="bean" property="*" />
<h2>
Name:
<%=bean.getName()%></h2>
<h2>
Age:
<%=bean.getAge()%></h2>
然后为了节约时间,用地址重写的方式试试看:
设置指定的属性和value:
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="bean" scope="page" class="com.zyy.jwb.SimpleBean" />
<jsp:setProperty name="bean" property="age" value="18" />
<h2>
Name:
<%=bean.getName()%></h2>
<h2>
Age:
<%=bean.getAge()%></h2>
三.<jsp:getProperty>取得属性
此标签会自动调用JavaBean中的getter方法。语法如下:
<jsp:getProperty name="你实例化对象起的名字" property="你想获得的对象属性名" / >
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="bean" scope="page" class="com.zyy.jwb.SimpleBean" />
<jsp:setProperty name="bean" property="name" value="CaMnter" />
<jsp:setProperty name="bean" property="age" value="18" />
<h2>
Name:
<jsp:getProperty name="bean" property="name" /></h2>
<h2>
Age:
<jsp:getProperty name="bean" property="age" /></h2>
四.JavaBean的保存范围
这个概念嘛,和之前的内置对象保存范围很类似,就是这次的对象是JavaBean而言的。
1. page :保存在一一个页面的范围之中,跳出这个页面则次JavaBean失效,如果跳到
的页面也用<jsp:useBean>实例化这个对象的话,则会新实例化一个对象。
2. request :JavaBean对象可以保存到服务器跳转之后的页面上。
3. session:怎么跳转都可以,但是新打开一个浏览器的话,就会新实例化一个JavaBean
对象不是原来的JavaBean对象。
4 application:这个都可以保存,出了服务器关闭后开启了,原来的JaveBean对象就消失
了,重新打开了又新实例化一个新的JavaBean对象。