﻿<?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-adidas1981-文章分类-struts+eclipse</title><link>http://www.blogjava.net/adidas1981/category/2032.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 20:57:24 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 20:57:24 GMT</pubDate><ttl>60</ttl><item><title>使用Eclipse开发J2EE应用</title><link>http://www.blogjava.net/adidas1981/articles/7379.html</link><dc:creator>小浩</dc:creator><author>小浩</author><pubDate>Fri, 08 Jul 2005 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/adidas1981/articles/7379.html</guid><wfw:comment>http://www.blogjava.net/adidas1981/comments/7379.html</wfw:comment><comments>http://www.blogjava.net/adidas1981/articles/7379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adidas1981/comments/commentRss/7379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adidas1981/services/trackbacks/7379.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width="100%">
<P><FONT size=2>Eclipse是一个非常优秀的集成开发环境，这个在IBM支持下的开放源码项目经过一段时期的发展完善，已经为广大Java开发者所熟悉。Eclipse的出现，为Java开发者提供了免费使用强大的Java IDE的机会，通过集成大量的plugin，Eclipse的功能可以不断扩展，以支持各种不同的应用。</FONT></P>
<P><FONT size=2>Lomboz是一个免费的Eclipse plugin，它将很多Java应用服务器、J2EE组件和Web应用开发集成到Eclipse中，可以帮助Java开发者使用Eclipse建立、测试、部署J2EE应用。</FONT></P>
<P><FONT size=2>JBoss是一个开放源码、功能强大的Java应用服务器，也是目前最受Java开发者欢迎的Java应用服务器，被Java World的编辑们评为2002年的最佳应用服务器。2003年到目前为止的下载量已经超过了一百五十万次。</FONT></P>
<P><A name=1><SPAN class=atitle2><FONT size=2>一、下载、安装和配置</FONT></SPAN></A></P>
<P><SPAN class=atitle3><FONT size=2>1． Eclipse的下载和安装</FONT></SPAN></P>
<P><FONT size=2>首先需要安装JDK，可以到Sun的网站上去下载最新版本并安装。</FONT></P>
<P><FONT size=2>然后到</FONT><A href="http://www.eclipse.org/"><FONT size=2>www.eclipse.org</FONT></A><FONT size=2>去下载Eclipse的最新版本，目前的最新版本是2.1。下载以后解压到自己想要的目录中，比如D:\Eclipse，直接运行eclipse.exe，第一次运行的时候会自动寻找JDK并完成相应的配置，然后就进入了Eclipse的主界面。关于Eclipse的基本使用方法，developerWorks，Eclipse的网站以及Eclipse的随机文档上都有详细地介绍，这里不详细描述了。</FONT></P>
<P><SPAN class=atitle3><FONT size=2>2． Jboss的下载、安装</FONT></SPAN></P>
<P><FONT size=2>JBoss目前的最新版本是3.2.1，不过我觉得这个版本有一些问题，启动服务器的时候会有一些jar包找不到，导致WARN和ERROR的发生。所以我推荐下载3.0.7，也可以下载集成了Tomcat 4.1.24的JBoss 3.0.7版本。</FONT></P>
<P><FONT size=2>下载后解压，我们假设JBOSS_HOME为JBoss的主目录，执行JBOSS_HOME/bin/run.bat，就启动了JBoss服务器。一般会在1分钟左右启动完毕。</FONT></P>
<P><SPAN class=atitle3><FONT size=2>3． Lomboz的下载、安装和配置</FONT></SPAN></P>
<P><FONT size=2>Lomboz目前的最新版本是2.1，我们假设Eclipse的主目录为ECLIPSE_HOME，下载以后将其解压到ECLIPSE_HOME/plugins文件夹下面，这样在这个文件夹下面就多了一个com.objectlearn.jdt.j2ee文件夹。</FONT></P>
<P><FONT size=2>然后启动Eclipse, 会自动出现Customize Perspective的对话框，如果没有出现的话，也可以通过菜单"Window-&gt;Customize Perspective"来显示这个对话框，如下图所示：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=352 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image002.jpg" width=524 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>展开File-&gt;New，选择所有与Lomboz相关的选项；</FONT></P>
<P><FONT size=2>展开Window-&gt;Show View，选择Lomboz J2EE View;</FONT></P>
<P><FONT size=2>展开Other，选择Lomboz Actions。</FONT></P>
<P><FONT size=2>确认OK。</FONT></P>
<P><FONT size=2>下面要进行Lomboz的配置：</FONT></P>
<P><FONT size=2>首先，打开属性对话框，确保Java-&gt;New Project中的设置：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=378 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image004.jpg" width=502 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>接着在Lomboz属性中，确保如下设置：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=287 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image006.jpg" width=534 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>最后，设置服务器属性。</FONT></P>
<P><FONT size=2>Lomboz预先定义了一些常用的Java服务器的设置，这些配置文件放在ECLIPSE_HOME/plugins/com.objectlearn.jdt.j2ee/servers 文件夹下面，你可以用文本编辑器手工修改（除非你所用的服务器不在Lomboz默认的服务器中，否则我不推荐你这么做），也可以在Eclipse的属性对话框中设置，设置的过程非常简单，如下图所示：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=407 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image007.jpg" width=533 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>记得每次修改以后，都要点击Apply。</FONT></P>
<P><FONT size=2>上图是Properties标签下的设置，Classpath标签下一般不需要做任何改动（注意：如果你没有听我文章开始部分的劝告，使用了JBoss3.2.0以上的版本，可能需要手工加入多了个jar包，这是体力活，有些麻烦。我不知道这是不是JBoss的问题，具体操作我在下面会提一下）。</FONT></P>
<P><FONT size=2>通过以上三个步骤，就完成了Lomboz对J2EE开发的支持和JBoss的配置。你可以进入文章的第二部分"使用Eclipse开发Web应用"了。</FONT></P>
<P><FONT size=2>注意事项：</FONT></P>
<P><FONT size=2>a．如果服务器不在默认服务器之列；</FONT></P>
<P><FONT size=2>在ECLIPSE_HOME/plugins/com.objectlearn.jdt.j2ee/servers 文件夹下新建一个后缀名为server的文件，然后根据已有的server文件为模版，用文本编辑器编辑server文件。建立了一个新的server文件以后，也可以在Lomboz的属性页中进行相应的设置。</FONT></P>
<P><FONT size=2>b． 如果使用了JBoss3.2.0版本。</FONT></P>
<P><FONT size=2>打开Window&gt;Preferences&gt;Lomboz&gt;ServerDefinitions，选择你的服务器，然后选择classpath标签，将如下的jar包加入到server library中：</FONT></P><PRE><FONT size=2>JBOSS_HOME\lib\concurrent.jar 
JBOSS_HOME \lib\boss-system.jar
JBOSS_HOME \server\default\lib\jboss.jar 
JBOSS_HOME \server\default\lib\jpl-pattern.jar 
JBOSS_HOME \server\default\lib\jpl-util.jar 
JBOSS_HOME \server\default\lib\jnpserver.jar 
JBOSS_HOME \server\default\lib\jboss-transaction.jar
</FONT></PRE>
<P><FONT size=2>我的JBoss320.server文件中的全部内容在本文的最后部分呈现。</FONT></P>
<P><A name=2><SPAN class=atitle2><FONT size=2>二、使用Eclipse开发Web应用</FONT></SPAN></A></P>
<P><FONT size=2>首先，打开File-&gt;New-&gt;Lomboz J2EE Project，创建一个名为TestJ2EE的J2EE Project。</FONT></P>
<P><FONT size=2>点击Next，默认各种设置，点击Next，进入下一个对话框，在Targeted Server中加入已经配置好的服务器，如下图：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=499 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image008.jpg" width=515 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>在Web Modules和EJB Modules中分别新建Web模块和EJB模块，在本例中，我们分别命名为MyWeb和MyEJB，然后点击Finish。这样，一个J2EE项目的框架就自动生成了。</FONT></P>
<P><FONT size=2>在MyWeb模块下面，自动生成了两个jsp文件：index.jsp和error.jsp，以及WEB-INF文件下面的配置文件。我们可以在此基础上面添加自己的jsp文件和servlet，然后build project。</FONT></P>
<P><FONT size=2>在Eclipse的工具栏上点击Lomboz J2EE project outliner的按钮：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=94 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image009.jpg" width=377 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>这样，在Eclipse上就出现了Lomboz J2EE View，如下图所示：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=234 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image011.jpg" width=554 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>由于我事先已经部署了另一个Web服务器：Tomcat，所以在MyWeb这个模块上面出现了它所绑定的这两个服务器，JBoss 3.0 All 旁边的红色标记表示它是默认的服务器。可以通过右击Web模块选择更改默认的服务器，如下图：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=278 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image012.jpg" width=471 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>选择好服务器以后，在Lomboz J2EE View中右键单击服务器，选择运行服务器，等服务器启动好以后，右键单击Web模块，选择Deploy Module，这样就完成了Web模块在服务器上的部署。打开IE浏览器，键入</FONT><A href="http://127.0.0.1:8080/MyWeb"><FONT size=2>http://127.0.0.1:8080/MyWeb</FONT></A><FONT size=2>，就可以看到自己开发的Web应用了。</FONT></P>
<P><FONT size=2>这里有一点需要说明，如果采用Tomcat作为Web服务器的话，如果Web模块需要重新部署，则须重新启动Tomcat服务器，JBoss则不需要这么做。</FONT></P>
<P><FONT size=2>注意事项：</FONT></P>
<P><FONT size=2>如果从Eclipse中启动JBoss服务器的时候，遇到了这个问题：</FONT></P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
<FONT size=2>Error occurred during initialization of VM 
java/lang/NoClassDefFoundError: java/lang/Object
</FONT></CODE></PRE></TD></TR></TBODY></TABLE>
<P><FONT size=2>一般遇到这个问题，可能是由于JRE没有设置好，请在Eclipse中的Preference对话框中，展开Java-&gt;Installed JREs，查看JRE是否设置好了；然后打开所开发的项目属性对话框，查看Java Build Path的library中是否有JRE System Library，没有的话，点击Add Library，添加JRE System Library。</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=403 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image014.jpg" width=553 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><A name=3><SPAN class=atitle2><FONT size=2>三、使用Eclipse开发EJB</FONT></SPAN></A></P>
<P><FONT size=2>在第二部分"使用Eclipse开发Web应用"中，我们已经在TestJ2EE这个J2EE项目中添加了一个名为MyEJB的EJB模块。下面我们通过Lomboz EJB Creation Wizard向MyEJB模块中添加一个Session Bean。</FONT></P>
<P><FONT size=2>点击File-&gt;New-&gt;Lomboz EJB Creation Wizard，或者右击MyEJB模块，选择New-&gt;Lomboz EJB Creation Wizard，显示出如下对话框：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=524 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image015.jpg" width=437 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>在com.dino.testj2ee.myejb这个包下面创建一个名为MyEJB的Stateless Session Bean。完成以后，在TestJ2EE项目的src文件夹下面，出现了一个名为MyEJBBean.java的文件，右击这个文件，选择New-&gt;Lomboz EJB Method Wizard，可以给这个EJB添加各种方法。我添加了一个helloWorld方法，返回一个String类型。如下图所示：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=305 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image017.jpg" width=554 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>然后，需要把MyEJB这个Session Bean添加到MyEJB这个模块上面：右击MyEJB.java，选择Lomboz J2EE…-&gt;Add EJB to Module，选择MyEJB，OK。</FONT></P>
<P><FONT size=2>右击MyEJB模块，选择LombozJ2EE…-&gt;Generate EJB Classes，这样就在ejbsrc目录下面自动生成了下面几个文件：</FONT></P><PRE><FONT size=2>MyEJBHome.java
MyEJBRome.java
MyEJBLocalHome.java
MyEJBLocal.java
MyEJBSession.java (MyEJBSession extends MyEJBBean)
MyEJBUtil.java
</FONT></PRE>
<P><FONT size=2>Build project以后，自动将模块打包完毕。接着就可以按照部署Web模块的步骤来部署EJB模块了。</FONT></P>
<P><FONT size=2>最后，我们建立一个应用程序来测试EJB。</FONT></P>
<P><FONT size=2>通过File-&gt;New-&gt;Lomboz EJB Test Client Wizard打开一个对话框，按下图填写：</FONT></P>
<P><FONT size=2></FONT>
<CENTER><FONT size=2><IMG height=403 alt="" src="http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/image018.jpg" width=436 border=0> <BR></FONT></CENTER>
<P><FONT size=2></FONT></P>
<P><FONT size=2>完成以后，在src目录下面生成了TestMyEJB.java，在其中的testBean方法中加入测试代码：</FONT></P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
<FONT size=2>System.out.println(myBean.helloWorld());
</FONT></CODE></PRE></TD></TR></TBODY></TABLE>
<P><FONT size=2>如果目前JBoss服务器已经启动，而且MyEJB模块已经部署的话，执行TestMyEJB，就会在Console窗口上显示出：</FONT></P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
<FONT size=2>hehe, I can deploy EJB by Eclipse!
</FONT></CODE></PRE></TD></TR></TBODY></TABLE>
<P><A name=4><SPAN class=atitle2><FONT size=2>四、总结</FONT></SPAN></A></P>
<P><FONT size=2>通过以上的介绍，我们了解到，Lomboz使Eclipse开发J2EE应用变得非常简便，而且Eclipse, Lomboz, JBoss这些工具都是免费和开放源码的项目，所以这样的组合对Java开发者来说更有吸引力。</FONT></P>
<P><FONT size=2>对于开发复杂的J2EE应用来说，上面的介绍可能还不够全面，希望大家在做项目的过程中体会，再将总结出来的经验放到developerWorks上来分享。</FONT></P>
<P><A name=resources><SPAN class=atitle2><FONT size=2>参考资料：</FONT></SPAN></A></P>
<UL class=n01>
<LI><FONT size=2>www.eclipse.org Eclipse的官方网站； </FONT>
<LI><FONT size=2>www.jboss.org JBoss的官方网站； </FONT>
<LI><FONT size=2>www.objectlearn.com Lomboz的网站，上面有关于Lomboz的教程。 </FONT>
<LI><FONT size=2>Eclipse in Action: A Guide for Web Developers, by David Gallardo, Ed Burnette and Robert McGovern, Manning Publications. 一本介绍使用Eclipse开发的好书。 </FONT>
<LI><FONT size=2>JBoss 3.0: Quick Start Guide, by JBoss Group. 一本关于JBoss入门的好书。 </FONT></LI></UL>
<P><A name=author1><SPAN class=atitle2><FONT size=2>关于作者</FONT></SPAN></A></P>
<P><FONT size=2>姜巍巍，是联想集团软件设计中心的开发工程师，热衷于J2EE和Web服务技术。闲暇时，喜欢阅读计算机书籍，并频繁光顾各个Java论坛；周末的晚上，一般会乖乖的在电视机前面观看意甲直播。地址：北京市上地信息产业基地开拓路7号先锋大厦 邮编：100085 。您可以通过E-mail: </FONT><A href="mailto:jiangww@lenovo.com"><FONT size=2>jiangww@lenovo.com</FONT></A><FONT size=2> 与他取得联系。</FONT></P>
<P><A name=code><SPAN class=atitle2><FONT size=2>附录：JBoss320.server</FONT></SPAN></A></P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
<FONT size=2>&lt;serverDefinition name="JBOSS 3.2" 
	ejbModules="true" webModules="true" earModules="true"&gt; 
&lt;property id="serverRootDirectory" label="Application Server Directory:" 
	type="directory" default="D:/jboss-3.2.0" /&gt; 
&lt;property id="serverAddress" label="Address:" 
	type="string" default="127.0.0.1" /&gt; 
&lt;property id="serverPort" label="Port:" 
	type="string" default="8080" /&gt; 
&lt;property id="classPathVariableName" label="Classpath Variable Name:" 
	type="string" default="JBOSS32" /&gt; 
&lt;property id="classPath" label="Classpath Variable:" 
	type="directory" default="D:/jboss-3.2.0" /&gt; 
	
&lt;serverHome&gt;${serverRootDirectory}&lt;/serverHome&gt; 
&lt;webModulesDeployDirectory&gt;${serverRootDirectory}/server/all/deploy&lt;/webModulesDeployDirectory&gt; 
&lt;ejbModulesDeployDirectory&gt;${serverRootDirectory}/server/all/deploy&lt;/ejbModulesDeployDirectory&gt; 
&lt;earModulesDeployDirectory&gt;${serverRootDirectory}/server/all/deploy&lt;/earModulesDeployDirectory&gt; 
&lt;jndiInitialContextFactory&gt;org.jnp.interfaces.NamingContextFactory&lt;/jndiInitialContextFactory&gt; 
&lt;jndiProviderUrl&gt;jnp://${serverAddress}:1099&lt;/jndiProviderUrl&gt; 
&lt;startClass&gt;org.jboss.Main&lt;/startClass&gt; 
&lt;startWorkingDirectory&gt;${serverRootDirectory}/bin&lt;/startWorkingDirectory&gt; 
&lt;startVmParameters&gt;&lt;/startVmParameters&gt; 
&lt;startProgramArguments&gt;-c all&lt;/startProgramArguments&gt; 
&lt;stopClass&gt;org.jboss.Shutdown&lt;/stopClass&gt; 
&lt;stopWorkingDirectory&gt;${serverRootDirectory}/bin&lt;/stopWorkingDirectory&gt; 
&lt;stopVmParameters&gt;&lt;/stopVmParameters&gt; 
&lt;stopProgramArguments&gt;${serverAddress} ${serverPort}&lt;/stopProgramArguments&gt; 
&lt;serverClassPath&gt; 
&lt;jar type="variable"&gt;JDK_TOOLS&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/bin/run.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/bin/shutdown.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jboss-j2ee.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/javax.servlet.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/commons-httpclient.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/concurrent.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/getopt.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/jboss-boot.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/jboss-common.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/jboss-jmx.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/jboss-system.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/jdom.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/log4j-boot.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/webdavlib.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/xercesImpl.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/xml-apis.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jnet.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/lib/gnu-regexp.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jboss.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jnpserver.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jpl-util.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jpl-pattern.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jsse.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jbossha.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jboss-jaas.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jts.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jboss-transaction.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/javagroups-2.0.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jmxri.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jmxtools.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/server/all/lib/jbossmx.jar&lt;/jar&gt; 
&lt;/serverClassPath&gt; 
&lt;clientClassPath&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jboss-j2ee.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jnp-client.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jboss-client.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jboss-common-client.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jbosssx-client.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/log4j.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jnet.jar&lt;/jar&gt; 
&lt;jar type="variable"&gt;${classPathVariableName}/client/jaas.jar&lt;/jar&gt; 
&lt;/clientClassPath&gt; 
&lt;/serverDefinition&gt;
</FONT></CODE></PRE></TD></TR></TBODY></TABLE></TD>
<TD width=10><FONT size=2><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=10 border=0></FONT></TD></TR></TBODY></TABLE><!-- END PAPER BODY--><img src ="http://www.blogjava.net/adidas1981/aggbug/7379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adidas1981/" target="_blank">小浩</a> 2005-07-08 17:26 <a href="http://www.blogjava.net/adidas1981/articles/7379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts ----Bean</title><link>http://www.blogjava.net/adidas1981/articles/7210.html</link><dc:creator>小浩</dc:creator><author>小浩</author><pubDate>Wed, 06 Jul 2005 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/adidas1981/articles/7210.html</guid><wfw:comment>http://www.blogjava.net/adidas1981/comments/7210.html</wfw:comment><comments>http://www.blogjava.net/adidas1981/articles/7210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adidas1981/comments/commentRss/7210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adidas1981/services/trackbacks/7210.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; PagePage标签的作用是从页面的上下文中获取属性，将其包装为Bean，并通过一个脚本变量来访问该Bean。当该标签中出现问题时（比如指定的Page上下文属性没有找到），将会抛出一个请求期的异常该标签不可含有标签体内容。该标签有两属性。属性描述id设定存储属性的bean的名字(必须) propert...&nbsp;&nbsp;<a href='http://www.blogjava.net/adidas1981/articles/7210.html'>阅读全文</a><img src ="http://www.blogjava.net/adidas1981/aggbug/7210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adidas1981/" target="_blank">小浩</a> 2005-07-06 16:48 <a href="http://www.blogjava.net/adidas1981/articles/7210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[整理文章] Struts中不同的Action和ActionForm组合 </title><link>http://www.blogjava.net/adidas1981/articles/7204.html</link><dc:creator>小浩</dc:creator><author>小浩</author><pubDate>Wed, 06 Jul 2005 08:07:00 GMT</pubDate><guid>http://www.blogjava.net/adidas1981/articles/7204.html</guid><wfw:comment>http://www.blogjava.net/adidas1981/comments/7204.html</wfw:comment><comments>http://www.blogjava.net/adidas1981/articles/7204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adidas1981/comments/commentRss/7204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adidas1981/services/trackbacks/7204.html</trackback:ping><description><![CDATA[<FONT color=#0000ff size=2>原文标题：Struts action mappings: Divide Et Impera，作者：Michael Juravlev。在TSS上的URL：</FONT><A href="http://www.theserverside.com/articles/article.tss?l=StrutsActionMapping"><FONT color=#0000ff size=2>http://www.theserverside.com/articles/article.tss?l=StrutsActionMapping</FONT></A>
<P><FONT color=#0000ff size=2>说明：阅读本文需要一定的Struts基础。<BR>注：文中小写的action不一定代表具体的Struts Action类，有时也指作为一个整体的action mapping。</FONT></P>
<P><BR><STRONG><FONT color=#0000ff size=2>[1] 完整的action</FONT></STRONG></P>
<P><FONT color=#0000ff size=2>&lt;action path="/aFullAction"<BR>&nbsp;&nbsp;&nbsp; type="somePackage.someActionClass"&gt;<BR>&nbsp;&nbsp;&nbsp; name="someForm"<BR>&nbsp;&nbsp;&nbsp; input="someJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="successful" path="someJSP.jsp"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="failed" path="someOtherJSP.jsp"/&gt;<BR>&lt;/action&gt;</FONT></P>
<P><FONT color=#0000ff size=2>首先，Struts的ActionServlet接收到一个请求，然后根据struts-config.xml的配置定位到相应的mapping（映射）；接下来如果form的范围是request或者在定义的范围中找不到这个form，创建一个新的form实例；取得form实例以后，调用其reset()方法，然后将表单中的参数放入form，如果validate属性不为false，调用validate()方法；如果validate()返回非空的ActionErrors，将会被转到input属性指定的URI，如果返回空的ActionErrors，那么执行Action的execute()方法，根据返回的ActionForward确定目标URI。</FONT></P>
<P><FONT color=#0000ff size=2>这样做的效果是：execute()仅当validate()成功以后才执行；input属性指定的是一个URI。</FONT></P>
<P><BR><STRONG><FONT color=#0000ff size=2>[2] 仅有Form的action</FONT></STRONG></P>
<P><FONT color=#0000ff size=2>&lt;action path="/aFormOnlyAction"<BR>&nbsp;&nbsp;&nbsp; type="org.apache.struts.actions.ForwardAction"<BR>&nbsp;&nbsp;&nbsp; name="someForm"<BR>&nbsp;&nbsp;&nbsp; input="someJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; parameter="someOtherJSP.jsp"<BR>/&gt;</FONT></P>
<P><FONT color=#0000ff size=2>首先，Struts会在定义的scope搜寻someForm，如果找到则重用，如果找不到则新建一个实例；取得form实例以后，调用其reset()方法，然后将表单中的参数放入form，如果validate属性不为false，调用validate()方法；如果validate()返回非空的ActionErrors，将会被转到input属性指定的URI，如果返回空的ActionErrors，那么转到parameter属性指定的目标URI。</FONT></P>
<P><FONT color=#0000ff size=2>这样做的效果是：没有action类可以存放我们的业务逻辑，所以所有需要写入的逻辑都只能写到form的reset()或者validate()方法中。validate()的作用是验证和访问业务层。因为这里的action映射不包括forward（也没有意义），所以不能重定向，只能用默认的那个forward。这种仅有form的action可以用来处理数据获取并forward到另一个JSP来显示。</FONT></P>
<P><BR><STRONG><FONT color=#0000ff size=2>[3] 仅有Action的action</FONT></STRONG></P>
<P><FONT color=#0000ff size=2>&lt;action path="/anActionOnlyAction"<BR>&nbsp;&nbsp;&nbsp; type="somePackage.someActionClass"&gt;<BR>&nbsp;&nbsp;&nbsp; input="someJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="successful" path="someJSP.jsp"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="failed" path="someOtherJSP.jsp"/&gt;<BR>&lt;/action&gt;</FONT></P>
<P><FONT color=#0000ff size=2>首先，ActionServlet接收到请求后，取得action类实例，调用execute()方法；然后根据返回的ActionForward在配置中找forward，forward到指定的URI或action。</FONT></P>
<P><FONT color=#0000ff size=2>这样做的效果是：没有form实例被传入execute()方法，于是execute()必须自己从请求中获取参数。Action可以被forward或者重定向。这种action不能处理通过HTML FORM提交的请求，只能处理链接式的请求。</FONT></P>
<P><BR><STRONG><FONT color=#0000ff size=2>[4] 仅有JSP的action</FONT></STRONG></P>
<P><FONT color=#0000ff size=2>&lt;action path="/aJSPOnlyAction"<BR>&nbsp;&nbsp;&nbsp; type="org.apache.struts.actions.ForwardAction"<BR>&nbsp;&nbsp;&nbsp; parameter="someOtherJSP.jsp"<BR>/&gt;</FONT></P>
<P><FONT color=#0000ff size=2>首先，ActionServlet接到请求后调用ForwardAction的execute()方法，execute()根据配置的parameter属性值来forward到那个URI。</FONT></P>
<P><FONT color=#0000ff size=2>这样做的效果是：没有任何form被实例化，比较现实的情形可能是form在request更高级别的范围中定义；或者这个action被用作在应用程序编译好后充当系统参数，只需要更改这个配置文件而不需要重新编译系统。</FONT></P>
<P><BR><STRONG><FONT color=#0000ff size=2>[5] 两个action对应一个form</FONT></STRONG></P>
<P><FONT color=#0000ff size=2>&lt;action path="/anAction"<BR>&nbsp;&nbsp;&nbsp; type="somePackage.someActionClass"&gt;<BR>&nbsp;&nbsp;&nbsp; name="someForm"<BR>&nbsp;&nbsp;&nbsp; input="someJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="successful" path="/anotherAction.do"/&gt;<BR>&lt;/action&gt;<BR>&lt;action path="/anotherAction"<BR>&nbsp;&nbsp;&nbsp; type="somePackage.someOtherActionClass"&gt;<BR>&nbsp;&nbsp;&nbsp; name="someForm"<BR>&nbsp;&nbsp;&nbsp; input="someOtherJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="successful" path="someResultJSP.jsp"/&gt;<BR>&lt;/action&gt;</FONT></P>
<P><FONT color=#0000ff size=2>就每个单独的action来讲，处理上并没有和完整的action有什么实质的区别。这个组合模式可以被用来传递命令对象（form）。需要注意的是在后一个action中同样会调用form的reset()和validate()方法，因此我们必须确保form中的信息不被重写。</FONT></P>
<P><FONT color=#0000ff size=2>处理的方式大致分为两种：a) 在request中放入一个指示器表明前一个action有意向后一个action传递form，从而在后一个action可以保留那个form中的值，这一方式只能在使用forward时使用。b) 当使用redirect而不是forward时，可以把指示器放在session或更高的级别，在命令链的最后一环将这个指示器清除。</FONT></P>
<P><BR><STRONG><FONT color=#0000ff size=2>[6] 两个action对应两个form</FONT></STRONG></P>
<P><FONT color=#0000ff size=2>&lt;action path="/anAction"<BR>&nbsp;&nbsp;&nbsp; type="somePackage.someActionClass"&gt;<BR>&nbsp;&nbsp;&nbsp; name="someForm"<BR>&nbsp;&nbsp;&nbsp; input="someJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="successful" path="/anotherAction.do" redirect="true"/&gt;<BR>&lt;/action&gt;<BR>&lt;action path="/anotherAction"<BR>&nbsp;&nbsp;&nbsp; type="somePackage.someOtherActionClass"&gt;"<BR>&nbsp;&nbsp;&nbsp; name="someOtherForm"<BR>&nbsp;&nbsp;&nbsp; input="someOtherJSP.jsp"<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="successful" path="someResultJSP.jsp"/&gt;<BR>&lt;/action&gt;</FONT></P>
<P><FONT color=#0000ff size=2>这个组合方式跟前一种在流程上没有太大区别，只是我们现在对于两个action分别提供了form，于是代码看上去更加清晰。于是我们可以分别处理WEB应用程序的输入和输出。值得注意的是，后一个action同样会尝试往form中写入那些参数，不过我们可以这样处理：a) 在后一个form中使用另一套属性名；b) 只提供getter而不提供setter。</FONT></P>
<P><FONT color=#0000ff size=2>大致的处理是这样：<BR>前一个action接收输入、验证、然后将数据写入业务层或持久层，重定向到后一个action，后一个action手动的从业务层/持久层取出数据，写入form（通过其他方式），交给前台JSP显示。</FONT></P>
<P><FONT color=#0000ff size=2>这样做的好处是不必保留输入form中的值，因此可以使用redirect而不是forward。这样就降低了两个action之间的耦合度，同时也避免了不必要的重复提交。<BR></FONT></P><img src ="http://www.blogjava.net/adidas1981/aggbug/7204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adidas1981/" target="_blank">小浩</a> 2005-07-06 16:07 <a href="http://www.blogjava.net/adidas1981/articles/7204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在表单中使用索引属性</title><link>http://www.blogjava.net/adidas1981/articles/7173.html</link><dc:creator>小浩</dc:creator><author>小浩</author><pubDate>Wed, 06 Jul 2005 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/adidas1981/articles/7173.html</guid><wfw:comment>http://www.blogjava.net/adidas1981/comments/7173.html</wfw:comment><comments>http://www.blogjava.net/adidas1981/articles/7173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adidas1981/comments/commentRss/7173.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adidas1981/services/trackbacks/7173.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 问题你想要在表单中创建对应于一个Bean中的索引属性的一套输入字段。动作要领在Struts html标签库的标签中使用indexed属性来产生属性值：&nbsp;&lt;html:form&nbsp;action="TestOneAction"&gt;&lt;p&gt;&nbsp;&nbsp;&lt;logic:iterate&nbsp;name="MyForm"&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/adidas1981/articles/7173.html'>阅读全文</a><img src ="http://www.blogjava.net/adidas1981/aggbug/7173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adidas1981/" target="_blank">小浩</a> 2005-07-06 10:19 <a href="http://www.blogjava.net/adidas1981/articles/7173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>