JSP
指令
page
配置language、ISELIgnore、errorPage、IsErrorPage、ContentType、charSet等)
include
引入其他jsp
import
导包
脚本
<%%>
<%! %>
<%= %>
注释
<%-- – %>
EL 表达式
EL表达式中只能获取域对象中存储的属性值
JSP域对象 | EL表达式中获取域对象的对象 |
---|---|
request | requestScope |
session | SessionScope |
application | applicationScope |
page | pageScope |
可以调用方法,获取提交的数据 | 只能 .键 获取域对象中存储的属性值 (本质上只封装了getAttribute这个方法,或者说封装了域对象的属性键值对) |
Q1:
JSP:EL中 pageContext.request 和 requestScope 的区别?
A:
pageContext.request是一个具体的对象,在你的http请求过程中存在。
requestScope是一个Map,这个Map中存放了在request作用域中的属性键值对,就这么简单而已,它不是request对象,而是request对象属性的封装,pageContext.request才是真正的request对象。
EL中你可以在这个周期中放置、获取对象。(当然,其实真正的操作也是针对request对象的)。 比如${requestScope.a},其实就是要表明我告诉jsp要到requestScope这个声明周期中获取对象a。而背后的实现就是从request.getAttribute("a"),然后根据表达式得到相应的a对象。
JSTL
使用步骤
-
导入jar包并buildpath
-
引入资源
<%@ taglib uri="http://java.sun/com//jsp/jstl/core" prefix="c"> [prefix] :前缀,指定了jsp页面中JSTL表达式的识别以c为前缀
语法
必须配合EL表达式使用
C:IF标签
没有else,只能用if A ,再用if!A形成互斥
可以用于判断是否登录,给出不同显示(注册?退出登录…)
<c:if test("3==3")>//错误!
</c:if>
<c:if test"${3==3}">//正确
</c:if>
C:Choose标签
<c:choose test("3==3")>//错误!
</c:choose>
<c:choosec:if test"${3==3}">//正确
</c:choose>
C:foreach标签
用作普通for循环
<c:forEach var="i" begin="1" end="8" step="3" varstatus="t">
${i}${t.index}${t.count}
</c:forEach>
//等价于java 中 for(int i=1;i<=10;i+=3);
//varstatus ="t" t.index相当于i 的值(1,4,7),count相当于次数(1,2,3)
//step="XX" 必须是正数(C:foreach标签用于输出页面布局,不存在倒序输出,输出了一个,这个就在下一个前面~倒序只能先把要输出的东西倒序,然后按顺序再放到页面循环输出)
用作增强for循环——遍历不确定长度的集合
<% ArrayList<String> arr = new ArrayList<String>();
Session.setAttribute("arr",arr);%>
<c:forEach var="a" items="${arr}" varstatus="t">
${a}
</c:forEach>
//等价于java 中 foreach(a:arr)
//varstatus ="t" t.index相当于下标(0,1,2,...),count相当于次数(1,2,3,...)
//step="XX" 必须是正数(C:foreach标签用于输出页面布局,不存在倒序输出,输出了一个,这个就在下一个前面~倒序只能先把要输出的东西倒序,然后按顺序再放到页面循环输出)