第十一天3月4日之JSP、EL表达式、el的11个隐式对象、jstl



一、JavaBean概念(非常重要)
1、JavaBean就是遵循一定书写规范的Java类型(开发中:封装数据)
 a、必须有默认的构造方法,类必须是public的   public class Person{}
 b、字段都是私有的(字段名首字母小写)  private String userName;
 c、提供公有的getter或者setter方法(访问属性)    public void setUserName(String userName){this.userName  = userName;} public String getUserName(){}
 d、一般情况下需要实现java.io.Serializable接口
 
 
二、JSP中操作JavaBean的动作元素(内置标签)
 1、jsp:useBean
  <jsp:useBean id="p" class="com.itheima.domain.Person" scope="page"></jsp:useBean>
  功能:从指定的域范围中用id的名字查找,没有找到,创建class指定的类的实例,并放到scope指定的域范围中,key是id的值。
  
  属性:
  id:对象的引用|域范围中存储的key值
  class:JavaBean的全名
  scope:指定的域范围。page:PageContext-Map    request:ServletRequest-Map  session:HttpSession-Map application:ServletContext-Map
 2、jsp:getProperty
  相当于调用getter方法
  name:userBean中的id的那个值
  property:读属性
 3、jsp:setProperty
  相当于调用setter方法
  name:userBean中的id的那个值
  property:写属性(使用请求参数填充数据时,如果请求参数名称和写属性名称一致,可以使用*通配符)
  param:请求参数的名称
三、Web开发的模型:
 模型1:(JSP+JavaBean)
 模型2:(MVC)
  M:Model  模型JavaBean
  V:View   视图JSP
  C:Controller 控制器 Servlet

 实际开发中:JSP中不能出现一行Java表达式、脚本、声明(不能出现<%%>)
 
 Java表达式:替代方案EL表达式
 脚本(控制逻辑):自定义标签
 
四、EL表达式(四大域对象有关。很重要)

0、EL的基本语法和表现形式
 a、基本形式:${EL表达式}
 b、${p}  什么意思?pageContext.findAttribute("p").EL表达式只能从四大域范围中取数据。EL表达式没有null,会显示""
  ${p.name}  p.getName()
功能:
1、获取数据
 运算符:
  点运算符:调用getter方法
  []:获取有顺序的集合元素,同时还能完成点运算符能做的事。  ${p.name}==${p[‘name‘]}
2、执行运算(简单的数学或逻辑)
 empty运算符:判断一个对象是不是null或者"",还能判断一个集合中有木有元素。返回true
 
3、获取web开发常用对象(11EL隐式对象):难点---容易和jsp的9个隐式对象混淆

EL内置对象名称   表示的是啥(记住)      备注        JSP内置对象名称
pageContext    javax.servlet.jsp.PageContext   和JSP的内置对象完全一样     <%pageContext%>
pageScope    java.util.Map       PageContext中的那个Map:页面范围  没有
requestScope   java.util.Map       ServletRequest中的那个Map:请求范围  没有
sessionScope   java.util.Map       HttpSession中的那个Map:会话范围  没有
applicationScope  java.util.Map       ServletContext中的那个Map:应用范围  没有

header     java.util.Map       封装了请求消息头的Map:key头名value头值String  没有
headerValues   java.util.Map       封装了请求消息头的Map:key头名value头值数组   没有
param     java.util.Map       封装了请求参数的Map:key参数名value是参数值String 没有
paramValues    java.util.Map       封装了请求参数的Map:key参数名value是参数值String[] 没有
cookie     java.util.Map<String,Cookie>   封装了Cookie的Map:key是cookie对象的name,value是cookie对象本身
initParam    java.util.Map       封装了全局参数的Map:key是参数名 value参数值(web.xml  <context-param>)    

4、调用Java中的静态方法(扩展字符串操作):自定义EL函数
开发步骤:与日后讲的自定标签步骤完全一致。
a、编写一个类,提供静态方法:
package com.itheima;

public class MyFunctions {
 public static String toUppercase(String s){
  return s.toUpperCase();
 }
}
b、在WEB-INF目录下,建立一个扩展名为tld(Tag Libary Definition)的xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
 version="2.0">
 <tlib-version>1.0</tlib-version>
 <short-name>myfn</short-name>
 <!-- 名称空间:不代表实际文件 -->
 <uri>http://www.itheima.com/jsp/myfunctions</uri>

 <function>
  <description>touppercase</description>
  <name>toUppercase</name>
  <function-class>com.itheima.MyFunctions</function-class>
  <function-signature>java.lang.String toUppercase( java.lang.String )</function-signature>
 </function>
</taglib>

c、(可选的)在web.xml中,建立tld文件和tld中的uri的对应关系。
  <jsp-config>
   <taglib>
    <taglib-uri>http://www.itheima.com/jsp/myfunctions</taglib-uri>
    <taglib-location>/WEB-INF/myfn.tld</taglib-location>
   </taglib>
  </jsp-config>
d、怎么在JSP中使用自定义的EL函数
<%@ taglib uri="http://www.itheima.com/jsp/myfunctions" prefix="myfn"%>

 <%
    pageContext.setAttribute("s", "abcdefg");
    %>
    ${myfn:toUppercase(s)}


五、JSTLCore库中的:

Java开发的标准:JCP.org   主要成员:SUN、Apache、Red Hat....

1、JSTL:Java Standard Tag Libary   JSP中标准(Apache实现的)
2、JSTL由5部分组成
 core:核心标签库
 fmt:国际化标签库(格式化)
 sql:操作数据标签库(不学)
 xml:操作XML的标签库(不学)
 fn:自定义的EL函数(学学吧)
 
3、Core中的标签:

 c:if:等同java语言的if
  test:必须的。支持表达式(JSP表达式或EL),返回值必须是boolean类型的。
   如果test为true,c:if标签的主体内容就会显示。
   
 
 c:forEach:循环遍历主体内容
  items:要遍历的集合、数组等
  var:指定引用当前元素的名称
  begin:开始的索引
  end:结束的索引
  step:步长。默认1
  varStatus:指定一个名称,它引用一个对象。该对象记录着当前遍历的元素的一些信息。
   getIndex():获取当前遍历的元素的索引
   getCount():获取当前遍历的元素的计数
   isLast():当前遍历的元素是否是最后一个
   isFirst():当前遍历的元素是否是第一个
  

作业:

一、JavaBean的书写规范(记住)
二、JSP中操作JavaBean的动作元素(练习一下)
三、MVC+三层架构(图)
四、EL表达式四大功能(记住,练习)
五、JSTL中core的:if forEach(练熟)



以下是用el表达式遍历map集合的原理








以下是map集合的结构:以下是自己的笔记:

1.我们写的JavaBean,在开发中一般不用new出来JavaBean,
会利用反射。

2.<jsp:setProperty name=""  property=""/>会对基本数据类型
进行转换。


地址栏是字符串  url?age=24
JavaBean是int,如int age;


3.mvc

开发好以下两个,一切都没问题!

(1)数据模型JavaBean很重要,核心1

(2)业务接口:核心2

如学生信息管理系统

JavaBean是学生,把握名词

业务:增删改查

Struts:MVC框架,主要作用在于表现层
Spring:各层间解耦(Ioc)、AOP
Hibernate:专门为DAO层服务


4.el表达式没有空指针的问题和数组越界问题。会显示“”

5.EL表达式,只能访问域对象中的“属性”数据,只能访问属性数据
如{p.birthday.class}相当于调用getter
不能写p对象中的没有的属性,只能.点属性

6.el表达式只能取数据。


7.set集合是不能重复的,无顺序的

map集合中的key底层实现就是set集合

el表达式不能去set集合中的数据。因为set集合是不能重复的,无顺序的


8.empty运算符

数组和list在el表达式中运用一样。只是数组长度是固定的。

开发中集合用的多。特别是map集合。


9.三元运算符

10.el表达式和JSP脚本片段不能不能 互相掺杂写

11.el表达式的11个隐士对象和JSP中9大内置对象的不是同一回事,
但是完成的功能是一样的。

12.pageContext是一样的。功能完全一样。是同一个对象。

13.EL表达式内不能使用类,不能使用字符串连接。
调用Java中的静态类。


14.escapeXml(String str)


第十一天3月4日之JSP、EL表达式、el的11个隐式对象、jstl,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。