天天看点

第二十八天:听课笔记

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 占位符