使用Struts应用程序时出现404错误 [英] Error 404 issues using Struts application

查看:131
本文介绍了使用Struts应用程序时出现404错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在几天后运行Struts网络应用程序时遇到了一些问题。我尝试了StackOverflow的几个与我的问题有关的解决方案,但没有一个有效。

I am having some issues running a Struts web app since few days. I tried several solutions from StackOverflow relating to my problem but none of them works.

web.xml

<display-name>Struts2 Application</display-name>
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>

        org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>
<welcome-file-list>
    <welcome-file>Login.jsp</welcome-file>
</welcome-file-list>

struts.xml

<struts>
    <constant name="struts.enable.DynamicMethodInvocation"
        value="false" />
    <constant name="struts.devMode" value="false" />

    <constant name="struts.custom.i18n.resources"
        value="ApplicationResources" />

    <package name="default" extends="struts-default" namespace="/">

        <action name="login"
            class="net.viralpatel.struts2.LoginAction">
            <result name="success">Welcome.jsp</result>
            <result name="error">Login.jsp</result>

        </action>
    </package>
</struts>

Login.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>

<title>Struts 2 - Login Application | ViralPatel.net</title>
</head>

<body>
<h2>Struts 2 - Login Application</h2>
<s:actionerror />
<s:form action="login.action" method="post">

    <s:textfield name="username" key="label.username" size="20" />
    <s:password name="password" key="label.password" size="20" />

    <s:submit method="execute" key="label.login" align="center" />
</s:form>
</body>
</html>

LoginAction.java

package net.viralpatel.struts2;

public class LoginAction {
    private String username;
    private String password;

    public String execute() {

        if (this.username.equals("admin")
                && this.password.equals("admin123")) {
            return "success";
        } else {
            return "error";
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Libs我添加了

1.commons-logging-1.1.3.jar
2. freemarker-2.3.19.jar
3. ognl-3.0.6.jar
4. struts2-core-2.3.15.1.jar
5. xwork-core-2.3.15.1.jar

访问网址时出错 http:// localhost:8080 / StrutsHelloWorld /

HTTP Status 404 - /StrutsHelloWorld/

type Status report

message /StrutsHelloWorld/

description The requested resource is not available.

Apache Tomcat/7.0.42

我试过这个 http://java.dzone.com/articles/struts2-tutorial-part-27

我的控制台上没有错误,问题视图。如果有人能帮助我,我会很高兴。

There are no errors on my console, problem view. I would be glad if someone could help me.

推荐答案

错误404表示您请求的资源不可用,同样是指未映射的操作到请求网址。

The error 404 means that resource you have requested is not available, the same referred to the action that is didn't map to the request URL.

不推荐使用FilterDispatcher ,可能无法使用当前的Struts版本,请使用 StrutsPrepareAndExcecuteFilter 而不是。

FilterDispatcher is deprecated and may not work with the current Struts version, use StrutsPrepareAndExcecuteFilter instead.

<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>

struts.xml 中添加以下内容

<package name="default" extends="struts-default" namespace="/">
   <action name=""><result>/Login.jsp</result></acton> 

这会将您转到登录页面。还要考虑使用JSP资源的绝对路径。

this will forward you to the login page. Also consider to use absolute paths to the JSP resources.

在JSP中使用需要重写的表单

In the JSP use the form that needs to rewrite to

<s:form namespace="/" action="login" method="post">

    <s:textfield name="username" key="label.username" size="20" />
    <s:password name="password" key="label.password" size="20" />

    <s:submit key="label.login" align="center" />
</s:form>

操作属性中使用操作名称并像在包配置中一样提供 namespace

In the action attribute use the action name and provide namespace as you did in the package configuration.

使用 method =execute s:submit 标记中无效,默认情况下使用的方法执行,并且它将无法工作,因为您已在Struts配置中关闭了DMI。

Using method="execute" is useless in the s:submit tag, the method execute used by default, and it will not work because you have turned off DMI in the Struts configuration.

WEB-INF / lib 中的旧库上添加库t帮助这么多,你的应用程序可能无法工作,直到你删除和替换更高版本的所有较低版本库并添加当前版本的Struts框架所需的新库。

Adding libraries over the old libraries in the WEB-INF/lib doesn't help so much and your application probably would not work, until you remove and replace all lower version libraries with higher version and add new libraries needed by the current version of Struts framework.

这篇关于使用Struts应用程序时出现404错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆