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