2013-08-24 8 views
4

У меня возникли проблемы с веб-приложением Struts с нескольких дней. Я попробовал несколько решений от StackOverflow, связанных с моей проблемой, но ни один из них не работает.Ошибка 404 проблемы с использованием приложения Struts

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 

Ошибка доступа к URL 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

Там нет ошибок на моей консоли, проблемный вид. Я был бы рад, если бы кто-то мог мне помочь.

+0

Ошибки веб-приложений Netbeans отображаются не в консоли, а в отдельном окне для сервера. Работает ли простой код jsp/html-сервлета ??? (просто чтобы проверить, работает ли что-то). Во-вторых, я столкнулся с проблемой с Eclipse IDE, что * если я запустил файл, он работал * но «запустить проект» не удалось (без развертывания) –

+0

Рассмотрите возможность использования maven или аналогичного для управления зависимостями, несколько. Проверьте журналы запуска. –

+1

https://github.com/coding-idiot/Struts2-Examples - Он содержит несколько проектов maven, а также не-maven netbeans, если вам нужно его запустить. Используйте последнюю версию struts2. Ваш код «устарел» –

ответ

2

Ошибка 404 означает, что запрошенный ресурс недоступен, то же самое относится к действию, которое не отображается на URL-адрес запроса.

FilterDispatcher устарел и может не работать с текущей версией Struts, вместо этого используйте StrutsPrepareAndExcecuteFilter.

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

В JSP использовать форму, которую необходимо переписать

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

В используют имя действия в action атрибута и обеспечить namespace, как вы делали в конфигурации пакета.

Использование method="execute" бесполезно в s:submit тега, метод execute используемый по умолчанию, и он не будет работать, потому что вы выключили DMI в конфигурации Struts.

Добавление библиотек более старых библиотек в WEB-INF/lib не помогает так много, и ваше приложение, вероятно, не будет работать, пока вы удалить и замените все более низкие библиотеки версии с более высокой версией и добавлять новые библиотеки, в которых нуждаются текущая версия рамок Struts.

+1

Работал отлично с StrutsPrepareAndExcecuteFilter –