1.传统标签与简单标签:
2.Tag:
doStartTag 是否执行标签体
doEndTag 是否执行余下的JSP页面
setPageContext
setParent 嵌套形式
getParent 在doStartTag之前调用
release 可以用来释放资源,如数据库连接,不过JSP用数据库太恐怖了
3.先后顺序:
实例化
setPageContext
setParent
doStartTag
doEndTag
release 被垃圾回收器回收之前调用release
胡乱猜,不如去看源码,查文档
4.Tag 它孩子的实现:传统标签
SimpleTag 它孩子的实现:简单标签
IterationTag 迭代标签
BodyTag 修改标签体
5.Tag接口
定义了JSP页面与标签处理器类之间的通信规则
down一个JSP的规范
6.防止盗链:
String referer = request.getHeader("referer"); //得到你从哪个页面访问过来的
String sitePart = "http://"+request.getServerName();
referer != null && referer.startsWith(sitePart)
要是通过servlet访问了
通过超链接访问,referer有值,
直接在浏览器中输入地址,referer为null
7.属性
setter
在tld中描述标签的属性
setter是在doStartTag调用之前执行
<attribute>
name
required 是否是必须的
rtexprvalue 是否可以放$等 运行时表达式
<c:if test=""></c:if>
属性值可以是各种类型,不一定就是string
如结合${} 可以是boolean ,int 等
<jsp:useBean ></jsp:useBean >
<c: readfile>
8.IteratorTag
9.SimpleTag
setJspContext JspContext是pageContext的父类
setParent 嵌套用的
getParent
setJspBody 将标签体封装成JspFragment对象传递给标签处理器对象
在传统标签中,是通过doStartTag 或 doEndTag的return this.XXX返回值来决定是否执行
那么JspFragment 一定有执行或不执行的方法
doTag
输出,迭代,修改 标签体
10.JspFragment 这段JPS片度不能包含JSP脚本元素
getJspContext
public abstract void invoke(java.io.Writer out)
如果是response.getWriter 就写到浏览器
如果是我们定义的容器,就写到容器中
如果没有调用JspFragment.invoke 忽略
重复调用 迭代
写到容器 修改
11.
JspContext getJspContext
JspFragment getJspBody
JspFragment.invoke
scriptless 无脚本的
doTag中抛异常 余下的JSP代码就不执行了
throw new SkipPageException(...)
12.迭代
<c:forEach var items>
每次迭代的时候,标签就取出当次迭代的数据
将数据放到JspContext域中 键和值:键是var
由于JspContext是那个页面的
13.修改标签体内容的标签
浏览器看到<>就解析了,所有我们就将<>转义
14.StringWriter
FileReader
XXXRead
XXXWriter
表示写到XXX , 除包装流以外
压栈
<c:htmlFilter>
<c:readFile file="" />
</c:htmlFilter>
15.JSTL标签库:
核心标签库
国际化标签
数据库标签 不用学
XML 不用学
JSTL函数
16.
<c:out>
pageContext out
如果它是一个标签的子标签 输出到父标签中的流中
value escapeXml default
<c:set>
设置域中的属性
var value scope target(往哪灌数据) property
<c:remove>
var scope
<c:catch>捕获异常
var 异常对象
<c:if>
test
var
scope
<c:choose>
if .... else
<c:choose>
<c:when test="">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
嵌套 if else if else
<c:forEach>
var items begin end step varStatus
<c:param>
设置/得到URL地址后面的参数
配合 url redirect
<c:url>
<c:redirect>
<c:import>
new 一个 往域里面放 name
EL 取得
fmt bundle 只在标签体有用
setBundle 都有用
fmt param 占位符
第二十八天:听课笔记
最新推荐文章于 2021-07-26 09:08:44 发布