使用Maven+Jetty配置基于Struts的Web应用

       最近打算在入职前把Struts好好的看一看,虽然在最近这一年多里,对基于SSH这种开发模式有了一些实战经验,但由于之前没有系统学习过,所以对这些框架也是用到哪儿了解到哪儿。尤其是Struts,因为我们采用的的SpringMVC,所以对Struts的了解仅限于看过马士兵和传智播客的教程,没有实际的项目经验,这样最大的问题就在于,你看了之后一段时间不用,就又忘记了,相当于白看。但简历上你又必须得写熟悉SSH,因为不写的话,面试机会就会少很多,没办法,很现实的问题。

       说正事,计划先是结合例子把《深入Struts内幕》这本书看看,在了解struts的同时,也学习一下人家是怎么读框架的源码的,掌握这种方式,可以省去很多在网上找现成答案的麻烦。工欲善其事,必先利其器。搭建一个简单的学习环境,这是前提,根据工作中的一些习惯和趋势,我决定使用Maven来构建项目,并使用Jetty作Web服务器,理由是部署和启动方便,而且能和Maven无缝结合。虽然一直在用,但对Maven和Jetty都不太了解,折腾了一个晚上,总算是搭好了一个简单的例子,能够运行,我觉得不错。以后就可以专注于理解struts了,下面把搭建过程总结下来,这样下次忘记了的话,也不用在网上一顿乱找了。

       1)使用Maven构建一个WebApp项目

       Eclipse中如果装有Maven插件的话,建个Maven项目是很方便的事,但是我想借这个机会了解一下Maven的基本操作,所以决定在命令界面来完成创建的操作。作为开源项目来说,官网上的介绍肯定是最全的,所以我直接上在其官网上找到了相关的使用说明,其地址如下:http://maven.apache.org/index.html ,在那上面我很快找到一篇入门介绍:http://maven.apache.org/guides/getting-started/index.html,基本上这篇内容看完了,即使之前从没用过,也至少可以使用了。

       我关注的是如何创建一个WEB应用,通过上面的介绍,命令如下:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes \

    -DarchetypeArtifactId=maven-archetype-webapp  -DgroupId=com.oupeng.app \

    -DartifactId=my-webapp

       上面的命令中,archetype:generate 表示创建命令 -D后面接key=value的形式,表示对某个参数进行设置,一般情况下,我们只需要指定groupId和artifactId即可,前者表示项目惟一的组织名,后者表示项目的ID,对于WebApp,需要指定 -DarchetypeArtifactId=maven-archetype-webapp,当然还可以指定一些其它参数,比如version之类的。

       执行完上述命令之后,maven会帮我们建立好一个结构完整的项目,主要包括src/main/resources/目录,src/main/webapp/WEB-INF目录等,以及生成一个pom文件,描述了项目的结构,并引入junit依赖,说明Maven认为测试很重要。就这样一个命令,项目帮我们建立好了,这还是比较方便的。

       简单解释一下Maven的几个常用的命令,compile:编译项目,package:打包,将项目打成一个war包或者jar包,install:将打包好的文件安装到本地的Maven仓库,clean:删除之前创建的jar包,test:编译并运行测试用例。一般情况下,直接使用install即可,我常用的是mvn install -T 8

        2)添加Jetty

       因为Jetty可以以插件的形式在maven的Pom文件中配置,非常方便,所以它是不二的Web容器选择,当然生产环境下还是使用Tomcat或者Resin比较好,毕竟功能强大。配置Jetty也很简单,但我配置的时候走了点弯路,最后发现原因是Jetty的新版本和原版本在很多方面有一些差别,所以这个要注意,弄清楚使用的是什么版本,个人建议是显示指定版本号。这样便于控制,代码如下:

        

<plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>  
        <artifactId>maven-jetty-plugin</artifactId>  
        <version>6.1.26</version>  
        <!--configuration -->
        <configuration>
            <connectors>
                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                  <port>9090</port>
                  <maxIdleTime>60000</maxIdleTime>
                </connector>
            </connectors> 
            <contextPath>/strutsDemo</contextPath>
        </configuration>
      </plugin>
    </plugins>

      上面的代码给出了一个比较简单的配置,不过需要注意的是,新版本的Jetty(>=7),artifactId的值是jetty-maven-plugin,而且好像也去掉了org.mortbay.jetty.nio.SelectChannelConnector,用什么代替了,由于我只是想跑通,所以没做进一步的查询,而是指定了7以下的版本。另外还有一个需要注意的地方,就是上面这段代码应该放在<build>节点下,要不然会有问题。

    以上两步部署完成后,再使用mvn jetty:run来启动,浏览器中输入localhost:9090/strutsDemo,能看到Hello World!表示配置成功。另外,上面这段代码参考了jetty的官网中的一些说明,http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html

    3)改造为Struts项目

    参考struts官网上的一篇文章,http://struts.apache.org/release/2.3.x/docs/create-struts-2-web-application-using-maven-to-manage-artifacts-and-to-build-the-application.html,按上面的说明,很方便的就建立了一个简单的struts Web应用。简单的说需要以下三步:

    1. 修改pom.xml文件,加入对struts2.xml的依赖,以及对log4j.xml的依赖,如下:

<!--struts-->
  	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-core</artifactId>
		<version>2.3.8</version>
  	</dependency>
  	<!-- log4j -->
  	<dependency>
    	         <groupId>log4j</groupId>
    	         <artifactId>log4j</artifactId>
    	         <version>1.2.17</version>
	</dependency>

     2)修改web.xml文件,添加struts2过滤器,并添加log4j.xml文件到resources目录。如下:

<!-- filter to start the struts -->
  	<filter>
  		<filter-name>struts2</filter-name>
  		<filter-class>
                   org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
                </filter-class>
	</filter>

	<filter-mapping>
  		<filter-name>struts2</filter-name>
   		<url-pattern>/*</url-pattern>
	</filter-mapping>

     3)添加struts.xml文件,配置action,示例如下:

<struts>

	<constant name="struts.devMode" value="true" />

	<package name="basicstruts2" namespace="/firstdemo" extends="struts-default">
		<action name="index">
			<result>/WEB-INF/index.jsp</result>
		</action>
	</package>

</struts>

 以上,配置完成后,重启服务,浏览器中输入:http://localhost:9090/strutsDemo/firstdemo/index,如果能正常出现Hello World,则配置成功。

总结:这是一次很简单的配置过程,其中一些(struts项目构建)之前已做过好几次,但再次做的时候,还是不知道,又在网上查,我相信这次总结之后,以后不用再查了,除非struts的配置方式有很大的更新。所以虽然花了一个晚上,还是值得的,从明天起,就可以专注于学习struts了。

相关推荐