Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制嵌入式Tomcat查找struts.xml文件?_Java_Tomcat_Configuration_Struts2 - Fatal编程技术网

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

Java 如何强制嵌入式Tomcat查找struts.xml文件?,java,tomcat,configuration,struts2,Java,Tomcat,Configuration,Struts2,我正在尝试创建一个运行Struts2的嵌入式Tomcat 第一步是制作一个工作的纯嵌入式Tomcat。 按照本教程进行操作很容易: 现在,为了让Struts2正常工作,下一步是将Struts libs添加到POM文件中 javax.servlet jstl 1.2 org.apache.struts.xwork X工作核心 2.3.20 org.apache.struts struts2型芯 2.3.20 org.apache.struts struts2约定插件 2.3.20 小菜一碟!

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

第一步是制作一个工作的纯嵌入式Tomcat。 按照本教程进行操作很容易:

现在,为了让Struts2正常工作,下一步是将Struts libs添加到POM文件中


javax.servlet
jstl
1.2
org.apache.struts.xwork
X工作核心
2.3.20
org.apache.struts
struts2型芯
2.3.20
org.apache.struts
struts2约定插件
2.3.20
小菜一碟!下一步:将Struts过滤器添加到web.xml。很容易,但是。。。。嵌入式Tomcat不加载web.xml文件!不管我做什么。解决方案:在目标JAR文件夹下创建一个名为
resources
的文件夹,将web.xml文件放在那里,并将此代码添加到server starter类:

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文件只有一个拦截器标记,指向实现拦截器的类。我喜欢使用注释来配置动作,所以我在这个文件中没有动作标签。这个struts.xml文件和拦截器类来自我拥有的其他系统,并且工作得非常好。很简单

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


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

即使它不会直接回答OP。但创建可执行Fat jar的预期目标是可以实现的。未来的谷歌搜索可以从中受益。这与我使用的struts2一起工作。AFIK它将适用于任何web应用程序

通过使用
tomcat7 maven插件
,它已经成为了小菜一碟。如前所述。


org.apache.tomcat.maven
您必须使用2.1或2.3,因为2.2有bug。据介绍,您可以通过在插件中明确提及所有tomcat依赖项来选择tomcat的次要版本(我还没有尝试过)


如果在maven中运行
package
goal,它将在目标文件夹中生成.jar文件。您可以使用
java-jarappname.jar运行它,这是一个有趣的实验!您是否可以尝试(只是看看会发生什么)1)将struts.xml和action annotations中的包的名称更改为非默认值,2)如果n.1不起作用,请直接在action文件上指定带有注释的拦截器堆栈?最后3)删除约定插件并在struts.xml中定义操作,以确保struts.xml不会被加载,也不会被约定插件忽略或覆盖。未读取struts.xml文件。。。我完全可以搞乱这个文件(用一些lorem ipsum填充)。。。什么都没发生。你这次成功了吗??。我也在尝试同样的事情。我面临着完全相同的问题。无法解决它。您能分享如何解决的示例代码吗。你能告诉我一些非常有用的教程吗?@AndreaLigios你能帮我吗?不。。。我不再处理这个了。我失去了耐心。我认为某些事情只是为了学术目的。嵌入式Tomcat就是其中之一。我想你误解了这个问题。我在你的答案中找不到任何使Struts2起作用的参考。添加这个TrywithMaven目标包,它将创建胖jar。您可以在java-jar中运行它。我正在为我的web应用程序使用struts2和hibernate,所以我只需要创建一个普通的Java web应用程序(没有嵌入式Tomcat)并使用这样的POM,它将成为一个独立的web应用程序?因为我已经可以创建一个独立的tomcat应用程序了,所以您可以将您的POM与所有相关项目一起发布吗。我只是不能让Struts2工作。你不需要再添加一件额外的东西。只需将该插件添加到pom.xml中,然后执行maven goal
package
。它将在目标文件夹中为你提供appName.jar。使用
java-jarappname.jar
运行它。
 <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>