eclipse搭配Resin开发Struts应用之环境篇
大家都知道,无论是Eclipse还是Resin,它们在启动的时候都能自动寻找JDK路径,这里假设JDK路径为$JAVA_HOME。
JDK下面有一个非常重要的目录,即: $JAVA_HOME/jre/lib,大家用得最普遍的就是$JAVA_HOME/jre/lib/ext目录(可以放置常用的JAR扩展包)了,我喜欢将jtds-1.2.jar文件拷贝到此目录下,当运行打包好的JAR时,不需要为每一个JAR配置数据库驱动加载路径(当然,你也可以将jtds-1.2.jar加入到系统环境变量中,只是你得Reboot your computer而已)。
好了,下面言归正传,如果你用myeclipse配置了resin服务器,你会发现myeclipse并不能启动resin,而在控制台上打印出来的是resin.conf:241: Required file '\conf\app-default.xml' can not be read for resin:import.,很明显,是系统找不到app-default.xml'文件,而这个文件确实在$RESIN_HOME/conf/目录下,打开resin.conf,定位到133行,发现配置文件是这样的:<resin:import path="${resin.home}/conf/app-default.xml"/>,因为${resin.home}/就是Resin的当前目录,所以我们可以换成<resin:import path="./conf/app-default.xml"/>,再启动,OK。
resin.conf里面还有一个地方比较有意思,且看211行代码:<web-app-deploy path="webapps"/>,系统配置的Web应用目录为$RESIN_HOME/webapps,而Eclipse工程发布后是在$RESIN_HOME/deploy,所以我们干脆就不用myeclipse里的站点发布功能,直接修改resin.conf文件,加载一个外部目录,将它手指向你的工程,找到如下代码(240行)<web-app id="/" root-directory="webapps/ROOT"/>,在后面加上<web-app id="/import" root-directory="D:/eclipse/work/Import/WebRoot"/>。
好像问题还不止这么简单,因为我的D:/eclipse/work/Import/WebRoot工程是用Struts框架开发的,所有在resin启动import的时候,报了如下的错误:
javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl
XML解释器的错误,顺便在Google上一搜,找到了三种解决办法,受推荐的方案如下:
在 $JAVA_HOME/jre/lib目录下新建endorsed目录(如果没有的话),然后将你工程lib目录下的xercesImpl.jar拷贝到刚建的那个目录里面,问题即可解决。
不推荐在$JAVA_HOME/jre/lib下面新建内容为javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl的jaxp.properties文件,当然,如果你准备强行这么干的话,你的Tomcat就只能暗无天日了。
下面是附加内容
附一:Apache与Resin集成
1. 更改Apache的文档目录:在httpd.conf中找到DocumentRoot,将其后双引号中的内容换成"D:/HttpServer/webapps/"
2. 配置Apache的Resin模块:在httpd.conf最后添加如下代码
LoadModule caucho_module "D:/HttpServer/resin/win32/apache-2.2/mod_caucho.dll"
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoStatus yes
</IfModule>
3. 更改默认的访问文件:在httpd.conf中找到DirectoryIndex ,在其后添加index.jsp index.php
注意:每个文件之间用空格间隔开
4. Resin虚拟目录配置:在resin.conf中找到如下行<host id="" root-directory=".">,然后加入
<web-app id="/import" root-directory="D:/HttpServer/webapps/import"/>
id为访问路径,root-directory为文档目录所在路径
5. 设置Resin为自启动:你必须先在系统环境变量中配置JAVA_HOME,然后在命令行窗口中进入Resin目录,输入httpd -install(安装Resin为Windows系统服务),httpd -remove(移除……)
经过以上步骤,Resin就可以监听处理所有Apache不能处理的文件,包括.jsp, .do及其它控制器路径,并同时解决了用80端口访问时图片相对路径不对的问题
附二:Apache中加入PHP处理模块,并且屏蔽Resin3.1的PHP解释模块
1. 屏蔽resin的PHP处理模块:resin从3.0开始支持php,其3.1版本的PHP解释配置是在app-default.xml中(与resin.conf同一个目录),只要对servlet配置比较熟悉的都能在app-default.xml中轻易屏蔽PHP解释功能,打开app-default.xml后,用<!-- -->屏蔽如下代码即可:
<servlet servlet-name="resin-php"
servlet-class="com.caucho.quercus.servlet.QuercusServlet">
</servlet>
<servlet-mapping url-pattern="*.php" servlet-name="resin-php"/>
<welcome-file>index.php</welcome-file>
2. 配置Apache的PHP处理模块:在httpd.conf最后添加如下代码(我的PHP是装在D:/HttpServer/php5)
## Add php5 module
LoadModule php5_module "D:/HttpServer/php5/php5apache2_2.dll"
AddType application/x-httpd-php .php
# Configure php.ini path
PHPIniDir "D:/HttpServer/php5/"
呵呵,因为Resin的PHP配置不太熟悉,网上的资料也比较少,所以还是用了Apache+PHP的处理方式。
JDK下面有一个非常重要的目录,即: $JAVA_HOME/jre/lib,大家用得最普遍的就是$JAVA_HOME/jre/lib/ext目录(可以放置常用的JAR扩展包)了,我喜欢将jtds-1.2.jar文件拷贝到此目录下,当运行打包好的JAR时,不需要为每一个JAR配置数据库驱动加载路径(当然,你也可以将jtds-1.2.jar加入到系统环境变量中,只是你得Reboot your computer而已)。
好了,下面言归正传,如果你用myeclipse配置了resin服务器,你会发现myeclipse并不能启动resin,而在控制台上打印出来的是resin.conf:241: Required file '\conf\app-default.xml' can not be read for resin:import.,很明显,是系统找不到app-default.xml'文件,而这个文件确实在$RESIN_HOME/conf/目录下,打开resin.conf,定位到133行,发现配置文件是这样的:<resin:import path="${resin.home}/conf/app-default.xml"/>,因为${resin.home}/就是Resin的当前目录,所以我们可以换成<resin:import path="./conf/app-default.xml"/>,再启动,OK。
resin.conf里面还有一个地方比较有意思,且看211行代码:<web-app-deploy path="webapps"/>,系统配置的Web应用目录为$RESIN_HOME/webapps,而Eclipse工程发布后是在$RESIN_HOME/deploy,所以我们干脆就不用myeclipse里的站点发布功能,直接修改resin.conf文件,加载一个外部目录,将它手指向你的工程,找到如下代码(240行)<web-app id="/" root-directory="webapps/ROOT"/>,在后面加上<web-app id="/import" root-directory="D:/eclipse/work/Import/WebRoot"/>。
好像问题还不止这么简单,因为我的D:/eclipse/work/Import/WebRoot工程是用Struts框架开发的,所有在resin启动import的时候,报了如下的错误:
javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl
XML解释器的错误,顺便在Google上一搜,找到了三种解决办法,受推荐的方案如下:
在 $JAVA_HOME/jre/lib目录下新建endorsed目录(如果没有的话),然后将你工程lib目录下的xercesImpl.jar拷贝到刚建的那个目录里面,问题即可解决。
不推荐在$JAVA_HOME/jre/lib下面新建内容为javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl的jaxp.properties文件,当然,如果你准备强行这么干的话,你的Tomcat就只能暗无天日了。
下面是附加内容
附一:Apache与Resin集成
1. 更改Apache的文档目录:在httpd.conf中找到DocumentRoot,将其后双引号中的内容换成"D:/HttpServer/webapps/"
2. 配置Apache的Resin模块:在httpd.conf最后添加如下代码
LoadModule caucho_module "D:/HttpServer/resin/win32/apache-2.2/mod_caucho.dll"
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoStatus yes
</IfModule>
3. 更改默认的访问文件:在httpd.conf中找到DirectoryIndex ,在其后添加index.jsp index.php
注意:每个文件之间用空格间隔开
4. Resin虚拟目录配置:在resin.conf中找到如下行<host id="" root-directory=".">,然后加入
<web-app id="/import" root-directory="D:/HttpServer/webapps/import"/>
id为访问路径,root-directory为文档目录所在路径
5. 设置Resin为自启动:你必须先在系统环境变量中配置JAVA_HOME,然后在命令行窗口中进入Resin目录,输入httpd -install(安装Resin为Windows系统服务),httpd -remove(移除……)
经过以上步骤,Resin就可以监听处理所有Apache不能处理的文件,包括.jsp, .do及其它控制器路径,并同时解决了用80端口访问时图片相对路径不对的问题
附二:Apache中加入PHP处理模块,并且屏蔽Resin3.1的PHP解释模块
1. 屏蔽resin的PHP处理模块:resin从3.0开始支持php,其3.1版本的PHP解释配置是在app-default.xml中(与resin.conf同一个目录),只要对servlet配置比较熟悉的都能在app-default.xml中轻易屏蔽PHP解释功能,打开app-default.xml后,用<!-- -->屏蔽如下代码即可:
<servlet servlet-name="resin-php"
servlet-class="com.caucho.quercus.servlet.QuercusServlet">
</servlet>
<servlet-mapping url-pattern="*.php" servlet-name="resin-php"/>
<welcome-file>index.php</welcome-file>
2. 配置Apache的PHP处理模块:在httpd.conf最后添加如下代码(我的PHP是装在D:/HttpServer/php5)
## Add php5 module
LoadModule php5_module "D:/HttpServer/php5/php5apache2_2.dll"
AddType application/x-httpd-php .php
# Configure php.ini path
PHPIniDir "D:/HttpServer/php5/"
呵呵,因为Resin的PHP配置不太熟悉,网上的资料也比较少,所以还是用了Apache+PHP的处理方式。