国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深入理解SKIP_PAGE,EVAL_PAGE

2019-11-18 16:24:46
字體:
來源:轉載
供稿:網友

  本文來自JZK的把blog:http://www.matrix.org.cn/blog/jzk/

首先要說, 很慚愧 java怎么說也學了有3年左右了, 下面要說的東西我才知道. 要是早就知道的就表怪我了
剛開始學jsp的時候就知道Jsp會被轉譯成servlet, 然后再進行編譯. 這個道理在偶爾寫錯嵌在Jsp的代碼時更加看的清楚. 這時候會發生編譯不過 然后可以看到很多中間代碼的痕跡, 當然 如果你仔細找一下, 所有的應用服務器都會有臨時的jspjava文件.
好了, 接下來該說主題了, 對于標題 我想大多數人都不陌生把. 這不就是在doEndTag的時候返回的值麻. 恩... 我以前對他們的認識也一直就在此而已, 看看Tomcat的source

/**
* Skip the rest of the page.
* Valid return value for doEndTag.
*/

public final static int SKIP_PAGE = 5;

/**
* Continue evaluating the page.
* Valid return value for doEndTag().
*/

public final static int EVAL_PAGE = 6;


我還是覺得朦朦朧朧的. 哦, 就是這樣阿.
然后每次寫tag的時候 基本寫到這里 tag都快寫完了, 也就隨便返回了一個. 沒有啥特別的發生.

今天下午閑來無事, 難得有的休息的一個下午. 拿起MyEclipse跟Tomcat.隨手寫了個tag 想仔細看看翻譯過來的Jsp 代碼. 結果給我發現下面這樣一段code
PRivate boolean _jspx_meth_jzk_TagTest_2(PageContext _jspx_page_context)
throws Throwable {
JspWriter out = _jspx_page_context.getOut();
// jzk:TagTest
org.jzk.taglib.TagTest _jspx_th_jzk_TagTest_2 = (org.jzk.taglib.TagTest) _jspx_tagPool_jzk_TagTest_testAttr.get(org.jzk.taglib.TagTest.class);
_jspx_th_jzk_TagTest_2.setPageContext(_jspx_page_context);
_jspx_th_jzk_TagTest_2.setParent(null);
_jspx_th_jzk_TagTest_2.setTestAttr("test");
int _jspx_eval_jzk_TagTest_2 = _jspx_th_jzk_TagTest_2.doStartTag();
if (_jspx_th_jzk_TagTest_2.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
return true;
_jspx_tagPool_jzk_TagTest_testAttr.reuse(_jspx_th_jzk_TagTest_2);
return false;
}


主要是這句話
if (_jspx_th_jzk_TagTest_2.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
return true;

讓我一拍腦袋... 原來是這樣的阿

你知道了嗎?

于是我為了驗證自己的發現 改了下那個tag
private int i = 0;
public int doEndTag() throws JspException {
i++;
try {
pageContext.getResponse().getWriter().print(i + "
");
} catch (IOException e) {
//...
}
return EVAL_PAGE;
}

然后在jsp里面嵌了3個這樣的tag

果不其然. 頁面上分別打出了 1 2 3

原來EVAL_PAGE是指不銷毀(交給Garbage Collection)而是放回池中回收利用. 這樣他的生命期就會延長到整個頁面load結束....

附上TestTag文件:

org.jzk.taglib.TagTest

/*
* Created on 2005-4-17
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.jzk.taglib;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
* @author Jzk
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class TagTest extends TagSupport {
private String testAttr;

private int i = 0;

/*
* (non-Javadoc)
*
* @see javax.servlet.jsp.tagext.Tag#doEndTag()
*/
public int doEndTag() throws JspException {
i++;
try {
pageContext.getResponse().getWriter().print(i + "
");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return EVAL_PAGE;
}

/*
* (non-Javadoc)
*
* @see javax.servlet.jsp.tagext.Tag#doStartTag()
*/
public int doStartTag() throws JspException {
try {
pageContext.getResponse().getWriter().write(testAttr);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.doStartTag();
}

/**
* @return Returns the testAttr.
*/
public String getTestAttr() {
return testAttr;
}

/**
* @param testAttr
* The testAttr to set.
*/
public void setTestAttr(String testAttr) {
this.testAttr = testAttr;
}
}


jzk.tld

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>bean</shortname>
<uri>jzk/tag</uri>
<tag>
<name>TagTest</name>
<tagclass>org.jzk.taglib.TagTest</tagclass>
<attribute>
<name>testAttr</name>
<required>false</required>
<rteXPrvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
進入討論組討論。

(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合江县| 谷城县| 江口县| 成安县| 沁水县| 太康县| 个旧市| 奉新县| 海淀区| 翁牛特旗| 连南| 樟树市| 沂源县| 清镇市| 清徐县| 普陀区| 仙桃市| 伊宁县| 瓦房店市| 新疆| 图片| 吴江市| 平邑县| 东安县| 武宣县| 武城县| 深州市| 彩票| 封开县| 满城县| 京山县| 师宗县| 鹤岗市| 赤城县| 修武县| 澄迈县| 夹江县| 盐边县| 清新县| 宾阳县| 乐清市|