`
文章列表
    前面还记得有前辈说过看一个开源项目在不懂的情况下要去努力的去看它的单元测试,这样就能更好的领悟作者的思想。首先我们先看一下单元测试用的一些xml。 <!-- Test1.xml --> <?xml version="1.0"?> <employee firstName="First Name" lastName="Last Name"> <address type="home" street="Home Street" city= ...
    前一段时间我们阅读了Digester的最初始的版本1.0版,现在我们再看一下1.1版,看看变化 来领悟作者的重构思路。 首先我们来看一下这个版本的更新: 1.  增加了一个Rules接口,原来是放到Digester里面的 用一个HashMap<String, ArrayList<Rule>>的来保存所有的Rule的,所有的add,removey以及 lookup操作都是在Digester里面进行的,现在把这个抽取出来,感觉非常合理,Digester只是 依赖于Rues,而相关的操作都是在Rules里面进行的; 2.  ObjectCreationFac ...
    近来在学习tomcat的源码,里面有一部分是使用Digester来解析xml文件的过程。感觉这个工具的代码量比较小,就稍微研究了一下,我近来发现研究开源的代码要从最小版本开始研究,这样 研究有下面一些好处(个人感觉):    ...
     这几天在研究使用SAX方式来解析XML文件,在这个期间还没有遇到什么阻塞性的问题,也看到大家在使用Google Weather API来实现天气预报数据显示的功能,所以我也写了一个,总体来说没有大的问题,但是遇到一个很奇怪的问题,如果直接使用URL.openStream()方法获得的InputStream解析老是出问题,问题的提示很奇怪,如果把文件保存起来,再解析就没有什么问题,不知道什么问题,希望大家热心帮助,初步感觉是字符编码问题。 com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceExcepti ...
     近来在学习tomcat的源码,其中有个解析XML的工具Digester,感觉很有意思,稍微研究了一下,今天先把写的例子弄上来,以后再讲一下Digester的原理和实现,总体感觉这个组件设计的很巧妙,重点当然是Pattern和Rule已经栈的使用了。 package org.apache.commons.test; import java.io.IOException; import java.io.InputStream; import java.util.Vector; import org.apache.commons.digester.Digester; ...
我写的一个LRUCache的实现 import java.util.Hashtable; public class LRUCache { class CacheNode { CacheNode prev; CacheNode next; Object key; Object value; } private int cacheSize; private int currentSize; private Hashtable<Object,CacheN ...
      一个容器是用来处理servlet请求,并向客户端返回response对象的一个组件,它的顶级接口是org.apache.catalina.Container 接口,现在tomcat里面有四种容器。分别为Engine,Host,Context,和Wrapper。 先来解释一下这个四种类型的容器:     1. Engine, 它代表整个Caalina Servet引擎     2. Host, 它代表一个虚拟主机,可以包含多个context     3. Context,代表一个web应用程序,一个Context可以包含一个或者多个Wrapper     4. Wrapper, 它代 ...
   我们使用IntRangeFieldValidator的比较多,今天看了一下 DoubleRangeFieldValidator这个注解,看到有四个参数 minInclusive,maxInclusive,minExclusive,maxExclusive 有点懵,再看一下它的实现: 现在的疑问是我们发现minInclusiveValue和minExclusiveValue是相关的,为什么我们不能把参数变成这样四个参数呢: String min = null; String max = null; boolean includeMin = true; boolean includeM ...
struts2的RegexFieldValidator注解的实现: 其实主要也是看看validate方法的实现: public void validate(Object object) throws ValidationException { String fieldName = getFieldName(); // 得到field名称 Object value = this.getFieldValue(fieldName, object); // 得到field的值 //这里我们看到为什么在必填项上面我们还要使用一个Required ...
String的split方法的使用:     今天我用的了String的split方法,我起初都是使用的是一个参数的方法,今天发现有两个参数的,看了一下API,开始感觉有点蒙,后来看了一下它 的例子,还在网上看了一些资料,后来我就理解了这个。     这个函数接收两个参数,它的声明是下面的样子: public String[] split(String regex, int limit)     它的含义就是: 按照前面的模式串进行limit-1次分割,如果limit小于0,会进行尽可能多次的匹配,如果limit是0,则也会进行尽可能多次的匹配,但是会消除最后的空字符串。     根据函数 ...
      前两天看了Tomcat连接器部分的源码,Tomcat 4默认的连接器随意已经过时了,但是是一个很好的学习工具。它里面用了多线程的机制使得HttpProcesor异步处理。我但是也是看了很长时间,最后大部分看懂了,但是还有很多没有看懂。我自己写了一个很简单的一个连接器HttpConnector,一个HttpProcessor,帮助大家理解它,先看看程序吧。 BootStrap类很简单,就是使得HttpConnector监听socket请求,这个很好理解。 public class BootStrap { public static void main(String[] ...
     Tomcat的连接器是一个单独的模块,它可以插入到一个servlet容器里面,现在一些比较常见的连接器有Coyote,mod_jk, mod_jk2,和mod_webapp.一个Tomcat的连接器必须要满足下面的要求: 1. 它必须实现org.apache.catalina.Connector接口 2. 它 ...
  难用的isAssignableFrom,今天要判断两个类是不是存在父子关系, 首先我们会想到用instanceof去判断,但是有可能是两个接口去比较, 我们用instanceof肯定不行了。后来想到了可爱的Class对象,它里面 提供了一些我们很常见的功能,我的代码是这么写的: public class AssingableTest { public static void main(String[] args) { Class<?> parent = java.io.InputStream.class; Class<?> child = ja ...
    以前感觉用JQuery来设置自定义属性很方便,现在没有用JQuery,要用原生的JavaScript来操作自定义属性。 Jquery操作自定义属性的方法,很简洁: $("#test").attr("test","aaa") // 设置 $("#test").removeAttr("test") // 删除 var testAttr = "ddd"; $('#test[test="'+ testAttr +'"]') J ...
     现在先让我们来看一下这章我们要实现的容器的结构吧。      其实我们在看了上面的类图之后我们也很容易来理解它,各个类的职责还是没有怎么变。而且变的更单一,反而比较容易理解。 HttpConnector还是监听在端口 ...
Global site tag (gtag.js) - Google Analytics