JavaBean和EL

一、JavaBean的概念

1、JavaBean就是一个遵循特殊写法的普通类
2、特殊写法
    a、必须有默认的构造方法
    b、所有字段定位私有的   
    c、提供公有的getter或setter方法,属性
    d、一般实现java.io.Serializable
    
3、一定要符合Java的命名规范。

***4、应用场景:
    在企业级开发中,JavaBean是用来传递数据的。

二、JavaWeb的开发模型

    模型一:了解
        JSP+JavaBean
    
    模型二:开发实际应用
                        程序中
        M:厨师            JavaBean:模型
        V:上的菜       JSP:显示页面
        C:服务台       Servlet:控制器
        
        MVC+三层架构

三、JSP中操作JavaBean的动作元素

jsp:useBean
    作用:用于在指定域范围内查找指定名称的JavaBean对象,找到了就直接使用;没有找到,创建一个,并放到指定的域范围内。
    属性:
        id:必须的。JavaBean的名称
        class:JavaBean的完整类名
        scope:域范围。默认是page范围。可选值:page request session application
        
    注意:如果该标签有主体内容,只在创建新对象时才会执行。
jsp:setProperty(必须先使用useBean)
    作用:调用JavaBean的setter方法。还能自动类型转换,仅限基本类型
    属性:
        property:必须的。属性名称。比如setName,名称是name。
            可以使用通配符*。使用前提是请求参数的名称与属性的名称完全一致。
        name:必须的。哪个对象的?即jsp:useBean中的id的取值。
        value:属性的取值。支持直接量;支持表达式(<%=表达式%>)。
        param:请求参数名
jsp:getProperty
    作用:调用JavaBean的getter方法。
        property:必须的。属性的名称。比如getName,名称是name。
        name:必须的。哪个对象的?即jsp:useBean中的id的取值。

*****开发原则:JSP页面中不能出现一行Java脚本<%%>和Java表达式<%=%>
Java脚本:替代方案,自定义标签。
Java表达式:替代方案,EL表达式。 Struts2框架:OGNL表达式。

四、EL表达式

它只是JSP中的表达式,不是一种开发语言。
基本语法:${EL表达式}
4.1获取数据
    *****EL表达式只能获取四大域中的数据。
    EL表达式获取的对象如果是null,页面不会显示数据。因此,EL表达式中永远不会出现空指针异常
    p.name:调用域中名称为p对象的getName方法,点运算符是用于获取属性的取值的。
    
    
        .运算符:
        []运算符:.运算符能做的,[]也能做。[]能做的,.不一定能做。
            比如${p.name}===${p['name']}==${p["name"]}
            
            优秀在可以取不符合Java命名规范的东东。
    
4.2数学逻辑运算:
    empty运算符:如果判断的对象是null或者空字符串,都返回true。对于集合,即使集合对象本身不是null,没有任何元素,也返回true。
    
    EL表达式不支持字符串连接操作。
    
4.3获取JSP的内置对象(11大EL内置对象):难点,不要与JSP的内置对象和范围名称搞混
    11大EL隐式对象中,其中一个是表示自身对象外,其余都是表示的Map结构
    
    EL隐式对象名称            Java类型                                  备注
    pageContext             javax.servlet.jsp.PageContext               与JSP中的内置对象完全相同
    
    剩余的都是代表的Map集合
    pageScope               java.util.Map                               代表着PageContext页面范围域那个Map
    requestScope            java.util.Map                               代表着ServletRequest请求范围域那个Map
    sessionScope            java.util.Map                               代表着HttpSession会话范围域那个Map
    applicationScope        java.util.Map                               代表着ServletContext应用范围域那个Map
    
    param                   java.util.Map                               代表着请求参数。key:请求参数的名称。value:请求参数的值,它是一个字符串。
    paramValues             java.util.Map                               代表着请求参数。key:请求参数的名称。value:请求参数的值,它是一个字符串数组。
    
    header                  java.util.Map                               代表着请求消息头。key:头名称。value:头值,它是一个字符串。
    headerValues            java.util.Map                               代表着请求消息头。key:头名称。value:头值,它是一个字符串数组。
    
    cookie                  java.util.Map                               代表客户端提交的Cookie的Map。key:cookie的name。value:cookie对象本身
    initParam               java.util.Map                               代表着全局初始化参数(web.xml中context-param).key:参数名称。value:参数值
    
    
4.4调用普通类的静态方法(EL函数)
    编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤):
        a、编写一个普通的java类,提供一个静态方法
        public class FunctionDemo {
            public static String toUpperCase(String str){
                return str.toUpperCase();
            }
        }
        b、在JavaWeb应用的WEB-INF目录下建立一个扩展名是tld(taglib definition)的XML文件(参考Tomcat中的示例)。内容如下:
        
        
            1.0
            myfn
            http://www.itcast.cn/myfn
            
                toUppercase
                cn.itcast.el.FunctionDemo
                java.lang.String toUpperCase( java.lang.String )
            
        
        c、(可选步骤)前提是把tld文件放到了WEB-INF目录下。
        告知应用,tld文件和tld中的uri的对应。修改web.xml,增加以下内容:
        
            
                http://www.itcast.cn/myfn
                /WEB-INF/myfn.tld
            
          
        d、在JSP中使用
            用taglib指令,引入自定义的EL函数库
            <%@ taglib uri="http://www.itcast.cn/myfn" prefix="myfn"%>
             ${myfn:toUppercase(p)}

五、SUN提供的标准EL函数库

JSTL标准标签:(Jsp Standard Tag Libary)
    ***Core:核心
    **Fmt:国际化
    SQL:数据库操作
    XML:xml操作
    **fn:EL函数库
    
    导入JSTL的jar包。standard.jar jstl.jar

六、JSTL中的核心标签库(替换掉JSP中的Java脚本)

c:if
    作用:判断是否为true,如果为true,那么标签的主体内容就会显示。
    属性:
        test:必须的。要求必须是boolean的。支持表达式(EL或Java表达式)
        var:保存test运算结果的变量
        scope: 保存的域范围。默认是page
        
c:forEach
    遍历:数组、List、Set、Map
    属性:
        items:要遍历的目标对象。支持表达式
        var:变量名。指向当前遍历的集合中的一个元素
        begin:开始的索引(含)
        end:结束的索引(含)
        step:步长。默认是1
        varStatus:取一个名字,引用了一个对象。
            该对象有以下方法:
                int getIndex():当前记录的索引号。从0开始
                int getCount():当前记录的顺序。从1开始
                boolean isFirst():是否是第一条记录
                boolean isLast():是否是最后一条记录

你可能感兴趣的:(JavaBean和EL)