JavaBean简介:
JavaBean是java语言开发的一个可重用的组件,在jsp的开发中可以使用javaBean减少重复代码
,
是整个jsp开发变得更简洁;jsp搭配javabean来使用的优点:
·可以讲html和java代码分离,这主要是为了日后的维护方便;
·将常用的代码写成JavaBean组件,当使用的时候调用即可,重复利用代码;
如数据库的操作块可写成JavaBean;
注意:JavaBean 是一种JAVA语言写成的可重用组件。不单单指setter和getter,还包含许多其他的方法
比如数据库访问的方法等;像我们经常见到数据类(UserBean.java)也可以成为数据bean,只是
JavaBean的一种;
JavaBean开发要求:
JavaBean本身就是一个类,属于Java的面向对象编程。
在JSP中如果要应用JSP提供的JavaBean的标签来操作类的话,则必须满足一下开发要求:
·所有的类必须放在一个包中,在WEB中没有包的是不存在的;
·所哟的类必须声明为public class 这样才能被外部访问到;
·类中的所有属性必须封装
·封装的属性通过setter和getter被操作;
·一个JavaBean中至少存在一个无参构造函数,此为JSP中的标签所使用;
package org.lid.demo;
public class SimpleBean{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name();
}
public int getAge(){
return this.age;
}
}
对于这样的简单的JavaBean也有几个名词:
·VO:值对象,存放所有的传递数据的操作上;
·POJO:简单的java对象
·TO:传输对象,一个类必须现实了Serializable接口后才称为传输对象;
JavaBean本身是一个*.java的文件,按照最原始的方式解释,现在的java程序编译成*.class
文件才可以使用;但是放在什么地方呢?jsp直接放在工作目录中即可,而*.java文件
呢?
这是我们必须了解web开发的目录结构;
WEB开发的标准目录结构:
WEB ROOT下包括:
WEB-INF、jsp、js、css、images、index.jsp;
WEB-INF下包含:
web.xml、lib、classes、tags;
实际上在WEB-INF中的lib和classes文件夹就相当于一个默认的classpath;
Classpath是类执行时所需要的一个重要的环境属性,当tomcat启动之后,WEB-INF/lid和WEB-
INF/classes
都会自动的配置到classpath中;
进入到javaeedemo\WEB-INF\classes 通过javac编译SimpleBean.java
编译完后,可以通过两种方式使用javabean,因为WEB-INF/classes文件夹就是一个classpath路
径,
所以可以直接使用page指令导入所需的JavaBean;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@ page import="org.lid.demo.SimpleBean"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
SimpleBean simple=new SimpleBean();
simple.setName("lid");
simple.setAge(20);
%>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
除了这种方法之外,也可以使用专门提供的jsp标签完成操作,在整个JavaBean对于这
种简单
bean的操作提供了一useBean的标签;
<jsp:useBean>指令:
除了使用import的语句之外,也可以使用jsp中提供的:<jsp:userBean>指令完成;
·<jsp:useBean id="实例化对象的名称" scope="保存范围" class="包.类名称"/>
·主要属性:
id:表示实例化对象的名称---即class对应的类的实例的名称,自己定义;
scope:表示此对象保存的范围,一共有四种属性范围:page、request、session、
application
class:对象所对应的包.类名称
<%@ page contentType="text/html" pageEncoding="gbk"%>
<jsp:useBean id="simple" scope="request"
class="org.lid.demo.SimpleBean"/>
<html>
<head><title>这是测试</title></head>
<body>
<%
simple.setName("lid");
simple.setAge(20);
%>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
实际上在使用以上的标签的时候,都会自动调用JavaBean中的无参构造方法,所以在定义
JavaBean
的时候要求至少存在一个无参构造函数;
记住当JavaBean修改后,必须重新编译该JavaBean(即javac一下),然后必须重新启动服务器后
才能加载进来新的修改后的JavaBean;
因为JavaBean需要经常的修改,每次修改都要重新启动服务器的话是很麻烦的
解决办法就是修改server.xml文件:
<Context path="/lid" docBase="D:\javaeedemo" reloadable="true">
即加上reloadable="true"即可;
注意:加上reloading就想当与服务器出去监听状态,javabean一发生变化就相当于重新启动一
次
服务器,所以之前的session和application范围的属性全部消失;
为什么将修改完的javabean编译以后,要重启tomcat?
因为javabean是在tomcat启动时就加载到内存中的,所以修改完的javabean编译后,如果不重新
启动tomcat是不会将新的javabean
加载到内存中的;如果不重新启动服务器的话,在内存中的javabean还是修改前的javabean;
为什么jsp修改后不用重新启动tomcat?
jsp是tomcat负责解析的,请求jsp时tomcat就进行解析,所以jsp修改后不用重新启动;