<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-46  評(píng)論-64  文章-2  trackbacks-0
      2008年7月28日
         摘要: 廢話不多說(shuō),先看看我們最終達(dá)到的效果.? 源碼下載在文章最后。Style1:Style2:上面的tag cloud實(shí)現(xiàn)思想如下:1. Server端提供Tag的相關(guān)信息,包括TagName,Posts等,使用JSON格式傳輸數(shù)據(jù)??? 這個(gè)例子中,我使用Servlet,使用json-lib將Bean轉(zhuǎn)成JSON字符串。當(dāng)然Tag的相關(guān)信息這里只是演示,真實(shí)環(huán)境中可能就需要從數(shù)據(jù)庫(kù)取出來(lái)再處理了。?...  閱讀全文
    posted @ 2008-09-28 16:10 jht 閱讀(3161) | 評(píng)論 (3)編輯 收藏
    1. response.setHeader("Cache-Control","no-cache");

    This is used to prevent the browser from caching your dynamic content generated by a JSP or Servlet.

    You set this attribute in the HTTP header of the response object which would tell the browser not to cache this content. So everytime you request the page again, the browser would make a new request, instead of showing you a cached page.

    2.使用服務(wù)器端控制AJAX頁(yè)面緩存:
    ??? response.setHeader( "Pragma", "no-cache" );
    ??? response.addHeader( "Cache-Control", "must-revalidate" );
    ??? response.addHeader( "Cache-Control", "no-cache" );
    ??? response.addHeader( "Cache-Control", "no-store" );
    ??? response.setDateHeader("Expires", 0);
    單純的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")無(wú)效。

    3.Cache-Control頭域
      Cache-Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control并不會(huì)修改另一個(gè)消息處理過(guò)程中的緩存處理過(guò)程。請(qǐng)求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各個(gè)消息中的指令含義如下:
      Public指示響應(yīng)可被任何緩存區(qū)緩存。
      Private指示對(duì)于單個(gè)用戶的整個(gè)或部分響應(yīng)消息,不能被共享緩存處理。這允許服務(wù)器僅僅描述當(dāng)用戶的部分響應(yīng)消息,此響應(yīng)消息對(duì)于其他用戶的請(qǐng)求無(wú)效。
      no-cache指示請(qǐng)求或響應(yīng)消息不能緩存
      no-store用于防止重要的信息被無(wú)意的發(fā)布。在請(qǐng)求消息中發(fā)送將使得請(qǐng)求和響應(yīng)消息都不使用緩存。
      max-age指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)。
      min-fresh指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。
      max-stale指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

    Read more:
    ???http://www.jiehoo.com/browser-cache-problem.htm?(作者: Cherami?原載: 瀏覽器緩存)
    ???再論怎么有效利用瀏覽器緩存之怎么避免瀏覽器緩存靜態(tài)文件
    ???HTTP協(xié)議header頭域- PetitPrince - 博客園
    posted @ 2008-09-27 10:23 jht 閱讀(16592) | 評(píng)論 (3)編輯 收藏
    < link?id = " css " ?rel = StyleSheet?type = " text/css " ?href = " ./button.css " ? />

    < script?type = " text/javascript " >
    ?
    var ?cssArray? = ? new ?Array( " button.css " , " button1.css " , " button2.css " , " button3.css " , " button4.css " , " button5.css " , " button6.css " );
    ?
    var ?index? = ? 0 ;
    ?
    function ?changeCssFile()
    ?
    {
    ??
    var ?css? = ?document.getElementById( " css " );
    ??index
    ++ ;
    ??
    if (index < cssArray.length)
    ??
    {
    ???css.href?
    = ?cssArray[index];
    ??}

    ??
    else
    ??
    {
    ???index?
    = 0 ;
    ???css.href?
    = ?cssArray[index];
    ??}

    ?}

    </ script >

    ? < a? class ="button" ?href ="#" ?onclick ="changeCssFile()" >
    ??
    < span? id ="buttonText" > Change?another?style </ span >
    ?
    </ a >
    posted @ 2008-09-25 12:26 jht 閱讀(767) | 評(píng)論 (0)編輯 收藏
    A:瀏覽器問(wèn)題,可能會(huì)把透明區(qū)域顯示成有灰度的區(qū)域,解決辦法,轉(zhuǎn)成gif格式吧,支持比較好

    see: GIF or PNG? - Quality Web Tips
    posted @ 2008-09-24 23:02 jht 閱讀(1191) | 評(píng)論 (1)編輯 收藏
    比如說(shuō)下面的這個(gè)header.jsp中有中文,那么包含這個(gè)文件的網(wǎng)頁(yè)可能就會(huì)出現(xiàn)亂碼
    <jsp:include page="header.jsp"></jsp:include>

    解決辦法是在header.jsp里加上下面這段話:
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    posted @ 2008-09-23 12:46 jht 閱讀(463) | 評(píng)論 (0)編輯 收藏
         摘要: log4j 支持運(yùn)行時(shí)修改日志的相關(guān)配置,看了一下他的source code, 用FileWatchdog這個(gè)類來(lái)做的,代碼也很簡(jiǎn)單,通過(guò)循環(huán)在一定時(shí)間間隔讀取配置文件,如果文件變更,調(diào)用一個(gè)doOnChange()方法。如果自己要做一個(gè)支持運(yùn)行時(shí)修改配置的系統(tǒng)可參考上面的做法。下面是一段支持運(yùn)行時(shí)修改配置的系統(tǒng)Prototype代碼,和log4j的做法稍有不同,使用Observer模式,使其更加...  閱讀全文
    posted @ 2008-09-04 14:49 jht 閱讀(1321) | 評(píng)論 (0)編輯 收藏

    可以用下面這個(gè)方法來(lái)做到

    import ?org.apache.log4j.Logger;
    import ?org.apache.log4j.PropertyConfigurator;

    public ? class ?DemoRunTimeChangeLog4J? {

    ?
    private ? static ? final ?Logger?logger? = ?Logger.getLogger(DemoRunTimeChangeLog4J. class );

    ?
    public ? static ? void ?main(String[]?args)? {
    ??PropertyConfigurator.configureAndWatch(
    " src/log4j.configureAndWatch " , 60000 );
    ??
    ??
    while ?( true )? {
    ???
    if ?(logger.isDebugEnabled())? {
    ????logger.debug(
    " DEBUG?MESSAGE " );
    ???}


    ???logger.info(
    " Info?Message " );

    ???
    try ? {
    ????Thread.sleep(
    5000 );
    ???}
    ? catch ?(InterruptedException?e)? {
    ???}

    ??}

    ?}

    }


    posted @ 2008-09-03 17:35 jht 閱讀(635) | 評(píng)論 (0)編輯 收藏
    自定義TagLib的時(shí)候碰到這個(gè)錯(cuò)誤,原因是編輯tld文件的時(shí)候沒(méi)有使用DTD或者Schema文件驗(yàn)證,拼寫(xiě)錯(cuò)誤導(dǎo)致最終報(bào)這個(gè)錯(cuò)誤消息

    如果遇到同樣問(wèn)題的同學(xué),不妨檢查一下自己的tld文件對(duì)不對(duì)。

    BTW: tld類的異常需要處理好
    posted @ 2008-08-19 15:53 jht 閱讀(7767) | 評(píng)論 (1)編輯 收藏
    這個(gè)問(wèn)題可能由兩個(gè)地方導(dǎo)致

    1. 你的POJO類不是一個(gè)JavaBean,最可能的原因是沒(méi)有一個(gè)無(wú)參構(gòu)造函數(shù)
    2. 在dwr.xml里這個(gè)類的<convert>指定的不對(duì),或者是沒(méi)有指定
    posted @ 2008-08-11 11:21 jht 閱讀(4204) | 評(píng)論 (4)編輯 收藏
    數(shù)獨(dú)游戲小程序

    數(shù)獨(dú)的游戲規(guī)則很簡(jiǎn)單:在九個(gè)九宮格里,填入1到9的數(shù)字,讓每個(gè)數(shù)字在每個(gè)行、列及九宮格里都 只出現(xiàn)一次就可以過(guò)關(guān)了!?雖然游戲的規(guī)則十分簡(jiǎn)單,但很多人在沒(méi)有計(jì)算機(jī)輔助時(shí),常常會(huì)不小心造成違規(guī)狀況。

    下面是我做的一個(gè)數(shù)獨(dú)小程序 1.0 版本,目前功能如下:

    選擇外觀;
    數(shù)獨(dú)自動(dòng)出題;
    數(shù)獨(dú)自動(dòng)解題;
    游戲計(jì)時(shí)功能;
    開(kāi)啟解答輔助功能,出錯(cuò)提示;
    開(kāi)啟解答輔助功能,輔助線;

    程序基于Java Swing,運(yùn)行需要JRE1.6以上版本。
    ?
    可雙擊執(zhí)行的JAR包,點(diǎn)此下載。(Napkin的LookAndFeel蠻好玩,我就一起弄在里面了)
    程序的源碼,點(diǎn)此下載。(有興趣修改源碼的朋友可以DIY出自己喜歡的版本。)

    或者也可以從 http://groups.google.com/group/afun?這個(gè)group的files里面找到上面的兩個(gè)文件。

    對(duì)數(shù)獨(dú)有興趣的朋友可以玩一下這個(gè)小工具,歡迎留下寶貴意見(jiàn),讓這個(gè)小程序更完善。 可能我會(huì)另開(kāi)一篇日志說(shuō)一下Source Code相關(guān)的東西。
    ?
    Figure: 填值的出錯(cuò)提示
    Figure: 填值的出錯(cuò)提示2
    演示如何使用輔助線功能:
    首先選中Enable help system選項(xiàng), 然后選擇按鈕 1 ,這時(shí)候關(guān)于 1 的輔助線開(kāi)啟,把不能填1的單元格都畫(huà)了線,畫(huà)線規(guī)則是,1所在的行畫(huà)桃紅色橫線,1所在的列畫(huà)橙色豎線,1所在的九宮格畫(huà)粉色X線,如下圖,這時(shí)候我們發(fā)現(xiàn),在第五行只有第二列這一單元格格沒(méi)有被畫(huà)上線,那么這一個(gè)肯定只能填上1。
    這時(shí)候我們就可以把1填入到 第五行第二列,這時(shí)輔助線會(huì)自動(dòng)更新。如下圖,此時(shí)沒(méi)有可以確定填入1的單元格了,我們可以換一個(gè)數(shù)看輔助線。
    ?OK,我們選擇3,這時(shí)候輔助線如下,我們發(fā)現(xiàn)第五行第四格可以確定填入3這個(gè)值。
    填入3之后的圖如下:
    解答成功之后,會(huì)彈出恭喜解答成功的對(duì)話框。
    自動(dòng)解答功能可能出現(xiàn)的異常情況
    當(dāng)題目比較復(fù)雜的時(shí)候,可能會(huì)彈出如下的提示異常的對(duì)話框,這是因?yàn)榻獯饠?shù)獨(dú)用了遞歸的解法,難度大時(shí)遞歸深度很深,導(dǎo)致棧溢出,可以通過(guò)運(yùn)行JVM時(shí)指定線程棧大小的方法來(lái)解決這個(gè)問(wèn)題。
    posted @ 2008-08-02 17:32 jht 閱讀(2715) | 評(píng)論 (4)編輯 收藏
    new & valueof & 直接賦值的區(qū)別
    首先來(lái)看下面這段代碼
    public static void main(String[] args) {
    ??String s1 = "s1";
    ??String s2 = new String("s2");
    ??String s3 = String.valueOf(12345);
    }
    ?
    編譯成class文件之后,使用eclipse class file viewer查看
    ?
    ? // Method descriptor #15 ([Ljava/lang/String;)V
    ? // Stack: 3, Locals: 4
    ? public static void main(java.lang.String[] args);
    ???? 0? ldc <String "s1"> [16]
    ???? 2? astore_1 [s1]

    ???? 3? new java.lang.String [18]
    ???? 6? dup
    ???? 7? ldc <String "s2"> [20]
    ???? 9? invokespecial java.lang.String(java.lang.String) [22]
    ??? 12? astore_2 [s2]
    ??? 13? sipush 12345
    ??? 16? invokestatic java.lang.String.valueOf(int) : java.lang.String [25]
    ??? 19? astore_3 [s3]

    ??? 20? return
    ????? Line numbers:
    ??????? [pc: 0, line: 12]
    ??????? [pc: 3, line: 13]
    ??????? [pc: 13, line: 14]
    ??????? [pc: 20, line: 20]
    ????? Local variable table:
    ??????? [pc: 0, pc: 21] local: args index: 0 type: java.lang.String[]
    ??????? [pc: 3, pc: 21] local: s1 index: 1 type: java.lang.String
    ??????? [pc: 13, pc: 21] local: s2 index: 2 type: java.lang.String
    ??????? [pc: 20, pc: 21] local: s3 index: 3 type: java.lang.String
    }
    ?
    對(duì)于第一行代碼 String s1 = "s1"; 編譯成字節(jié)碼之后,對(duì)應(yīng)兩條指令,
    1. ldc指令從運(yùn)行時(shí)常量池push一個(gè)值到Frame的操作數(shù)棧上面,這個(gè)值在這里就是"s1"字符串的引用,
    2. astore指令將objectref存儲(chǔ)到局部變量,這里也就是存儲(chǔ)到局部變量s1。
    ?
    對(duì)于第二行代碼???String s2 = new String("s2");編譯成字節(jié)碼之后,對(duì)于的指令也用高亮標(biāo)注出來(lái)了,這里把操作數(shù)棧的情況畫(huà)了出來(lái),希望能幫助理解。橙色標(biāo)注的為棧頂元素。
    1. new指令會(huì)在堆上創(chuàng)建對(duì)象,操作數(shù)棧里壓入創(chuàng)建的objectref,
      ?
      objectref
      ...
    2. dup指令復(fù)制操作數(shù)棧頂?shù)脑兀?
      objectref
      objectref
      ...
    3. ldc指令依然是從常量池push一個(gè)值到Frame的操作數(shù)棧上,這個(gè)值是"s2"字符串的引用。?
      "s2"_ref
      objectref
      objectref
      ...
    4. invokespecial 指令調(diào)用一個(gè)方法,這里就是調(diào)用String的構(gòu)造函數(shù),調(diào)用完成之后棧上還有一個(gè)objectref?
      objectref
      ...
    5. astore指令將objectref存儲(chǔ)到局部變量,這里也就是存儲(chǔ)到局部變量s2。?
      ????????????
      ...
    ?
    對(duì)于第三行代碼??String s3 = String.valueOf(12345); 編譯成字節(jié)碼之后對(duì)應(yīng)的指令,
    1. sipush 將 12345 壓棧
    2. invokestatic 調(diào)用 String.valueof(int) 方法
    3. astore 將棧頂?shù)膶?duì)象引用存儲(chǔ)到本地變量s3 (這里不再深究這個(gè)棧頂元素是怎么來(lái)的了)
    ?
    PMD檢查代碼的時(shí)候,有這樣的warning: Avoid instantiating?String objects.Call String.valueOf() instead. PMD給出的原因是In JDK 1.5, calling new String() causes memory allocation. String.valueOf() is more memory friendly.
    ?
    經(jīng)過(guò)上面的分解,我們應(yīng)該知道原因了,以后寫(xiě)代碼的時(shí)候,初始化一個(gè)字符串,??String s1 = "s1"; 這樣的代碼肯定比??String s2 = new String("s2");代碼強(qiáng),將其他類型的值轉(zhuǎn)換成String的時(shí)候,valueof方法比new方法效率也高。

    ?
    備注:
    A frame is used to store data and partial results(局部變量,操作數(shù)棧), as well as to perform dynamic linking , return values for methods, and dispatch exceptions.
    ?
    ldc指令的操作數(shù)棧: ...->...,value (value是int,float 或者 string 類型的引用)
    astore的操作數(shù)棧: ...,objectref->...
    new指令的操作數(shù)棧: ...->...,objectref
    dup指令的操作數(shù)棧: ...,value->...,value,value
    invokespecial的操作數(shù)棧: ...,objectref, [agr1,[arg2...]]->...
    invloestatic的操作數(shù)棧:..., [arg1, [arg2...]]?-> ...

    ?
    如果要理解的更透徹建議閱讀以下參考資料:
    posted @ 2008-07-28 14:27 jht 閱讀(1704) | 評(píng)論 (1)編輯 收藏
    主站蜘蛛池模板: 在线亚洲午夜片AV大片| 国产精品亚洲精品爽爽| eeuss草民免费| 亚洲国产成人精品女人久久久 | 亚洲第一黄色网址| 污网站免费在线观看| 亚洲精品成人网久久久久久| 羞羞漫画小舞被黄漫免费| 国产伦精品一区二区三区免费下载| 亚洲精品无码成人片久久不卡| 免费高清在线爱做视频| 亚洲一区二区三区高清在线观看 | a视频在线观看免费| 亚洲av永久无码精品漫画 | 自拍偷自拍亚洲精品情侣| a在线免费观看视频| 国产成人免费高清激情明星| 亚洲精品人成电影网| 国内精品乱码卡1卡2卡3免费| 亚洲人成色99999在线观看| 亚洲国产日韩成人综合天堂| 香蕉免费看一区二区三区| 亚洲电影一区二区三区| 99久久免费精品国产72精品九九 | 亚洲一欧洲中文字幕在线| 免费视频中文字幕| 一个人晚上在线观看的免费视频 | 亚洲国产精品一区第二页| 99久久精品免费精品国产| 亚洲精品亚洲人成在线播放| 免费无码VA一区二区三区| 亚洲AV成人无码天堂| 免费国产成人午夜私人影视| 99精品视频在线观看免费| 亚洲一级免费毛片| 国产成人A亚洲精V品无码| 国产乱子精品免费视观看片| 亚洲AV人无码综合在线观看| 妞干网免费观看视频| GOGOGO免费观看国语| 国产91在线|亚洲|