﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-在路上休息的人</title><link>http://www.blogjava.net/liyoubiggo/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 15 May 2026 19:31:36 GMT</lastBuildDate><pubDate>Fri, 15 May 2026 19:31:36 GMT</pubDate><ttl>60</ttl><item><title>webwork2 + spring 结合的几种方法的小结</title><link>http://www.blogjava.net/liyoubiggo/archive/2008/09/22/230316.html</link><dc:creator>苏坦纳</dc:creator><author>苏坦纳</author><pubDate>Sun, 21 Sep 2008 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/liyoubiggo/archive/2008/09/22/230316.html</guid><wfw:comment>http://www.blogjava.net/liyoubiggo/comments/230316.html</wfw:comment><comments>http://www.blogjava.net/liyoubiggo/archive/2008/09/22/230316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyoubiggo/comments/commentRss/230316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyoubiggo/services/trackbacks/230316.html</trackback:ping><description><![CDATA[<span class="postbody">webwork2 + spring 结合的几种方法的小结 <br />
<br />
参考: <br />
<a class="postlink" href="http://wiki.opensymphony.com/display/WW/WebWork+2+Spring+Integration" target="_blank">http://wiki.opensymphony.com/display/WW/WebWork+2+Spring+Integration</a> <br />
<a class="postlink" href="http://forum.javaeye.com/viewtopic.php?t=8509" target="_blank">http://forum.javaeye.com/viewtopic.php?t=8509</a> <br />
<a class="postlink" href="http://forum.javaeye.com/viewtopic.php?t=9939" target="_blank">http://forum.javaeye.com/viewtopic.php?t=9939</a> <br />
<br />
下载: <br />
<a class="postlink" href="http://xwork-optional.dev.java.net/" target="_blank">http://xwork-optional.dev.java.net/</a> <br />
<br />
<br />
昨天使用webwork和spring,使用的是SpringObjectFactory方法,突然发现validator没发生作用,折腾半天, <br />
换成external-ref的方法,可以了.但是觉得external-ref的方法太麻烦了. <br />
就是去http://xwork-optional.dev.java.net/下载了一下最新的源码,换回SpringObjectFactory的方式,发现问题解决了(重载getClassInstance解决了这个问题). <br />
<br />
于是仔细研究了一下几种组合的方法,根据前面参考中的文章,整理了一下. <br />
<br />
看了xwork-optional的源码,发现其实三种方法的源码都包含在这里了,当然也包括external-ref这种方法的源码,只是换了包名和文件名,但是源码基本没变.你可以仔细看看. <br />
<br />
1.External-Ref <br />
<br />
这种方法看起来比较烦琐,可能现在都改用第3种方法了. <br />
<br />
第一步:在web.xml里面增加一个listener,如下 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;listener&gt;&nbsp;<br />
            &lt;listener-<span style="font-weight: bold; color: #990066;">class</span>&gt;org.<span style="color: #000000;">springframework</span>.<span style="color: #000000;">web</span>.<span style="color: #000000;">context</span>.<span style="color: #000000;">ContextLoaderListener</span>&lt;/listener-<span style="font-weight: bold; color: #990066;">class</span>&gt; <br />
            &lt;/listener&gt;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &lt;listener&gt; <br />
            &lt;listener-<span style="font-weight: bold; color: #990066;">class</span>&gt;</div>
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">com.<span style="color: #000000;">opensymphony</span>.<span style="color: #000000;">xwork</span>.<span style="color: #000000;">spring</span>.<span style="color: #000000;">SpringExternalReferenceResolverSetupListener</span></div>
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;/listener-<span style="font-weight: bold; color: #990066;">class</span>&gt; <br />
            &lt;/listener&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
第二步:在Spring里面配置类似Dao之类的bean,例如 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;bean id="myDAO" <span style="font-weight: bold; color: #990066;">class</span>="com.<span style="color: #000000;">ryandaigle</span>.<span style="color: #000000;">persistence</span>.<span style="color: #000000;">MyDAO</span>" singleton="<span style="font-weight: bold; color: #990066;">true</span>" /&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
第三步:配置XWork.xml,例如 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <p>&lt;package name="default" extends="webwork-default"<br />
            &nbsp;externalReferenceResolver=<br />
            "com.opensymphony.xwork.spring.SpringExternalReferenceResolver"&gt;<br />
            &nbsp;<br />
            &nbsp;&lt;interceptors&gt;<br />
            &nbsp;&nbsp;&lt;interceptor name="reference-resolver" <br />
            &nbsp;&nbsp;class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/&gt;<br />
            &nbsp;&nbsp;&lt;interceptor-stack name="myDefaultWebStack"&gt;<br />
            &nbsp;&nbsp;&nbsp;&lt;interceptor-ref name="defaultStack"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&lt;interceptor-ref name="reference-resolver"/&gt;<br />
            &nbsp;&nbsp;&lt;/interceptor-stack&gt;<br />
            &nbsp;&lt;/interceptors&gt;<br />
            &nbsp;<br />
            &nbsp;&lt;default-interceptor-ref name="myDefaultWebStack"/&gt;<br />
            &nbsp;<br />
            &nbsp;&lt;action name="myAction" class="com.ryandaigle.web.actions.MyAction"&gt;<br />
            &nbsp;&nbsp;&lt;external-ref name="DAO"&gt;myDAO&lt;/external-ref&gt;<br />
            &nbsp;&nbsp;&lt;result name="success" type="dispatcher"&gt;<br />
            &nbsp;&nbsp;&nbsp;&lt;param name="location"&gt;/success.jsp&lt;/param&gt;<br />
            &nbsp;&nbsp;&lt;/result&gt;<br />
            &nbsp;&lt;/action&gt;</p>
            <p>&lt;/package&gt;<br />
            </p>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
<br />
<br />
<br />
2.SpringObjectFactory <br />
我一直用这种方法,因为以前觉得是xwork本身提供的方法,升级有保障. <br />
<br />
配置方法: <br />
第一步.在spring的 applicationContext.xml (根据实际情况决定) 里面定义你的action,例如 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;bean name="some-action" <span style="font-weight: bold; color: #990066;">class</span>="fully.<span style="color: #000000;">qualified</span>.<span style="color: #000000;">class</span>.<span style="color: #000000;">name</span>" singleton="<span style="font-weight: bold; color: #990066;">false</span>"&gt;&nbsp;<br />
            &lt;property name="someProperty"&gt;&lt;ref bean="someOtherBean"/&gt;&lt;/property&gt;&nbsp;<br />
            &lt;/bean&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
可以看到,可以使用Spring的特性来给你的action设置属性等,当然也可以使用Spring的拦截器等 (可以使用不一定等于推荐使用) <br />
<br />
注意一定是singleton="false",因为xwork的action是这样要求的. <br />
<br />
第二步.在xwork.xml里定义你的action定义 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;"><br />
            &lt;action name="myAction" <span style="font-weight: bold; color: #990066;">class</span>="some-action"&gt; <br />
            &nbsp;&lt;result name="success"&gt;view.<span style="color: #000000;">jsp</span>&lt;/result&gt; <br />
            &lt;/action&gt;&nbsp;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
第三步.要使上面的关联生效,还要用我们的SpringObjectFactory来替换Xwork的默认ObjectFactory. <br />
最新的SpringObjectFactory里面,有两种方法,其中我觉得A方法更直观一些. <br />
<br />
A:修改web.xml <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;!-- 这个是spring的listener,可以改为你的自定义的spring的Listenter --&gt;<br />
            &lt;listener&gt;<br />
            &nbsp;&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
            &lt;/listener&gt;</div>
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;"><br />
            &lt;!-- 这个必须在 Spring ContextLoaderListener 的后面 --&gt;<br />
            &lt;listener&gt;<br />
            &nbsp; &lt;listener-class&gt;com.opensymphony.xwork.spring.SpringObjectFactoryListener&lt;/listener-class&gt;<br />
            &lt;/listener&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
B.在spring的applicationContext.xml (根据实际情况决定)里面定义一个bean,例如 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;"><br />
            &lt;bean id="spring-object-factory" <span style="font-weight: bold; color: #990066;">class</span>="com.<span style="color: #000000;">opensymphony</span>.<span style="color: #000000;">xwork</span>.<span style="color: #000000;">spring</span>.<span style="color: #000000;">SpringObjectFactory</span>"&nbsp;<br />
            &nbsp;init-method="initObjectFactory"/&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
这样Spring会自动调用initObjectFactory方法来替换Xwork的默认ObjectFactory <br />
<br />
<br />
<br />
3.ActionAutowiringInterceptor <br />
这个方法是最近出现的,可能是最简洁的方法,但是不知道性能上有没有问题,我觉得jdk1.4以后应该没有任何问题吧,至于实际效果你的自己测试一下. <br />
<br />
第一步:配置web.xml <br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;"><br />
            &lt;!-- 这个是spring的listener,可以改为你的自定义的spring的Listenter --&gt; <br />
            &lt;listener&gt;&nbsp;<br />
            &lt;listener-<span style="font-weight: bold; color: #990066;"><span style="font-weight: bold; color: #990066;">c</span>lass</span>&gt;org.<span style="color: #000000;">springframework</span>.<span style="color: #000000;">web</span>.<span style="color: #000000;">context</span>.<span style="color: #000000;">ContextLoaderListener</span>&lt;/listener-<span style="font-weight: bold; color: #990066;">class</span>&gt; <br />
            &lt;/listener&gt; <br />
            &nbsp; &nbsp; &nbsp; &nbsp;</div>
            <br />
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
第二步配置xwork.xml里面的拦截器 <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;"><br />
            &lt;interceptors&gt;&nbsp;<br />
            &nbsp;&lt;interceptor name="autowire" <span style="font-weight: bold; color: #990066;">class</span>="com.<span style="color: #000000;">opensymphony</span>.<span style="color: #000000;">xwork</span>.<span style="color: #000000;">spring</span>.<span style="color: #000000;">interceptor</span>.<span style="color: #000000;">ActionAutowiringInterceptor</span>"&gt;&nbsp;<br />
            &nbsp; &lt;param name="autowireStrategy"&gt;</div>
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">@org.<span style="color: #000000;">springframework</span>.<span style="color: #000000;">beans</span>.<span style="color: #000000;">factory</span>.<span style="color: #000000;">config</span>.<span style="color: #000000;">AutowireCapableBeanFactory</span></div>
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">@AutowireCapableBeanFactory.<span style="color: #000000;">AUTOWIRE_BY_TYPE</span></div>
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;/param&gt;&nbsp;<br />
            &nbsp;&lt;/interceptor&gt;&nbsp;<br />
            &nbsp;&lt;interceptor-stack name="autowireDefault"&gt;&nbsp;<br />
            &nbsp; &lt;interceptor-ref="autowire" /&gt;&nbsp;<br />
            &nbsp; &lt;interceptor-ref="defaultStack" /&gt;&nbsp;<br />
            &nbsp;&lt;/interceptor-stack&gt; <br />
            &lt;/interceptors&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
你的拦截器里都要包含autowire,例如这个autowireDefault就相当于以前的默认的拦截器了. <br />
其中的拦截器策略可以配置,上面配置的是根据类型,如果不配置,默认是根据名字. <br />
<br />
一共有四种策略: <br />
AUTOWIRE_CONSTRUCTOR <br />
AUTOWIRE_BY_TYPE <br />
AUTOWIRE_BY_NAME <br />
AUTOWIRE_AUTODETECT <br />
<br />
<br />
这种方法执行原理就是查找你的action的所有字段,如果和Spring的定义bean有相同的,就自动设置. <br />
<br />
假设你的Spring的applicationContext.xml里面有这样一个定义: <br />
<br />
</span>
<table width="90%" align="center" border="0" cellpadding="3" cellspacing="1">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>java代码:&nbsp;</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <div style="font-family: &#8217;Courier New&#8217;,Courier,monospace;">&lt;bean id="userManager" <span style="font-weight: bold; color: #990066;">class</span>="com.<span style="color: #000000;">test</span>.<span style="color: #000000;">UserManager</span>" /&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody">
<p><br />
<br />
如果你在xwork.xml 里面定义的某个action有一个字段叫userManager,那么在运行时刻就会自动被设置为Spring的配置文件里定义的Bean. <br />
<br />
也可以自己定义一个Interceptor</p>
<p>&nbsp; 里面用 applicationContext.getBeanFactory().autowireBeanProperties(bean, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);<br />
&nbsp; 也可以达到上面一样的效果<br />
<br />
补充:webwork2.2可以在webwork.properties里面进行配置了<br />
<br />
</p>
<p>1 配置webwork.properties文件，指定spring作为webwork的IoC容器<br />
webwork.objectFactory = spring<br />
(1)默认的autowiring模式是：by name<br />
即如果applicationContext.xml文件中的bean id与xwork.xml文件中的action name相同，就<br />
(2)如果要改为其他模式：<br />
webwork.objectFactory.spring.autoWire = name|type|auto|constructor</p>
<p>2 配置web.xml文件，启动Spring侦听器<br />
&lt;listener&gt;<br />
&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
&lt;/listener&gt;</p>
<p>3 在WEB-INF目录下增加applicationContext.xml文件<br />
例：<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;<br />
&lt;beans default-autowire="autodetect"&gt;<br />
&lt;bean id="personManager" class="com.acme.PersonManager"/&gt;<br />
...<br />
&lt;/beans&gt;</p>
<p>4 设置由Spring来初始化action<br />
4.1&nbsp; 在Spring的applicationContext.xml文件中配置bean（即action类）<br />
4.2&nbsp; 将xwork.xml中的action的class属性，由class名改为Spring中定义的bean名<br />
例如：<br />
(1)applicationContext.xml中，定义bean id是bar<br />
&lt;beans default-autowire="autodetect"&gt;<br />
&lt;bean id="bar" class="com.my.BarClass" singleton="false"/&gt;<br />
...<br />
&lt;/beans&gt;<br />
(2)xwork.xml中，action的class="bar"，而不是通常的类名<br />
&lt;package name="secure" namespace="/secure" extends="default"&gt;<br />
&lt;action name="bar" class="bar"&gt;<br />
&lt;result&gt;bar.ftl&lt;/result&gt;<br />
&lt;/action&gt;<br />
&lt;/package&gt;</p>
<br />
</span>
<img src ="http://www.blogjava.net/liyoubiggo/aggbug/230316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyoubiggo/" target="_blank">苏坦纳</a> 2008-09-22 00:09 <a href="http://www.blogjava.net/liyoubiggo/archive/2008/09/22/230316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat的reloadable参数的意思</title><link>http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227583.html</link><dc:creator>苏坦纳</dc:creator><author>苏坦纳</author><pubDate>Sun, 07 Sep 2008 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227583.html</guid><wfw:comment>http://www.blogjava.net/liyoubiggo/comments/227583.html</wfw:comment><comments>http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyoubiggo/comments/commentRss/227583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyoubiggo/services/trackbacks/227583.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开启了Tomcat的reloadable=true,那么每当相关文件改变时，Tomcat会停止web app并释放内存,然后重新加载web app.这实在是个浩大的工程。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另外网上有一篇文章是关于在Tomcat运行动态重载类，下面是该文章的内容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227583.html'>阅读全文</a><img src ="http://www.blogjava.net/liyoubiggo/aggbug/227583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyoubiggo/" target="_blank">苏坦纳</a> 2008-09-07 20:34 <a href="http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat项目发布(转载)</title><link>http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227581.html</link><dc:creator>苏坦纳</dc:creator><author>苏坦纳</author><pubDate>Sun, 07 Sep 2008 12:22:00 GMT</pubDate><guid>http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227581.html</guid><wfw:comment>http://www.blogjava.net/liyoubiggo/comments/227581.html</wfw:comment><comments>http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyoubiggo/comments/commentRss/227581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyoubiggo/services/trackbacks/227581.html</trackback:ping><description><![CDATA[<span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">本文主要总结了</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">部署发布</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">JSP</span><span style="font-size: 10pt; color: black; font-family: 宋体;">应用程序的三种方法</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<br />
<span class="apple-style-span">&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><span style="font-family: Verdana;">1</span></strong></span><strong><span style="font-size: 10pt; color: black; font-family: 宋体;">、直接放到</span></strong><strong><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Webapps</span></strong><strong><span style="font-size: 10pt; color: black; font-family: 宋体;">目录下</span></strong><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<span class="apple-style-span">&nbsp;&nbsp;&nbsp;&nbsp;Tomcat</span></span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Webapps</span><span style="font-size: 10pt; color: black; font-family: 宋体;">目录是</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">默认的应用目录，当服务器启动时，会加载所有这个目录下的应用。也可以将</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">JSP</span><span style="font-size: 10pt; color: black; font-family: 宋体;">程序打包成一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">war</span><span style="font-size: 10pt; color: black; font-family: 宋体;">包放在目录下，服务器会自动解开这个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">war</span><span style="font-size: 10pt; color: black; font-family: 宋体;">包，并在这个目录下生成一个同名的文件夹。一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">war</span><span style="font-size: 10pt; color: black; font-family: 宋体;">包就是有特性格式的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">jar</span><span style="font-size: 10pt; color: black; font-family: 宋体;">包，它是将一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Web</span><span style="font-size: 10pt; color: black; font-family: 宋体;">程序的所有内容进行压缩得到。具体如何打包，可以使用许多开发工具的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">IDE</span><span style="font-size: 10pt; color: black; font-family: 宋体;">环境，如</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Eclipse</span><span style="font-size: 10pt; color: black; font-family: 宋体;">、</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">NetBeans</span><span style="font-size: 10pt; color: black; font-family: 宋体;">、</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">ant</span><span style="font-size: 10pt; color: black; font-family: 宋体;">、</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">JBuilder</span><span style="font-size: 10pt; color: black; font-family: 宋体;">等。也可以用</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">cmd&nbsp;</span><span style="font-size: 10pt; color: black; font-family: 宋体;">命令：</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">jar -cvf applicationname.war package.*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">；</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
</span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">甚至可以在程序执行中打包：</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_3_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3_279_Open_Text.style.display='none'; Codehighlighter1_3_279_Closed_Image.style.display='inline'; Codehighlighter1_3_279_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_3_279_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_3_279_Closed_Text.style.display='none'; Codehighlighter1_3_279_Open_Image.style.display='inline'; Codehighlighter1_3_279_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">try</span><span id="Codehighlighter1_3_279_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_3_279_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;string&nbsp;strjavahome&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;system.getproperty(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">java.home</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;strjavahome&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;strjavahome.substring(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,strjavahome.lastindexof(\\))</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\\bin\\</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;runtime.getruntime().exec(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">cmd&nbsp;/c&nbsp;start&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">strjavahome</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">jar&nbsp;cvf&nbsp;hello.war&nbsp;c:\\tomcat5.0\\webapps\\root\\*</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_304_327_Open_Image" onclick="this.style.display='none'; Codehighlighter1_304_327_Open_Text.style.display='none'; Codehighlighter1_304_327_Closed_Image.style.display='inline'; Codehighlighter1_304_327_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_304_327_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_304_327_Closed_Text.style.display='none'; Codehighlighter1_304_327_Open_Image.style.display='inline'; Codehighlighter1_304_327_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(exception&nbsp;&nbsp;&nbsp;e)</span><span id="Codehighlighter1_304_327_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_304_327_Open_Text"><span style="color: rgb(0, 0, 0);">{system.out.println(e);}</span></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span></div>
<br />
<span class="apple-style-span">&nbsp;&nbsp;&nbsp;&nbsp;webapps</span></span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">这个默认的应用目录也是可以改变。打开</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">conf</span><span style="font-size: 10pt; color: black; font-family: 宋体;">目录下的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">server.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">文件，找到下面内容：</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<span class="apple-style-span">&lt;Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeloy="true" xmlValidation="falase" xmlNamespaceAware="false"&gt;</span><br />
<br />
<span class="apple-style-span">&nbsp;&nbsp;&nbsp;</span><span class="apple-converted-space">&nbsp;</span><strong><span style="font-family: Verdana;">2</span></strong></span><strong><span style="font-size: 10pt; color: black; font-family: 宋体;">、在</span></strong><strong><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">server.xml</span></strong><strong><span style="font-size: 10pt; color: black; font-family: 宋体;">中指定</span></strong><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<span class="apple-style-span">&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">在</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">的配置文件中，一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Web</span><span style="font-size: 10pt; color: black; font-family: 宋体;">应用就是一个特定的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span><span style="font-size: 10pt; color: black; font-family: 宋体;">，可以通过在</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">server.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">中新建</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span><span style="font-size: 10pt; color: black; font-family: 宋体;">里部署一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">JSP</span><span style="font-size: 10pt; color: black; font-family: 宋体;">应用程序。打开</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">server.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">文件，在</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Host</span><span style="font-size: 10pt; color: black; font-family: 宋体;">标签内建一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span><span style="font-size: 10pt; color: black; font-family: 宋体;">，内容如下。</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<span class="apple-style-span">
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Context&nbsp;</span><span style="color: rgb(255, 0, 0);">path</span><span style="color: rgb(0, 0, 255);">="/myapp"</span><span style="color: rgb(255, 0, 0);">&nbsp;reloadable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);">&nbsp;docBase</span><span style="color: rgb(0, 0, 255);">="D:\myapp"</span><span style="color: rgb(255, 0, 0);">&nbsp;workDir</span><span style="color: rgb(0, 0, 255);">="D:\myapp\work"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">其中</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">path</span><span style="font-size: 10pt; color: black; font-family: 宋体;">是虚拟路径，</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">docBase</span><span style="font-size: 10pt; color: black; font-family: 宋体;">是</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">JSP</span><span style="font-size: 10pt; color: black; font-family: 宋体;">应用程序的物理路径，</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">workDir</span><span style="font-size: 10pt; color: black; font-family: 宋体;">是这个应用的工作目录，存放运行是生成的于这个应用相关的文件。</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<br />
<span class="apple-style-span">&nbsp;&nbsp;&nbsp;</span><span class="apple-converted-space">&nbsp;</span><strong><span style="font-family: Verdana;">3</span></strong></span><strong><span style="font-size: 10pt; color: black; font-family: 宋体;">、创建一个</span></strong><strong><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span></strong><strong><span style="font-size: 10pt; color: black; font-family: 宋体;">文件</span></strong><strong><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
</span></strong><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; color: black; font-family: 宋体;">以上两种方法，</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Web</span><span style="font-size: 10pt; color: black; font-family: 宋体;">应用被服务器加载后都会在</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">conf\catalina\localhost</span><span style="font-size: 10pt; color: black; font-family: 宋体;">目录下生成一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">XML</span><span style="font-size: 10pt; color: black; font-family: 宋体;">文件，其内容如下：</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Context&nbsp;</span><span style="color: rgb(255, 0, 0);">path</span><span style="color: rgb(0, 0, 255);">="/admin"</span><span style="color: rgb(255, 0, 0);">&nbsp;docBase</span><span style="color: rgb(0, 0, 255);">="${catalina.home}/server/webapps/admin"</span><span style="color: rgb(255, 0, 0);">&nbsp;debug</span><span style="color: rgb(0, 0, 255);">="0"</span><span style="color: rgb(255, 0, 0);">&nbsp;privileged</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">Context</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
</span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">可以看出，文件中描述一个应用程序的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span><span style="font-size: 10pt; color: black; font-family: 宋体;">信息，其内容和</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">server.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">中的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span><span style="font-size: 10pt; color: black; font-family: 宋体;">信息格式是一致的，文件名便是虚拟目录名。您可以直接建立这样的一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">文件，放在</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">conf\catalina\localhost</span><span style="font-size: 10pt; color: black; font-family: 宋体;">目录下。例子如下：</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
</span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">注意：删除一个</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Web</span><span style="font-size: 10pt; color: black; font-family: 宋体;">应用同时也要删除</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">webapps</span><span style="font-size: 10pt; color: black; font-family: 宋体;">下相应的文件夹祸</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">server.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">中相应的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Context</span><span style="font-size: 10pt; color: black; font-family: 宋体;">，还要将</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">conf</span></span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US"><br />
<span class="apple-style-span">\catalina\localhost</span></span><span class="apple-style-span"><span style="font-size: 10pt; color: black; font-family: 宋体;">目录下相应的</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">xml</span><span style="font-size: 10pt; color: black; font-family: 宋体;">文件删除。否则</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体;">仍会岸配置去加载。。。</span></span>
<img src ="http://www.blogjava.net/liyoubiggo/aggbug/227581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyoubiggo/" target="_blank">苏坦纳</a> 2008-09-07 20:22 <a href="http://www.blogjava.net/liyoubiggo/archive/2008/09/07/227581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>