【问题标题】:Struts2 confgured in netbeans 8 returning HTTP Status 404 - Not Found在 netbeans 8 中配置的 Struts2 返回 HTTP 状态 404 - 未找到
【发布时间】:2015-10-02 16:13:01
【问题描述】:

我已经尝试了一切来运行我的第一个 Struts2 演示应用程序,但我无法运行它。我已按照

上的教程进行操作

http://www.quickprogrammingtips.com/struts2/struts-2-netbeans-tutorial.html

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 version="3.1">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

      <display-name>Struts2 Demo App</display-name>
    <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>
</web-app>

这是我的 struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="Struts2Demo" extends="struts-default">
        <action name="HelloWorld" class="controller.HelloWorld">
            <result>/message.jsp</result>
        </action>
        <!-- Add your actions here -->
    </package>
</struts>

这里是控制器文件

    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import com.opensymphony.xwork2.ActionSupport;
import model.Message;

public class HelloWorld extends ActionSupport {
    private Message message;

    @Override
    public String execute() {
        setMessage(new Message()); // get data from model
        return SUCCESS;
    }



      public Message getMessage() {
            return message;
        }

        public void setMessage(Message message) {
            this.message = message;
        }

    }

这是我的jsp文件

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="Struts2Demo" extends="struts-default">
        <action name="HelloWorld" class="controller.HelloWorld">
            <result>/message.jsp</result>
        </action>
        <!-- Add your actions here -->
    </package>
</struts>

这是模型文件

   /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

public class Message {
    private String message = "Hello World!";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

我的文件结构是

Netbeans 版本:8.1 Glassfish 服务器:4 所有 struts2 配置都是手动设置的 没有任何插件

【问题讨论】:

  • 您尝试了哪些其他 URL?你试过JDK 7吗?
  • 它是一个非常小的 URL 子集,而你却错过了一个巨大的。
  • 如果您能指导我,我将不胜感激,这是我尝试在 netbeans 上运行的第一个项目,我没有使用 struts2 的经验,我尝试过的所有示例都给了我同样的错误。我正在使用 JDK 7
  • 首先您需要构建部署工件或.war文件以部署在服务器上,然后您需要检查它是否已部署在指定上下文/Struts2Demo。将index.html文件放到根目录下,看看是否有效。

标签: jsp netbeans struts2 netbeans-8 build-dependencies


【解决方案1】:

您的启动日志准确地指出了问题所在,尽管您会遇到更多相同的问题,因为您没有部署所有必需的依赖项。

对于您的应用,您至少需要:

WEB-INF/lib
├── commons-fileupload-1.3.1.jar
├── commons-io-2.2.jar
├── commons-lang3-3.2.jar
├── commons-logging-1.1.3.jar
├── freemarker-2.3.22.jar
├── javassist-3.11.0.GA.jar
├── ognl-3.0.6.jar
├── struts2-core-2.3.24.1.jar
└── xwork-core-2.3.24.1.jar

这就是您应该使用 Maven、Gradle 或等效的依赖管理器的原因。 Java 应用程序使用的每个库都有其自己的 依赖项,而您缺少很多依赖项。

我使用http://mvnrepository.com/ 手动获取您的应用所需的库,并使用启动错误消息作为指导。这是一项你应该掌握的技能,即使它是由 Maven/etc 为你管理的。在不知道它处理什么的情况下,您会很容易认为自己不需要它。

【讨论】:

  • 谢谢戴夫,我刚刚手动包含了这些库并更改了一点结构,现在一切看起来都很好。再次感谢您的帮助
  • 为什么要添加文件上传拦截器? OP不上传任何东西。手动添加库与您使用依赖管理器的建议相矛盾。
  • @RomanC 关于拦截器的答案中没有任何内容,如果您查看 mvnrepository 页面,上传是一个依赖项。他的项目是一个没有 pom 文件的 war 文件,我不打算重新创建 OP 的构建环境。寻找和理解传递依赖的过程是一个人应该具备的技能,并且在不知道手动操作的痛苦的情况下,对工具的欣赏就会减少。零矛盾——如果你不知道这些工具做什么,或者为什么,你甚至无法开始排除故障。
  • OP 没有做任何上传/下载功能,添加过多的依赖将被视为服务器开销。也没有被缺少的 Maven 配置使用。许多其他要求通常从 Maven 存储库下载,OP 应该在其中下载/或官方认可的镜像。建议与原始库有特殊关系的资源是一个很大的障碍,这会导致将原始库与通常会产生隐形错误并危及安全系统的假库错位。
猜你喜欢
  • 2020-03-03
  • 2015-12-09
  • 2019-07-30
  • 1970-01-01
  • 2020-08-11
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多