JavaBean
JavaBean是一个遵循特定写法的Java类:
- 这个java类必须具有一个无参的构造函数
- 字段必须私有化
- 私有化的字段必须通过public类型的方法暴露给其他程序,并且方法的命名也必须遵守一定的命名规范
- 如果希望JavaBean能被持久化,则应该实现Serializable接口(序列化)
package Bean;
public class User {
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
private String username;
private String password;
}
JavaBean在J2EE开发中,通常用于封装数据,对于遵
循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
JavaBean的属性
- JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个字段。每个字段通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
- 属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
- 属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。
- 一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。
在JSP中使用JavaBean
- JSP技术提供了三个关于JavaBean组件的动作元素(内置标签),即JSP标签,它们分别为:
- jsp:useBean标签:用于在JSP页面中查找或实例化一个JavaBean组件。(类似于new一个bean类或找到一个已经存在的bean类对象)copy referance
<%@ page import=”Bean.User ” %> - jsp:setProperty标签:用于在JSP页面中设置一个JavaBean组件的属性。
- jsp:getProperty标签:用于在JSP页面中获取一个JavaBean组件的属性。
在JSP中使用JavaBean
- 第一步导入JavaBean 类
<%@ page import=”Bean.User ” %> - 第二步声明JavaBean对象
jsp:useBean id=”zhangsan” class=”Bean.User” scope=”application” /jsp:useBean
jsp:setProperty标签
<%
String s="haha";
%>
<jsp:useBean id="zhangsan" class="Bean.User" scope="application"> </jsp:useBean>
<jsp:setProperty name="zhangsan" property="username" value="<%= s%>"></jsp:setProperty>
$END$
<%=zhangsan%>
- param用来设置在url中设置的bean对象的值
property设置为*的话可以初始化bean中的所有对象的值,只要在url中标注好就行
name属性用于指定JavaBean实例对象的名称,其值应与标签的id属性值相同。
- property属性用于指定JavaBean实例对象的属性名。
如果一个JavaBean实例对象的某个属性的值为null,那么,使用标签输出该属性的结果将是一个内容为“null”的字符串。 - setProperty里边property可以是*,也可以是指定的设置的bean里的对象
EL全名Expression Language - 获取数据
- 执行运算
- 获取web开发常用对象
- 调用java方法
EI的获取数据
- “${表达式},EL表达式语句在执行时,会调用pageContext.findAttribute方法用标识符为关键字,分别从page、request。session、application四个域中查找响应的对象,找到则返回相应对象,找不到则返回空字符串”“(不是null)
- ${里边不要放字符串}
- EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}
${user.list[0]}:访问有序集合某个位置的元素
${map.key} : 获得map集合中指定key的值
${age}
${"age"}
<jsp:useBean id="user1" class="Bean.User"></jsp:useBean>
<jsp:setProperty name="user1" property="username" value="haha"></jsp:setProperty>
<%= user1 %>
${user1.username}
问题是username属性是private,为什么能点出来?
- 答案是使用get&set方法实现的
- EI表达式在获取javabean对象中成员变量的值,时,实际上不是直接访问javabean中的成员变量获取其值,而是通过成员变量所对应的get方法获取成员变量的值
- EL表达式所获取的成员变量的值与javabean中的真实值没有必然的联系,因为get方法可以任意设置。
执行运算
<%
User user = new User();
user.setUsername("haha");
pageContext.setAttribute("user",user);
%>
${user.username.length()>0}
- empty运算符:检查对象是否为null或“空”
${empty.haha1} - 三元表达式:${user!=null?user.name : “”}
当表达式在域对象找不到某个对象时,el表达式的返回结果为空串。 - []:在访问集合时候用得到
- .:访问JavaBean对象时候可以选择访问的对象成员(其实访问到的是成员变量对应的get方法)
十一大隐式对象
- param
将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。 - paramValues
将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于 request.getParamterValues(name)。 - header
将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)。 - headerValues
将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。 - cookie
将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用美元符{headerValues. name} 表达式。 - initParam
将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。 - pageScope
将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 美元符{pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 美元符{pageScope .objectName. attributeName} 访问对象的属性。 - requestScope
将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 美元符{requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 美元符{requestScope. objectName. attributeName} 访问对象的属性。 - sessionScope
将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:
美元符{sessionScope. name} - applicationScope
将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。
使用EL调用Java方法
- EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。
- 示例:${prefix:method(params)}
- 在EL表达式中调用的只能是Java类的静态方法。
- 这个Java类的静态方法需要在TLD(Tagliary Definition)文件中描述,才可以被EL表达式调用。
- EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。
- 编写一个Java类的静态方法
- 编写标签库描述符(tld)文件,在tld文件中描述自定义函数。
- 在JSP页面中导入和使用自定义函数
示例:两个字符串求和
package el;
public class Tool {
public static int add(String arg1,String arg2){
int i=Integer.parseInt(arg1);
int j=Integer.parseInt(arg2);
return i+j;
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<uri>http://www.haha.com</uri>
<function>
<description>add x and y</description>
<!--name=方法名-->
<!--function-class 方法所在类的全类名-->
<!--function-signature 方法前面(包括方法返回值)-->
<name>add</name>
<function-class>el.Tool</function-class>
<function-signature>
int add(java.lang.String,java.lang.String)
</function-signature>
</function>
<!-- Invoke 'Generate' action to add tags or functions -->
</taglib>
<%--
Created by IntelliJ IDEA.
User: Bam
Date: 2018/3/6
Time: 10:26
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="zs" uri="http://www.haha.com" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--${prefix:method(param)}--%>
${zs:add("11","102")}
</body>
</html>
本文详细介绍了JavaBean的概念及编写规范,并深入探讨了如何在JSP中使用JavaBean,包括实例化、设置和获取属性等操作。此外,还介绍了EL表达式的使用方法及其在获取JavaBean属性中的应用。
1527

被折叠的 条评论
为什么被折叠?



