JavaEE day8:JavaBean、EL和JSTL

本文详细介绍了JavaBean的概念及编写规范,并深入探讨了如何在JSP中使用JavaBean,包括实例化、设置和获取属性等操作。此外,还介绍了EL表达式的使用方法及其在获取JavaBean属性中的应用。

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>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值