随笔-46  评论-64  文章-2  trackbacks-0
  2008年8月2日
     摘要: 废话不多说,先看看我们最终达到的效果.  源码下载在文章最后。Style1:Style2:上面的tag cloud实现思想如下:1. Server端提供Tag的相关信息,包括TagName,Posts等,使用JSON格式传输数据    这个例子中,我使用Servlet,使用json-lib将Bean转成JSON字符串。当然Tag的相关信息这里只是演示,真实环境中可能就需要从数据库取出来再处理了。 ...  阅读全文
posted @ 2008-09-28 16:10 jht 阅读(3130) | 评论 (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.使用服务器端控制AJAX页面缓存:
    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")无效。

3.Cache-Control头域
  Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
  Public指示响应可被任何缓存区缓存。
  Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
  no-cache指示请求或响应消息不能缓存
  no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
  max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
  min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
  max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Read more:
   http://www.jiehoo.com/browser-cache-problem.htm (作者: Cherami 原载: 浏览器缓存)
   再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件
   HTTP协议header头域- PetitPrince - 博客园
posted @ 2008-09-27 10:23 jht 阅读(16552) | 评论 (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 >

  < class ="button"  href ="#"  onclick ="changeCssFile()" >
  
< span  id ="buttonText" > Change another style </ span >
 
</ a >
posted @ 2008-09-25 12:26 jht 阅读(744) | 评论 (0)编辑 收藏
A:浏览器问题,可能会把透明区域显示成有灰度的区域,解决办法,转成gif格式吧,支持比较好

see: GIF or PNG? - Quality Web Tips
posted @ 2008-09-24 23:02 jht 阅读(1164) | 评论 (1)编辑 收藏
比如说下面的这个header.jsp中有中文,那么包含这个文件的网页可能就会出现乱码
<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 阅读(434) | 评论 (0)编辑 收藏
     摘要: log4j 支持运行时修改日志的相关配置,看了一下他的source code, 用FileWatchdog这个类来做的,代码也很简单,通过循环在一定时间间隔读取配置文件,如果文件变更,调用一个doOnChange()方法。如果自己要做一个支持运行时修改配置的系统可参考上面的做法。下面是一段支持运行时修改配置的系统Prototype代码,和log4j的做法稍有不同,使用Observer模式,使其更加...  阅读全文
posted @ 2008-09-04 14:49 jht 阅读(1289) | 评论 (0)编辑 收藏

可以用下面这个方法来做到

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 阅读(609) | 评论 (0)编辑 收藏
自定义TagLib的时候碰到这个错误,原因是编辑tld文件的时候没有使用DTD或者Schema文件验证,拼写错误导致最终报这个错误消息

如果遇到同样问题的同学,不妨检查一下自己的tld文件对不对。

BTW: tld类的异常需要处理好
posted @ 2008-08-19 15:53 jht 阅读(7664) | 评论 (1)编辑 收藏
这个问题可能由两个地方导致

1. 你的POJO类不是一个JavaBean,最可能的原因是没有一个无参构造函数
2. 在dwr.xml里这个类的<convert>指定的不对,或者是没有指定
posted @ 2008-08-11 11:21 jht 阅读(4135) | 评论 (4)编辑 收藏
数独游戏小程序

数独的游戏规则很简单:在九个九宫格里,填入1到9的数字,让每个数字在每个行、列及九宫格里都 只出现一次就可以过关了! 虽然游戏的规则十分简单,但很多人在没有计算机辅助时,常常会不小心造成违规状况。

下面是我做的一个数独小程序 1.0 版本,目前功能如下:

选择外观;
数独自动出题;
数独自动解题;
游戏计时功能;
开启解答辅助功能,出错提示;
开启解答辅助功能,辅助线;

程序基于Java Swing,运行需要JRE1.6以上版本。
 
可双击执行的JAR包,点此下载。(Napkin的LookAndFeel蛮好玩,我就一起弄在里面了)
程序的源码,点此下载。(有兴趣修改源码的朋友可以DIY出自己喜欢的版本。)

或者也可以从 http://groups.google.com/group/afun 这个group的files里面找到上面的两个文件。

对数独有兴趣的朋友可以玩一下这个小工具,欢迎留下宝贵意见,让这个小程序更完善。 可能我会另开一篇日志说一下Source Code相关的东西。
 
Figure: 填值的出错提示
Figure: 填值的出错提示2
演示如何使用辅助线功能:
首先选中Enable help system选项, 然后选择按钮 1 ,这时候关于 1 的辅助线开启,把不能填1的单元格都画了线,画线规则是,1所在的行画桃红色横线,1所在的列画橙色竖线,1所在的九宫格画粉色X线,如下图,这时候我们发现,在第五行只有第二列这一单元格格没有被画上线,那么这一个肯定只能填上1。
这时候我们就可以把1填入到 第五行第二列,这时辅助线会自动更新。如下图,此时没有可以确定填入1的单元格了,我们可以换一个数看辅助线。
 OK,我们选择3,这时候辅助线如下,我们发现第五行第四格可以确定填入3这个值。
填入3之后的图如下:
解答成功之后,会弹出恭喜解答成功的对话框。
自动解答功能可能出现的异常情况
当题目比较复杂的时候,可能会弹出如下的提示异常的对话框,这是因为解答数独用了递归的解法,难度大时递归深度很深,导致栈溢出,可以通过运行JVM时指定线程栈大小的方法来解决这个问题。
posted @ 2008-08-02 17:32 jht 阅读(2686) | 评论 (4)编辑 收藏