继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

javabean学习

慕无忌4230737
关注TA
已关注
手记 7
粉丝 36
获赞 146

一。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=“”>

打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP