Web核心之JSP(已经落伍,简单罗列知识,不再整理)
JSP
JSP = HTML + Java + JSP自己的一些语法
JSP也是一个动态网页开发技术。
JSP本质
Jsp实际上就是一个Servlet,在jsp被访问时,tomcat会把jsp转换为一个java类,然后编译执行这个java类。
jsp在第一次被访问时会被翻译为一个Servlet并执行。
JSP三个脚本
<% %> JSP代码块
此处编写的代码会出现在翻译后的Servlet的service方法中。
<%! %> JSP声明
此处编写的代码会出现在翻译后的Servlet的成员位置。
<%= %> JSP表达式
此处编写的代码会出现在翻译后的Servlet的service方法中的out.print();输出语句的参数位置。
内置对象
就是JSP已经声明好的,直接可以使用的一些对象。
out
jsp中定义的一个字符输出流。用于往页面输出数据。
和respones中的输出流不是同一个。
JSP页面主要功能: 展示数据、获取用户输入。不要在其中编写复杂业务逻辑。
用户交互
脚本 3种
指令 3个
page指令:用于配置页面中的属性。
isELIgnored="false"
是否忽略EL表达式,要指定为false
include指令:用于包含其他页面。
<%@include file="top.jsp"%>
相当于代码的拷贝。
taglib指令:用于引入标签库
<%@taglib prefix="" uri="" %>
注释 3种
html <!-- -->
java // /* */ /** */
jsp <%-- --%>
原则:
在什么类型的代码中,就使用什么类型的注释。
内置对象 9个
pageContext*****
1. 域对象
作用范围
当前页面
创建
当访问一个jsp页面时,它会创建
销毁
当我们从当前页面跳转走之后,它会销毁
2. 获取其他8个内置对象
3.在其他三个域中存取值
存值:
pageContext.setAttribute("key","value",PageContext.APPLICATION_SCOPE);
第三个参数指定往哪个域中存值。
取值:
pageContext.getAttribute("key",PageContext.APPLICATION_SCOPE);
第二个参数指定往哪个域中存值。
pageContext.findAttribute("key");
查找指定key的值。从域中查找。依次从最小的域到最大的域查找,只要找到一个,就直接返回。
最小到最大:page域 < request域 < session域 < application域
MVC开发模式*****
M: Model模型层
作用:封装数据,执行业务逻辑
包含:JavaBean(实体类)、Service(业务逻辑层)、DAO(数据访问层\持久层)
V:View视图层
作用:和用户进行交互
包含:JSP和HTML
C:Controller控制层
作用:获取用户输入,并进行功能的分发
包含:Servlet
EL表达式
表达式语言,在jsp中使用。
语法:
${ 表达式 }
作用:
1. 执行运算
empty
空值判断。如果一个对象为null,或者一个有长度的对象的长度为0. empty判断都会返回true
2. 从域中获取值
1. el表达式只能从域对象中获取值
2. 语法:
1. ${域名称.键名}:从指定域中获取指定键的值
域名称:
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application(ServletContext)
注意:
域名称的对象,类型实际上是Map<String,Object>
里面把域对象中存储的值获取出来了
2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。规则和pageContext.findAttribute()一致。
获取对象类型的数据
${对象的key.对象的属性名}
属性仅和setter、getter方法相关。
从list集合获取数据
${list[索引]}
从map集合中获取数据
${map.key}或者${map["key"]}
EL隐式对象
cookie
可以获取指定名称的cookie的值
${ cookie.name.value }
pageContext
可以获取其他八个jsp的内置对象
${pageContext.request.contextPath}获取虚拟目录
JSTL*****
概念:JSP标准标签库,用于引入第三方定义的一系列标签在jsp中使用。
作用:在页面中编写一些简单逻辑代码。使用标签来进行编写而不是java代码。
分类:
核心标签库 core
if
属性:test,指定一个boolean值或者一个能计算出boolean值的el表达式
forEach
1.普通for循环
for(int i = 0; i < 10; i ++){
}
属性:
begin:开始值(包含)
end:结束值(包含)
var:临时变量
step:步长,每次变量的增量
2. 增强for循环
List<User> list;
for(User user : list){
}
属性:
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
EL函数库
只能在EL表达式中使用
基本上都是string的函数。
fn:length()函数
1. 求指定字符串的长度
2. 求集合或数组的长度
使用步骤:
1. 导入jar包
2. 在页面中引入标签库,使用taglib指令