Struts源码粗略分析一:准备开发环境

源码准备

去Apache官网下载一份最新的Struts发布程序,包括源码,地址为http://struts.apache.org/downloads.html。最新Struts源码版本为1.3.10,http://struts.apache.org/download.cgi#struts1310。为了方便,直接下载一个最完全的版本struts-1.3.10-all.zip就可以了。

Struts源码粗略分析一:准备开发环境

开发环境配置

一个带有tomcat插件的eclipse,当然,系统用什么Servlet容器都无所谓,只要能搞定配置就好。电子书准备:《Struts: The Complete Reference》,正如书名那样,对Struts说明确实比较全面,虽然做了很多Struts开发,但仅仅限于使用范围,并不是对它的所有内容都能够熟练掌握,所以用这本书可以在遇到问题的时候查一查。

创建Tomcat工程struts1,相关配置如下图所示。

Struts源码粗略分析一:准备开发环境

  1. 将把下载的Struts源码解压到该目录下。
  2. 将/struts1/struts-1.3.10/src/apps/cookbook/src/main/webapp下内容全部拷贝至/struts1/web-app。
  3. 将/struts1/struts-1.3.10/lib下内容全部拷贝至/struts1/web-app/WEB-INF/lib下并加入构建路径。

(注意:在classes以及lib子目录下,都可以存放Java类文件。在运行过程中,Tomcat的类装载器先装载classes目录下的类,再装载lib目录下的类。因此,如果两个目录下存在同名的类,classes目录下的类具有优先权,这样就可以保证构建路径中的struts源码会优先于lib中的内容而被装载)

如果没有使用Tomcat,请自行将下列包加入构建路径

TOMCAT_HOME/lib/servlet-api.jar - C:/Program Files/apache-tomcat-6.0.20/lib/servlet-api.jar
TOMCAT_HOME/lib/jasper.jar - C:/Program Files/apache-tomcat-6.0.20/lib/jasper.jar
TOMCAT_HOME/lib/jsp-api.jar - C:/Program Files/apache-tomcat-6.0.20/lib/jsp-api.jar
TOMCAT_HOME/lib/el-api.jar - C:/Program Files/apache-tomcat-6.0.20/lib/el-api.jar
TOMCAT_HOME/lib/annotations-api.jar - C:/Program Files/apache-tomcat-6.0.20/lib/annotations-api.jar

好了,最后一步,执行eclipse的构建功能,点击菜单Project,然后Clean,只需Clean工程struts1即可。(注意:不要忘记Clean后重新编译)

以下是eclipse的.classpath文件配置(这里已经删除struts开头的jar包)

<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="struts-1.3.10/src/apps/blank/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/apps/cookbook/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/apps/el-example/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/apps/examples/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/apps/mailreader/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/apps/scripting-mailreader/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/assembly/src/main/resources"/> <classpathentry excluding="org/apache/struts/mock/" kind="src" path="struts-1.3.10/src/core/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/core/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/el/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/el/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/extras/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/extras/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/extras/src/site/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/mailreader-dao/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/mailreader-dao/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/scripting/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/scripting/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/src/site/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/taglib/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/taglib/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/tiles/src/main/java"/> <classpathentry kind="src" path="struts-1.3.10/src/tiles/src/main/resources"/> <classpathentry kind="src" path="struts-1.3.10/src/tiles/src/site/resources"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/antlr-2.7.2.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/bsf-2.3.0.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-beanutils-1.8.0.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-chain-1.2.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-digester-1.8.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-fileupload-1.1.1.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-io-1.1.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-logging-1.0.4.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/commons-validator-1.3.1.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/jstl-1.0.2.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/oro-2.0.8.jar"/> <classpathentry kind="lib" path="web-app/WEB-INF/lib/standard-1.0.6.jar"/> <classpathentry kind="var" path="TOMCAT_HOME/lib/servlet-api.jar"/> <classpathentry kind="var" path="TOMCAT_HOME/lib/jasper.jar"/> <classpathentry kind="var" path="TOMCAT_HOME/lib/jsp-api.jar"/> <classpathentry kind="var" path="TOMCAT_HOME/lib/el-api.jar"/> <classpathentry kind="var" path="TOMCAT_HOME/lib/annotations-api.jar"/> <classpathentry kind="output" path="web-app/WEB-INF/classes"/> </classpath>

.tomcatplugin配置

<?xml version="1.0" encoding="UTF-8"?> <tomcatProjectProperties> <rootDir>/web-app</rootDir> <exportSource>false</exportSource> <reloadable>true</reloadable> <redirectLogger>false</redirectLogger> <updateXml>true</updateXml> <warLocation></warLocation> <extraInfo></extraInfo> <webPath>/struts1</webPath> </tomcatProjectProperties>

如下图执行web-app配置,将当前程序目录映射到tomcat中,

Struts源码粗略分析一:准备开发环境

C:/Program Files/apache-tomcat-6.0.20/conf/Catalina/localhost会多出一个struts1.xml文件,内容为

<Context path="/struts1" reloadable="true" docBase="C:/Workspace/eclipse/struts1/web-app" workDir="C:/Workspace/eclipse/struts1/work" />

运行示例程序

从浏览器中访问“http://localhost:8080/struts1”

Struts源码粗略分析一:准备开发环境