如果是原有web工程,右键转换成maven支持就行,然后在pom.xml中添加相应的依赖。如果新建的话选择maven project,在Filter中输入org.apache.maven.archetypes--选择Artifact Id为maven-archetype-webapp的那条--下一步
在web.xml文件中配置Struts 2的核心Filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
<welcome-file-list>
<welcome-file>/*.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.properties 文件:
这个文件提供了一种更改框架默认行为方式的机制。在一般情况下,如果不是打算让调试更加方便的话,你根本无须更改这个文件。在“struts.properties ”文件中定义的属性都可以在“web.xml”文件的“init-param”标签中进行配置,或者通过“struts.xml ”文件中的“constant” 标签来修改。我们可以更改其中的一些属性来改变Freemarker 的选项——改变Action 映射类,判断是否要重新载入XML配置文件,以及默认的UI主题等等。在Struts2 的wiki 上有这些属性的最新信息,地址为http://struts.apache.org/2.x/docs/strutsproperties.html.
在Struts2-Core的jar发行版中,有一个默认的属性文件,名为“default.properties”。如果要对属性进行修改的话,只需要在项目的源代码目录下,创建一个叫做“struts.properties ”的文件,然后把想要修改的属性添加到文件中,新的属性就会把默认的覆盖掉了。
在开发环境中,以下几个属性是可能会被修改的:
» struts.i18n.reload = true——激活重新载入国际化文件的功能
» struts.devMode = true ——激活开发模式,以提供更全面的调试功能。
» struts.configuration .xml.reload = true ——激活重新载入XML配置文件的功能(这是为Action 准备的),当文件被修改以后,就不需要重新载入Servlet 容器中的整个Web 应
用了。
» struts.url.http.port = 8080——配置服务器运行的端口号(所有生成的URL 都会被正确创建)
struts.xml文件一般放于WEB-INF的classes下
<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts是Struts 2配置文件的根元素 -->
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="Struts2Demo" extends="struts-default">
<!-- 定义login的Action,该Action的实现类为com.traysine.ssstep.Action类 -->
<action name="Login" class="com.traysine.ssstep.LoginAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
</struts>
如果struts.xml需要放在其他路径,如WEB-INF/conf/下这个时候在web.xml中配置如下
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,/WEB-INF/conf/struts.xml</param-value> <!-- 或是 ../conf/struts.xml -->
</init-param>
</filter>
有时候struts.xml文件会随着项目的变大格外的臃肿,这时候可以将它分解成多个文件
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- 下面是Struts 2配置文件的根元素 -->
<struts>
<!-- 通过include元素导入其他配置文件 -->
<include file="struts-part1.xml" />
...
</struts>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.traysine.ssstep</groupId>
<artifactId>Struts2Demo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Struts2Demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>struts2-core</artifactId>
<groupId>org.apache.struts</groupId>
<version>2.3.8</version>
</dependency>
<dependency>
<artifactId>xwork</artifactId>
<groupId>com.opensymphony</groupId>
<version>2.1.3</version>
</dependency>
<dependency>
<artifactId>ognl</artifactId>
<groupId>ognl</groupId>
<version>3.0.6</version>
</dependency>
</dependencies>
<build>
<finalName>Struts2Demo</finalName>
<directory>target</directory>
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>2.1.1</version>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<version>6.1.22</version>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<contextPath>/</contextPath>
<scanIntervalSeconds>3</scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>7002</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<scanTargetPatterns>
<scanTargetPattern>
<directory>src/main/webapp/WEB-INF</directory>
<excludes>
<exclude>**/*.jsp</exclude>
</excludes>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</scanTargetPattern>
</scanTargetPatterns>
<stopPort>4000</stopPort><!-- 停止jetty -->
<stopKey>foo</stopKey>
</configuration>
</plugin>
</plugins>
</build>
</project>
今天从svn检出了几个同事的工程,就是一个工程依赖很多工程的那种,结果就始终报错
Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.
网上找了半天,说是什么包冲突,网上有说这样的
因为cglib 包和asm包冲突
开始用的cglib包是cglib-2.1.3.jar ,后来换了一个cglib-nodep-2.2.jar才测试通过,不容易,一上午了!!!
但是我用maven管理也没法改这个jar包,后来又试试看看,怎么都是不行
然后删掉本地的repo库,重新从服务器更新maven的依赖库,后来就好了
还有个要点就是在pom.xml中依赖了servletapi的话就不应该在工程中添加依赖tomcat的jar库