首先,关于这个特定的应用程序设置和错误,有很多问题。但是,大多数(如果不是全部)看似重复的问题都通过添加丢失的罐子来解决。我正在使用Maven作为我的依赖项,无论如何,我的外部库列表看起来很完整。
话虽如此,在我的情况下,神秘来自于Tomcat Maven插件似乎在基于
正常工作的事实
然而,访问http://localhost:8080/sure/hello
让我痛苦地“资源不可用”错误。这让我得出结论,这是一个映射问题,但我的web.xml
和struts.xml
对我来说都很好看。
的web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml中
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.crace.HelloAction">
<result name="success">/web/WEB-INF/index.jsp</result>
</action>
</package>
<constant name="struts.devMode" value="true" />
</struts>
的pom.xml
<groupId>com.crace.strangewave</groupId>
<artifactId>Sure</artifactId>
<version>1.0-SNAPSHOT</version>
<name>sure</name>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
的index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello</title>
</head>
<body>
<s:property value="greeting"/>
</body>
</html>
HelloAction.java
public class HelloAction extends ActionSupport {
private String greeting;
private static final Logger logger = Logger.getLogger(HelloAction.class);
public String execute() throws Exception {
setGreeting("Hello World!");
// logs debug message
if (logger.isDebugEnabled()) {
logger.debug("execute()!");
}
// logs exception
logger.error("This is Error message", new Exception("Testing"));
return SUCCESS;
}
public String getGreeting() {
return greeting;
}
public void setGreeting(String greeting) {
this.greeting = greeting;
}
至于日志记录,我唯一能找到的嵌入式版本会呈现如下信息:
0:0:0:0:0:0:0:1 - - [10/Jun/2017:13:45:38 -0400] "GET /sure/hello HTTP/1.1" 404 971 http-bio-8080-exec-3 1
0:0:0:0:0:0:0:1 - - [10/Jun/2017:13:45:38 -0400] "GET /sure/hello HTTP/1.1" 404 971 http-bio-8080-exec-5 2
编辑:我提供了Tomcat管理器的屏幕截图,显示我的战争已正确部署到服务器。再次,这是一个映射问题(因此404),但我无法看到我在映射中出错的地方!
答案 0 :(得分:0)
尝试此网址http://localhost:8080
如果您仍然遇到资源不可用错误,您可以尝试以下操作:
答案 1 :(得分:0)
我相信您需要根据您是否要运行“tomcat7:deploy”和“tomcat7:run-war”来配置不同的Tomcat Maven插件。我试图做后者。但我正在设置我的项目来运行前一个命令。后一个命令需要非常少的配置。差异太大,无法列举,所以如果有人感兴趣,只需将我的问题中的pom与我的答案进行比较。
的pom.xml
<groupId>com.crace</groupId>
<artifactId>sure</artifactId>
<version>1.0-SNAPSHOT</version>
<name>sure</name>
<packaging>war</packaging>
<build>
<finalName>sure</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
唯一的问题是,我不相信添加这些设置会导致我的错误。但是我花了很多时间摆弄这些多余的配置设置。所以我想最后要注意这一点很重要。
据我所知,唯一的问题是我把index.jsp(我的结果页面)放在WEB-INF文件夹中。将它移动到我的web文件夹并在struts.xml中更改路径就可以了。
struts.xml中
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.crace.HelloAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
编辑:Roman C,从他对我的问题的评论中,帮助我意识到我以前的解决方案仅仅是一种解决方法。再看一下,我意识到我的项目结构都搞砸了。 Struts正在我的webapp文件夹中查找我的jsp文件。所以我只是将我的WEB-INF文件夹移到我的webapp文件夹中,然后将我的jsp文件放在里面,瞧!有用。我的struts.xml现在看起来像:
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.crace.HelloAction">
<result name="success">/WEB-INF/content/hello.jsp</result>
</action>
</package>
</struts>
现在我的项目结构如下: