读文章可以咬文嚼字,读代码也可以。今天随意(随意是指读哪个类很随意,读起来实际是咬文嚼字)地阅读Struts2的几个类的代码 ,有点心得,特记录如下。
在eclipse的workspace中,很自然会先读org.apache.struts2 这个包的类,因为它是最前面显示。StrutsStatics 接口没有任何方法,有几个final static 变量。这样设计,是为了让类去实现该接口,方便直接使用静态变量。其实一般做法是,写一个常量类,里面尽是一些静态常量,谁要用就直接用类名来引用即可。如果说这样每使用一个常量便要多写个类名,那在JDK5中可以通过静态import来实现省略类名的书写。这两种做法中,我比较认同后者。
/* ...... */
public static final String PAGE_CONTEXT = " com.opensymphony.xwork2.dispatcher.PageContext " ;
public static final String STRUTS_PORTLET_CONTEXT = " struts.portlet.context " ;
}
在读Struts2的异常类StrutsException时,发现它扩展了XWorkException,而XWorkException是属于WebWork框架的(准确地说是XWork)。仔细一看,又发现StrutsException和XWorkException都实现了Locatable接口。既然StrutsException 扩展了 XWorkException ,就自然也成为Locatable的子类啦,为什么还要去显式实现Locatable接口呢?再细看,StrutsException并没有实现Locatable的方法。这样看来,StrutsException 显式实现Locatable接口是多此一举了。也许唯一的作用是让人一看就可直接知道StrutsException是Locatable的子类。
StrutsException
*/
public class StrutsException extends XWorkException implements Locatable
/*
XWorkException
*/
public class XWorkException extends RuntimeException implements Locatable
/*
Locatable 接口只有一个方法
*/
public interface Location {
public Location getLocation();
}
在RequestUtils类中,我发现有个方法的判断语句的写法不错,但又不太准确。代码如下:
if ( null != servletPath && ! "" .equals(servletPath)) {
return servletPath;
}
一般判断字符串既不为null又不为空(""),会是以下两种写法。
if (servletPath != null && servletPath.length() > 0 )