我正在尝试使用Struts2创建一个嵌入式Tomcat。
第一步是制作一个纯粹的嵌入式Tomcat。 遵循本教程很容易做到:
现在,为了使Struts2正常工作,下一步是将Struts库添加到POM文件中。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.20</version>
</dependency>
一块蛋糕!下一步:将Struts过滤器添加到web.xml。很简单,但....嵌入式Tomcat不加载web.xml文件!不管我做什么。解决方案:在目标JAR文件夹下创建一个名为resources
的文件夹,将web.xml文件放在那里并将此代码添加到服务器入门类:
tomcat.getHost().setAppBase(appBase);
StandardContext ctx = (StandardContext) tomcat.addWebapp(contextPath, appBase);
( (StandardJarScanner) ctx.getJarScanner() ).setScanAllDirectories(true);
ctx.getServletContext().setAttribute( Globals.ALT_DD_ATTR, "resources/web.xml");
tomcat.start();
这将从外部文件夹加载web.xml。工作得很好。现在我可以加载struts库。通过查看服务器日志我可以看到。加载东西的所有支柱都在那里。
下一步:配置拦截器。在正常情况下,我需要将struts.xml文件放入`src \ main \ resources'文件夹(Eclipse)。所以我尝试了这个并没有用。
我的struts.xml文件只有一个指向实现Interceptor的类的拦截器标记。我喜欢使用注释来配置Actions,因此我在此文件中没有Actions标记。这个struts.xml文件和拦截器类来自我所拥有的其他系统,它的工作非常好。非常简单。
麻烦:没有加载struts.xml文件。我可以通过从拦截器的intercept
方法发送输出并弄乱struts.xml文件(将拦截器类名更改为不存在的类,弄乱标记结构等)来证实这一点。
我的问题:如何告诉嵌入式Tomcat加载struts.xml文件,或者更确切地说,如何告诉struts引擎struts.xml位置?
答案 0 :(得分:0)
即使它不会直接回答OP。但是可以实现创建可执行Fat jar的理想目标。未来谷歌搜索可以从中受益。这与我做过的struts2一起工作。它将适用于任何网络应用
通过使用tomcat7-maven-plugin
,它变成了和平的蛋糕。如上所述here。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>exec-war-only</goal>
</goals>
<phase>package</phase>
<configuration>
<path>/appName</path>
<enableNaming>false</enableNaming>
<finalName>appName.jar</finalName>
<charset>utf-8</charset>
</configuration>
</execution>
</executions>
</plugin>
如here中所述,你必须使用2.1或2.3,因为2.2有bug。根据{{3}},您可以通过在插件中明确提及所有tomcat依赖项来选择tomcat的次要版本(我还没有尝试过)。
如果你在maven中运行package
目标,它将在目标文件夹中生成.jar文件。您可以使用java -jar appName.jar