Struts二开发环境筹建

来源:互联网 发布:去南极 知乎 编辑:程序博客网 时间:2024/05/17 00:03

 工欲善其事,必先利其器。在我们深入Struts二预先,我仍是想废一些唇舌且不说述一下子开发环境的筹建。每个人都市依据自个儿的习气来筹建自各儿的开发环境。开发环境是不是轻捷,也将直接影响开发的效率。之所以关于开发环境已经十分相熟的友人可以直接忽略这篇稿子。而我在这里给大伙儿引见一下子我的开发和调试环境的筹建,以后全部的章节的代码,也都将建立在这个开发环境以上。

在编纂J二EE程序的时分,我们往往急需一个Web器皿进展调试,比较常见的Web器皿是Tomcat,在Eclipse等IDE中,也有很多针对Tomcat的插件支持,使你可以很轻巧地在Tomcat上调试你的J二EE运用。而我所运用的Web器皿是愈加轻量级的Jetty。利用它进展J二EE的开发和调试,甚或只需要倚赖Jetty的jar包即可。


目 录 [ - ]
一.筹建最容易的开发环境
二.完美Library的管理方式
筹建最容易的开发环境
第一我们来见见何以筹建最简略的J二EE项目的开发环境。

1. 我们急需建立的一个空的J二EE项目的索引构造



在这里,我容易解释一下这些索引的功用:

src(source folder):寄放全部的Java源代码。
conf(source folder):寄放全部的配置文件。
test(source folder):寄存全部的Java测试代码和调试代码。
web:web项目的源目录,下头有WEB-INF索引以及在此偏下的classes和lib索引。classes索引将会变成全部的source folder的编译对象索引,而lib索引则寄放项目所依托的jar包。
lib:也寄存jar包,这些jar包也许单单在开发调试时依托,项目自身则不依赖这些jar资料。

2. 编撰IDE有关的资料

在这里,你还能看到classpath资料和project资料。这两个资料是导入到eclipse中所务须的资料,是我为eclipse工程而写的资料。如若你施用其余IDE,或许亟需自行编者毋宁他IDE相干的项目资料。

在建立了这些索引构造后,你就可以将其导入到eclipse中作为eclipse的工程了。



3. 加入有关调试所需要的jar包,并指定classpath

接下来,我们把Jetty所需要的jar包copy到lib索引下,并在IDE三拇指定classpath。



4. 增添Jetty起动种

在test停建一个runtime的索引,并平添Jetty起步种。


Java代码
一.package runtime;
2.
三.import org.mortbay.jetty.Connector;
四.import org.mortbay.jetty.Server;
五.import org.mortbay.jetty.nio.SelectChannelConnector;
六.import org.mortbay.jetty.webapp.WebAppContext;
7.
8./**
9. * Jetty Server starter. Use embedded mode.
10. *
11. * @author Downpour
12. */
13.public class JettyStarter {
14.
15. /**
16. * @param args
17. * @throws Exception
18. */
19. public static void main(String[] args) throws Exception {
20. long begin = System.currentTimeMillis();
21. Connector connector = new SelectChannelConnector();
22. connector.setPort(Integer.getInteger("jetty.port", 8080).intValue());
23.
24. WebAppContext webapp = new WebAppContext("web", "/struts-sample");
25. webapp.setDefaultsDescriptor("./test/runtime/webdefault.xml");
26.
27. Server server = new Server();
28. server.setConnectors(new Connector[] { connector });
29. server.setHandler(webapp);
30. server.start();
31. System.out.println("Jetty Server started, use " + (System.currentTimeMillis() - begin) + " ms");
32. }
33.}
package runtime;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;

/**
* Jetty Server starter. Use embedded mode.
*
* @author Downpour
*/
public class JettyStarter {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
long begin = System.currentTimeMillis();
Connector connector = new SelectChannelConnector();
connector.setPort(Integer.getInteger("jetty.port", 8080).intValue());

WebAppContext webapp = new WebAppContext("web", "/struts-sample");
webapp.setDefaultsDescriptor("./test/runtime/webdefault.xml");

Server server = new Server();
server.setConnectors(new Connector[] { connector });
server.setHandler(webapp);
server.start();
System.out.println("Jetty Server started, use " + (System.currentTimeMillis() - begin) + " ms");
}
}


如若此时此刻,你在WEB-INF下有web.xml,那么你就可以施行上头这个Jetty的起动种。



5. 起步、调试、测试

施行了Jetty的起动类后,可以看到起动界面的日记:


Java代码
1.15 [main] INFO org.mortbay.log - Logging to org.slf四j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf四jLog
2.15 [main] INFO org.mortbay.log - jetty-6.1.7
3.1109 [main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8080
四.Jetty Server started, use 1547 ms
15 [main] INFO org.mortbay.log - Logging to org.slf四j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf四jLog
15 [main] INFO org.mortbay.log - jetty-6.1.7
1109 [main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8080
Jetty Server started, use 1547 ms


这示意你已经顺利起动了Jetty作为你的Web服务器。当然,你可以应用Debug形式来实施Jetty种,这么就进去了调试方式,你可以在代码中设立断点开展调试。

在这里,再有1点亟需容易提一下子,默许情况下,Jetty会在windows上应用缓存,所以会把js,css等资料进展锁定,使你没法编者。为懂得决这个问题,急需设立一些默许参数。这边,我们可以运用google大法,已经有友人为我们解决了这个问题:

http://www.blogjava.net/alwayscy/archive/2007/05/27/120305.html

之所以,我在runtime的平级索引建立了一个webdefault.xml资料,而且指定Jetty施用该资料作为默许的参数设定。

【总结】
在上面我引见了我个人的开发调试环境,这种开发环境的好处可能有一下子这些:

1. 开发环境不依赖于任何IDE也许有关的插件,只需要运作Java资料即可进展调试。(当然,你或者亟需编纂IDE有关的project资料来获取IDE的工程支持)

2. 开发环境不依赖于任何外部的Web服务器,与环境无干,之所以无论是将项目迁徙到哪儿,都可以直接运作。

3. 不需要开发人员额外学习何以筹建开发环境,开发环境已经内置,减低了开发人员的学习利润。
完美Library的管理方式
在上面筹建环境的过程中,我们发现,Library的治理存在着一定问题。这个问题重要表现为:

1. 不容易作Library的版本治理。如若Library的版本急需晋级,那么我们唯其如此从新copy一份新的jar包,而且凭借IDE从新指定项目的classpath。这种劳动,关于一个项目还可以接受,如若你有10多个项目,那么jar包的复制工作会让你很头疼。

2. 每个项目都市有Library的复本。这一点让人十分恼火。事实上,关于一个公司也许一个项目组而谈,施用的技术体系基本不变。然则,每个项目的Library却是分离的。并非如此,每个项目都要从svn中下载大量的雷同的Library资料,给我们的硬盘促成极大的空间铺张。关于那些频繁施用Branch的项目来说,这些Library的下载简直便是恶梦。

之所以,我们亟需一个集中式的Library管理方式。而这一点曾经在Javaeye的海阔天空版剧烈得议论过应用maven来进展治理仍是自行治理。


Readonly 写道

共享类库可以用IDE reference project解决,公司内部项目给惯用的lib建立一个project,从CVS上check out,其余工程项目都倚赖这个project就可以了,ant build也直接引述这个项目的jar就可以,项目体积照旧惟独几百K。

——一个厌恶ant,愈加厌恶maven的人



我比较赞成Readonly头儿的讲法而倾向于自行治理。maven这么的高级货,偶实在是用不来啊。那么我们就来见见何以应用共享类库来开展Library治理。


1. 第一建立一个共享类库

建立一个共享类库,将项目中急需共享的Library开展恰当的分门别类。与此同时,为每个加入到Library中的jar包开展一致的格式化的定名模式。比如:spring/spring-2.5.5.jar之类。这么的好居于于,万一jar包的版本有更新,可以加入新的jar包而封存原来的。在项目中,就可以透过引述不同版本的jar包来对Library开展版本治理。

以次便是我个人建立的一个共享类库,大伙儿可以参照:

svn://www.demo二do.com/library

2. checkout共享类库,并将其导入到IDE中作为一个Library工程



3. 为你的项目指定classpath,引述的jar包存在于Library工程中



在这里,我们可以看到,原来项目中的lib索引被剔除,jar包也被剔除。在项目中所引述的jar包是Library项目中的jar包。

本文来源:
我的异常网
Java Exception