`
litianyi520
  • 浏览: 42998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2开发环境搭建

阅读更多
工欲善其事,必先利其器。在我们深入Struts2之前,我还是想废一些口舌来讲述一下开发环境的搭建。每个人都会根据自己的习惯来搭建自己的开发环境。开发环境是否便捷,也将直接影响开发的效率。所以对于开发环境已经非常熟悉的朋友可以直接忽略这篇文章。而我在这里给大家介绍一下我的开发和调试环境的搭建,之后所有的章节的代码,也都将建立在这个开发环境之上。

在编写J2EE程序的时候,我们往往需要一个Web容器进行调试,比较常见的Web容器是Tomcat,在Eclipse等IDE中,也有很多针对Tomcat的插件支持,使你可以很轻松地在Tomcat上调试你的J2EE应用。而我所使用的Web容器是更加轻量级的Jetty。利用它进行J2EE的开发和调试,甚至只需要依赖Jetty的jar包即可。

搭建最简单的开发环境 Top

首先我们来看看如何搭建最简单的J2EE项目的开发环境。

1. 我们需要建立的一个空的J2EE项目的目录结构



在这里,我简单解释一下这些目录的作用:

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代码 复制代码
  1. package runtime;   
  2.   
  3. import org.mortbay.jetty.Connector;   
  4. import org.mortbay.jetty.Server;   
  5. import org.mortbay.jetty.nio.SelectChannelConnector;   
  6. 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.slf4j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf4jLog   
  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  
  4. Jetty Server started, use 1547 ms  
15 [main] INFO org.mortbay.log - Logging to org.slf4j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf4jLog
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类,这样就进入了调试模式,你可以在代码中设置断点进行调试。

在这里,还有一点需要简单提一下,默认情况下,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的管理方式 Top

在上面搭建环境的过程中,我们发现,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.demo2do.com/library

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



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



在这里,我们可以看到,原来项目中的lib目录被删除,jar包也被删除。在项目中所引用的jar包是Library项目中的jar包。
分享到:
评论
3 楼 rancococ 2009-06-09  
我找你的方式进行了lib管理,但是web启动时还是找不到struts2的类,错误信息如下:

严重: Exception starting filter struts2
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:249)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
	at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-6-9 20:00:31 org.apache.catalina.core.StandardContext start
严重: Error filterStart


还需要设置什么吗?知道的回答一下,谢谢!
2 楼 litianyi520 2009-02-16  
elvishehai 写道

svn://www.demo2do.com/library&nbsp; 都连不上了啊,可以给我一个份吗?

这个是我在主页上转载的~ 全站搜搜~
1 楼 elvishehai 2009-02-16  
svn://www.demo2do.com/library  都连不上了啊,可以给我一个份吗?

相关推荐

    Struts2开发环境搭建 附简单登录功能实例

    ### 知识点二:Struts2开发环境搭建 #### 1. 下载Struts2组件 首先,访问Struts官网下载Struts2组件。由于官网会不断更新,因此具体版本号可能会有变化,但以本文档提供的信息为准,使用的是*.*.**.*版本。下载...

    传智播客struts2.1视频教程_介绍struts2及struts2开发环境的搭建

    同时,掌握Struts2的开发环境搭建,有助于你在实际项目中快速上手。传智播客的教程以通俗易懂的方式讲解,适合初学者入门学习。记得结合实际操作,理论与实践相结合,这样才能更好地掌握Struts2框架的精髓。

    struts2开发环境的搭建

    ### Struts2开发环境的搭建 #### 一、概述 在Java Web开发领域,Struts2框架因其灵活性和强大的功能而备受青睐。本文将详细介绍如何搭建Struts2开发环境,并提供三种不同的方法来帮助读者快速上手。无论是初学者...

    struts2.0开发环境的搭建及HelloWorld的演示

    通过这个简单的"HelloWorld"例子,我们了解了Struts2开发环境的搭建过程,包括创建项目、导入库、配置`web.xml`、编写Action和结果页面等基本步骤。这只是一个起点,Struts2提供了许多高级特性,如拦截器、结果类型...

    struts2环境搭建

    在本教程中,我们将详细介绍如何搭建Struts2开发环境。 首先,确保你已经安装了以下基础软件: 1. Java Development Kit (JDK):Struts2运行在Java平台上,所以你需要先安装JDK并配置好`JAVA_HOME`环境变量。 2. ...

    Struts2+Hibernate开发环境搭建

    **开发环境搭建步骤:** 1. **安装JDK**:确保Java开发环境已安装,设置好环境变量。 2. **搭建IDE**:选择一款适合Java开发的IDE,如IntelliJ IDEA或Eclipse。 3. **引入库**:在项目中添加Struts2和Hibernate的...

    搭建Struts2开发环境

    搭建 Struts2 开发环境 Struts2 是一个基于 Java 语言的 Web 应用程序框架,提供了一个灵活的、可扩展的、基于 MVC 模式的开发环境。为了搭建 Struts2 开发环境,需要完成以下四个步骤: 1. 建立工程 首先,需要...

    Struts2简单开发环境的搭建(初级)

    本教程将详细介绍如何搭建一个基础的Struts2开发环境,这对于初学者来说是非常重要的第一步。 首先,我们需要准备必要的jar文件。在Java web开发中,jar文件是包含类库和资源的归档文件,它们提供了运行应用程序所...

    介绍struts2及struts2开发环境的搭建001

    01介绍struts2及struts2开发环境的搭建.zip.001 由于上传限制分2部分上传

    Struts2框架基础 一

    #### 三、Struts2开发环境搭建 1. **导入Struts2所需的JAR包**: - Struts2的核心库以及其他依赖库需要被包含在项目的classpath中。这些库通常包括但不限于struts2-core.jar、xwork-core.jar等。 2. **解压并配置...

    搭建基础Struts2开发环境的必需jar包,如需完整的文件请移步官网下载

    在搭建Struts2开发环境时,必需的jar包是关键组成部分。这些jar文件包含了框架运行所需的各种类库,包括核心功能、依赖的第三方库以及配置工具等。以下是一些主要的jar包及其作用: 1. **struts2-core.jar**:这是...

    Struts2及其环境搭建

    虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度...

    介绍struts2及struts2开发环境的搭建

    通过以上步骤,你就成功地搭建了一个基本的Struts2开发环境,可以开始开发基于Struts2的Web应用了。在实际开发中,还需要不断地学习和掌握更多的Struts2特性,如拦截器的自定义、结果类型的扩展、插件的使用等,以便...

    01介绍struts2及struts2开发环境的搭建.zip.002

    01介绍struts2及struts2开发环境的搭建.zip.002

    自学传智博客struts2-黎活明-源码-第01讲_01介绍struts2及struts2开发环境的搭建_DemoStruts2.rar

    自学传智博客struts2-黎活明-源码-第01讲_01介绍struts2及struts2开发环境的搭建_DemoStruts2.rar; 笔记地址:http://www.guloulou.com/?p=1253

    Struts2框架搭建

    搭建Struts2环境的第一步是添加必要的库到项目中。这通常涉及在项目的`pom.xml`文件中添加Struts2的相关依赖,如`struts2-core`、`struts2-convention-plugin`等。如果你使用的是Eclipse或IntelliJ IDEA等IDE,可以...

    struts开发环境搭建过程

    在本教程中,我们将详细讲解如何搭建一个Struts开发环境,以便初学者能够快速入门。 首先,我们需要安装Java开发环境。Java是Struts的基础,因此确保你的系统上已经安装了JDK(Java Development Kit)。你可以访问...

    传智播客struts2.1_搭建Struts2开发环境

    本教程将指导你如何使用Struts2.1版本搭建开发环境,以便开始你的Java Web项目。 首先,你需要安装必备的开发工具。这通常包括JDK(Java Development Kit)和一个集成开发环境(IDE),比如Eclipse或MyEclipse。...

Global site tag (gtag.js) - Google Analytics