gpt4 book ai didi

java - 如何强制嵌入式 Tomcat 查找 struts.xml 文件?

转载 作者:搜寻专家 更新时间:2023-11-01 03:48:53 25 4
gpt4 key购买 nike

我正在尝试创建一个与 Struts2 一起运行的嵌入式 Tomcat。

第一步是制作一个可以工作的纯嵌入式 Tomcat。按照本教程很容易做到:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/basic_app_embedded_tomcat/basic_app-tomcat-embedded.html#section4

现在,要使 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 加载的东西都在那里。

下一步:配置拦截器。在正常情况下,我需要将 struts.xml 文件放入 `src\main\resources' 文件夹 (Eclipse)。所以我尝试了这个但没有用。

我的 struts.xml 文件只有一个拦截器标签指向一个实现拦截器的类。我喜欢使用注解来配置 Actions,所以我在这个文件中没有 Actions 标签。这个 struts.xml 文件和拦截器类来 self 拥有的其他系统,并且运行良好。非常简单。

问题:struts.xml 文件未加载。我可以通过从拦截器的 intercept 方法发送输出并弄乱 struts.xml 文件(将拦截器类名称更改为不存在的名称,弄乱标签结构等)来改进这一点。

我的问题:如何告诉嵌入式 Tomcat 加载 struts.xml 文件,或者更准确地说,如何告诉 struts 引擎 struts.xml 的位置?

最佳答案

即使它不会直接回答 OP。但是可以实现创建可执行 Fat jar 的预期目标。 future 的谷歌搜索可以从中受益。这适用于我所做的 struts2。AFIK 它适用于任何网络应用程序。

通过使用 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 有错误。根据Tomcat Docs您可以通过在插件中明确提及所有 tomcat 依赖项来选择次要版本的 tomcat(我没有尝试过)。

如果您在 Maven 中运行 package 目标,它将在目标文件夹中生成 .jar 文件。您可以使用 java -jar appName.jar

运行它

关于java - 如何强制嵌入式 Tomcat 查找 struts.xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34208767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com