• struts2 src study 准备工作 和 略谈 如何读开源代码(Java)


    第一个最简单的struts2工程,将xworks-core和struts-core的lib包替换成源码,然后需要的jar包有:

    E:\simon\debug_workspace_0225\s2-src-study\WebContent\WEB-INF\lib>tree /f

    卷 新加卷 的文件夹 PATH 列表
    卷序列号为 DC32-D1F0
    E:.
        asm-3.0.jar
        asm-commons-3.0.jar
        commons-collections-3.2.jar
        commons-fileupload-1.2.1.jar
        commons-io-1.3.2.jar
        commons-lang-2.6.jar
        commons-logging-1.0.4.jar
        common_lang_IO4xworks.jar
        freemarker-2.3.16.jar
        javassist-3.7.ga.jar
        junit-3.8.1.jar
        ognl-3.0.jar
        spring-beans-2.5.6.jar
        spring-context-2.5.6.jar
        spring-core-2.5.6.jar
        spring-web-2.5.6.jar
        testng-5.1-jdk15.jar
        velocity-1.6.3.jar
        velocity-tools-1.3.jar

    没有子文件夹

    还有 servlet-api.jar   jsp-api.jar

    类似于这样的路径下  /home/tools/apache-tomcat-5.5.31/common/lib

    注意点有:

    1. asm的包需要去asm的官网下,struts2的all包中没有,app中也没有。     javassist-3.7.ga.jar 在那个blank的app中就能找到。all包中也没有提供。

    2. apache的common-lang需要2.4以上版本 , 否则StringUtils.startsWith(...)方法找不到,详见common-lang的文档。

    3. xworks的包换成源码之后 ,会依赖部分common-lang 和common-io包的class文件,但其打包结构又不同于apache原有的包结构,多了了

        一层xwork,所以不能直接引用。weimao提供的做法是:将需要的class文件按其现有包结构取出打成zip包,再改名成.jar包,放到lib目录下即可

    4. tomcat与eclipse集合后,eclipse采取的是虚拟部署,部署路径不是tomcat的webapp下,在类似的E:\simon \debug_workspace_0225\.metadata\.plugins\org.eclipse.wst.server.core \tmp0这个路径下

    5. 要放置struts-2.0.dtd ,struts-2.1.7.dtd   dtd文件在src目录下 ,否则会出现解析配置文件时,报错:struts.xml找不到,其实是dtd没有找到

    6. default.properties (在struts-core的jar包中),和其他一道的properties文件也要复制到src目录下

    ====================================================================

    点5 没有做  会报错  说struts.xml  文件找不到 其实你已经放了,只是没有放dtd文件。

    我一开始被这个问题困扰了好久

    点6 没有做 会发生以下异常,我也被困扰了好久

    2011-3-5 22:48:58 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info信息: Parsing configuration file [struts.xml]2011-3-5 22:48:59 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn警告: Unable to load config class org.apache.struts2.interceptor.debugging.DebuggingInterceptor at interceptor - file:/root/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/struts2-src-study/WEB-INF/classes/struts-default.xml:131:115 probably due to a missing jar, which might be fine if you never plan to use the debugging interceptor2011-3-5 22:48:59 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error严重: Actual exceptionCaught Exception while registering Interceptor class org.apache.struts2.interceptor.debugging.DebuggingInterceptor - interceptor - file:/root/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/struts2-src-study/WEB-INF/classes/struts-default.xml:131:115at org.apache.struts2.impl.StrutsObjectFactory.buildInterceptor(StrutsObjectFactory.java:77)at com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference(InterceptorBuilder.java:70)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.lookupInterceptorReference(XmlConfigurationProvider.java:998)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptorStack(XmlConfigurationProvider.java:817)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptorStacks(XmlConfigurationProvider.java:830)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptors(XmlConfigurationProvider.java:853)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:460)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:275)at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)at c............



    如何阅读开源代码

    最近看到一篇文章  基本认可他的说法

    http://jnn.iteye.com/blog/1316930

    并且 同时要看单元测试代码 这点非常好

    还有我以前在邮件列表中回复过的细节:

    我的做法是:
    用IDE,我用的Eclipse
    在工程中,将需要读的代码替换掉其打包好的jar包
    然后能让含有这个要读的代码的工程跑起来
    然后边debug边读
    当前前提是熟悉这个要读的代码大概有哪些模块,干什么用的

    用Eclipse有几点:
    上面半仙已经提到一个
    “找不到实现类。。。不会用eclipse吗? ctrl+t 啊。。。。“
    我再加几个
    看某个类或者方法在这个工程中的引用或者调用  ctrl+shift+g
    在工程中搜索某个关键字  ctrl+h
    在debug时候有 ctrl+shift+i 查看某个变量 或者方法的运行结果,当圈复杂度很高的时候,这样可能不行,

    需要在上面的变量窗口中查看(跟断点窗口在一块的)
    当某个调用层次不清楚的时候,可以在debug的时候 在你不清除的地方加上Thread.currentThread().getStackTrace() ,然后选中刚加的这段代码, ctrl+shift+i,然后。。

    我的做法当中还有一点是:
    边阅读,边在代码中阅读感悟和打一些标识,用代码仓库管理这份阅读的代码,以后能清晰看到阅读的轨迹




  • 相关阅读:
    面向对象设计原则之二:开放封闭原则
    面向对象设计原则之一:单一职责原则
    设计模式之四:适配器模式(Adapter Pattern)
    面向对象设计原则之六:合成/聚合复用原则
    设计模式之三:迭代器模式(IteratorPattern)
    面向对象设计原则之五:迪米特法则
    设计模式之二:观察者模式(Observer Pattern)
    五分钟搭建 Flash 视频直播站
    Flash Media Server 3 开发版供下载
    不掉线的路由器路由特殊技术分析
  • 原文地址:https://www.cnblogs.com/simoncook/p/1971870.html
Copyright © 2020-2023  润新知