一。JavaBean是一种可重复使用的且跨平台的软件组织。
JavaBean可分为两种:一种是有用户界面的JavaBean,还有一种是没有用户界面,主要负责表示业务数据或者处理事务的JavaBean。
JSP通常访问的是后一种JavaBean。
二。JSP和JavaBean搭配使用,有三个好处。
1.使得HTML和Java程序分离,便于维护。
2.可以降低开发JSP网页人员的Java编程能力。
3.JSP侧重于生成动态网页,事务处理由JavaBean来完成,这样可以利用JavaBean组件的可重用性特点,提高开发网站的效率。
三。一个标准的JavaBean有以下几个特性。
1.JavaBean是一个公共的类。
2.JavaBean有一个不带参数的构方法。
3.JavaBean通过set方法设置属性,通过get方法获取属性。
4.属性名和get方法名之间存在固定的对应关系:如果属性名为“count”,那么get方法名为“getCount”,属性名中的第一个字母在方法名中改为大写。
5.属性名和set方法名之间存在固定的对应关系:如果属性名为“count”,那么get方法名为“setCount”,属性名中的第一个字母在方法名中改为大写。
6.如果希望JavaBean能被持久化,那么可以使它实现java.io.Serializable接口。
以下是一个JavaBean,类的名字为CounterBean。
package mypackage;
public class CounterBean {
private int count = 0;
public CounterBean() {}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
其中定义了一个count属性,用来统计数字。有一个不带参数的构造方法,一个getCount和setCount方法。
四。JSP访问JavaBean。
1.首先导入JavaBena这个类。
<%@ page import="mypackage.CounterBean" %>
导入这个JavaBean类。
2.声明JavaBean对象。
<jsp:useBean id="counterBean" class="mypackage.CounterBean" scope="session" />
id:代表JavaBean对象的ID,实际上表示引用JavaBean对象的局部变量名,以及存放在特定范围内的属性名。JSP规范要求存放在所有范围内的每个JavaBean对象都有唯一的ID。
class:用来指定JavaBean的雷鸣。
scope:指定JavaBean对象的存放范围,可选值为page、request、session、application。
执行这段代码时,
1》定义一个名为counterBean的局部变量。
2》尝试从scope指定的会话范围内读取名为“counterBean”的属性,并且使得counterBean局部变量的引用具体属性值,即CounterBean对象。
3》如果在scope指定的会话范围内,名为“counterBean”属性不存在,会通过CounterBean类的默认构造方法创建一个CounterBean对象,并把它存放在会话范围内,令其属性名为“counterBean”,并且counter局部变量也引用这个CounterBean对象。
所以以上的<jsp:useBean>和以下Java代码作用等价:
mypackage.CounterBean counterBean = null;
counterBean = (mypackage.CounterBean) session.getAttribute("counterBean");
if(counterBean == null) {
counterBean = new mypackage.CounterBean();
session.setAttribute("counterBean",counterBean);
}
3.访问JavaBean属性。
1》get。
<jsp:getProperty name="counterBean" property="count" />
格式固定,name是上边声明的id,也就是此时需要使用的对象名字,property是你想要得到类中的属性名(这里类中就只有count,但是类中可以存放多个属性名,只要设置get和set方法就好),这里的代码相当于JSP中的:
<%=counterBean.getCount()%>
2》set。
<jsp:setProperty name="counterBean" property="count" value="2" />
相当于JSP中的:
<%counterBean.setCounter(2)%>
注意:必须先声明才能访问,否则抛出异常。
五。JavaBean的范围。
scope属性决定了JavaBean对象存在的范围,可选值包括以下几种。
page:表示页面范围,它是scope属性的默认值。
request:表示请求范围,从客户端想服务器发出请求到服务器返回响应这一阶段。
session:表示会话范围,从浏览器第一次访问一个Web应用中的支持会话的任意一个网页开始,Servlet容器创建HttpSession对象,到会话结束。会话结束指的是:会话过期、浏览器终止、服务器调用HttpSession对象的invalidate()方法等。
application:表示Web应用范围,该范围就是Web应用开启到终止的范围。
例子:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="mypackage.CounterBean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="counterBean" class="mypackage.CounterBean" scope="page" />
<jsp:setProperty name="counterBean" property="count" value="<%=counterBean.getCount() + 1%>" />
<jsp:forward page="forward.jsp" />
</body>
</html>
forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="mypackage.CounterBean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="counterBean" class="mypackage.CounterBean" scope="page" />
<jsp:getProperty name="counterBean" property="count" />
</body>
</html>
如果scope设置为page:
打开index界面,虽然在index中通过value设置为count+1,然是,然后请求转发给forward界面,发现无论打开刷新多少次都是输出0,这是因为在index对象创建的counterBean对象只在index界面内有效。
如果scope设置为request:
打开index界面,发现每次刷新数值都是1,因为request请求index,然后index将请求转发到forward界面,此时执行完forward界面返回响应,请求结束。
如果scope设置为session:
打开index,发现每次刷新数值都会加1,但是打开另一个浏览器却会从1重新开始。
如果scope设置为application:
打开index,刷新每次数值都会加1,,然后再打开另一个浏览器数值会接着上一个浏览器的数值增加。
注意:每次forward.jsp都会从对应的scope范围中获取属性,如果是request、session、application,那么对应的Java代码应该如下:
CounterBean obj = (CounterBean) request.getAttribute("counterBean");
CounterBean obj = (CounterBean) session.getAttribute("counterBean");
CounterBean obj = (CounterBean) application.getAttribute("counterBean");
EL
EL主要功能:
访问存储对象
对JavaBean的简化访问
对集合的简化访问
简单运算符
条件输出
EL基础语法:${expression}
在JSP中禁用计算,以忽略JSP中EL表达式的执行
禁用EL,计算的语法为:
<%@ page isELIgnored=”true | false” %>
新建项目:ELTest
ELTest.jsp
form.jsp
EL的默认取值范围:
pageScope
requestScope
sessionScope
applicationScope
//称为EL的隐含对象
param.
遍历list:
注:EL没有遍历功能
需要JSTL
配置JSTL:
在tagplugin文件夹中
jstl.jar
standard.jar
使用JSTL的步骤:
1配置JSTL:
在tagplugin文件夹中
jstl.jar
standard.jar
2 在jsp页面中使用
<% @taglib %>
//导入标签库
注意重要的字段为:prefix = “c”
prefix为标签库的标识
3 使用标识:
<c:forEach>
1、JavaBean
JavaBean 是遵循java写法 具有的特点
这个Java类必须具有一个无参的构造函数
属性必须私有化。
私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守 一定的命名规范。
JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
2、JavaBean的属性
JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。
一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。
3、在JSP中使用JavaBean
有三个主要标签
<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
4、细讲<jsp:useBean>
<jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象:
如果存在则直接返回该JavaBean对象的引用。
如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。
常用语法:
<jsp:useBean id="beanName" class="package.class"
scope="page|request|session|application"/>
id属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。
class属性用于指定JavaBean的完整类名(即必须带有包名)。
scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application等四个值中的一个,其默认值是page。
5、<jsp:useBean>执行原理
例句:<jsp:useBean id="currentDate" class="java.util.Date"/>
翻译成的Servlet源码:
java.util.Date currentDate = null;
synchronized (_jspx_page_context) {
currentDate = (java.util.Date) _jspx_page_context.getAttribute(
"currentDate", PageContext.PAGE_SCOPE);
if (currentDate == null){
currentDate = new java.util.Date();
_jspx_page_context.setAttribute("currentDate",
currentDate, PageContext.PAGE_SCOPE);
}
}
6、<jsp:setProperty>标签
<jsp:setProperty>标签用于设置和访问JavaBean对象的属性。
语法格式:
<jsp:setProperty name="beanName"
{
property="propertyName" value="{string | <%= expression %>}" |
property="propertyName" [ param="parameterName" ] |
property= "*"
}/>
name属性用于指定JavaBean对象的名称。
property属性用于指定JavaBean实例对象的属性名。
value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。
param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。
<jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中。
语法:
<jsp:getProperty name="beanInstanceName" property="PropertyName" />
name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。
property属性用于指定JavaBean实例对象的属性名。
如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
7、EL表达式和JSTL标签快速入门
EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。
示例:使用EL表达式获取request、session、applection域中的数据。
EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。
示例:使用EL表达式获取Bean属性。
结合JSTL标签,EL表达式也可轻松获取各种集合中的元素。
示例:使用EL表达式获取List、Map集合中的元素。
EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。
STL是sun公司开发的一套标签库,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。
在页面中使用JSTL标签需完成以下2个步骤:
1、导入jstl.jar和standerd.jar这两个JSTL的jar文件。
2、在JSP页面中使用<%@ tablib url=“” prifix=“” %>元素导入标签库。
JSTL标签库中常用标签:
<c:foreach var=“” items=“”>
<c:if test=“”>
共同学习,写下你的评论
评论加载中...
作者其他优质文章