2013-12-17 1 views
2

Я изучил теорию Struts2 и теперь практикую. Облицовка проблем при выполнении проекта. Я искал в Google разными способами, но не смог найти результат. Пожалуйста, помогите мне. Ниже это code.Please мне помочь друзьям ...HTTP Status 404 - для пространства имен нет действий, отображаемых для пространства имен [/] и имени действия [login], связанного с контуром пути [/ struts2]

Структура проекта:

Project structure

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<display-name>struts2</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> 

<welcome-file-list> 
<welcome-file>login.jsp</welcome-file> 
</welcome-file-list> 

struts.xml

<!DOCTYPE struts PUBLIC 
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 

<constant name="resources" value="ApplicationResources" /> 
<constant name="struts.devMode" value="true" /> 
<package name="default" extends="struts-default"> 
    <action name="login" class="com.practice.structs.actions.LoginAction" 
     method="validateUser"> 
     <result name="success">pages/homepage.jsp</result> 
     <result name="error">pages/login.jsp</result> 
    </action> 

</package> 

LoginAction.java

package com.practice.structs.actions; 

import com.opensymphony.xwork2.ActionSupport; 

public class LoginAction extends ActionSupport { 
private String userName; 
private String password; 
public String validateUser(){ 
    if(this.userName.equalsIgnoreCase("abc") && this.password.equalsIgnoreCase("abc")) 
    { 
     return "success"; 
    }else{ 
     addActionError(getText("error.login")); 
     return "error"; 
    } 
} 

/** 
* @return the userName 
*/ 
public String getUserName() { 
    return userName; 
} 
/** 
* @param userName the userName to set 
*/ 
public void setUserName(String userName) { 
    this.userName = userName; 
} 
/** 
* @return the password 
*/ 
public String getPassword() { 
    return password; 
} 
/** 
* @param password the password to set 
*/ 
public void setPassword(String password) { 
    this.password = password; 
} 


} 

login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<html> 
<head> 

<title>Login page</title> 
</head> 
<body> 
<H1><I>Login Page</I></H1> 
<s:actionerror /> 
<s:form action="login.action" method="post"> 
    <s:textfield name="uname" 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> 

homepage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@taglib prefix="s" uri="/struts-tags" %> 
<html> 
<head> 
<title>Home Page</title> 
</head> 
<body> 
<H2><I>Welcome</I></H2> 
</body> 
</html> 

ответ

2

изменить код, как этот

<package name="default" namespace="/" extends="struts-default"> 
     <action name="login" class="com.practice.structs.actions.LoginAction" 
      method="validateUser"> 
      <result name="success">pages/homepage.jsp</result> 
      <result name="error">pages/![enter image description here][1]login.jsp</result> 
     </action> 

    </package> 


<s:form action="login" method="post"> 
    <s:textfield name="uname" 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> 

Ваше имя действия в форме action.login и struts.xml будет войти в оба должны быть одинаковыми, а также добавить пространство имен

+0

Спасибо за ваш ответ. – user2940073

+0

приветствовать надежду, что помогает – Lijo

+0

но получить ту же ошибку. [XmlConfigurationProvider] Синтаксический файл конфигурации [распорки-DEFAULT.XML] [XmlConfigurationProvider] Не удалось найти файлы конфигурации на имя распорок-plugin.xml, пропуская [XmlConfigurationProvider] PARSING файл конфигурации [struts-plugin.xml] [XmlConfigurationProvider] Невозможно найти файлы конфигурации с именем struts.xml, пропуская [XmlConfigurationProvider]. Конфигурационный файл конфигурации [struts.xml] – user2940073

0

В ваших LoginAction.java свойств вы взяли в

private String userName; private String password;

Но в вы login.jsp вы писали, как

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

Изменение

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

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

Я надеюсь, что этот ответ решает проблему ...

1

Я знаю, этот вопрос немного устарел, но я подумал, что стоит отметить, для тех, кто случится в конечном итоге снова наткнулся на эту должность и все еще испытывает проблему; при условии, что вы 100% уверены, что ваши отображения правильно и что ваш web.xml содержит соответствующий фильтр, попробуйте следующее:

  1. Остановите сервер Tomcat
  2. Создать папку «классы» в вашем Папка «WEB-INF»
  3. Переместите файл struts.xml во вновь создаваемую папку «classes»
  4. Щелкните правой кнопкой мыши на своем сервере Tomcat и выберите «Очистить» - не требуется, но рекомендовал бы это сделать.
  5. Запустите Tomcat снова и надеяться на лучшее :-)

Как Наглядное ваш WEB-INF должен закончить тем, что что-то вроде этого:

enter image description here

Если вы все еще испытываете проблему, дважды проверьте свои сопоставления расположений, а также ваш web.xml

1

У меня недостаточно очков, чтобы ответить на комментарий Райана и оценить его, но wh по его словам, является правильным решением в конкретных случаях, и я собираюсь рассказать, почему.

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

Позвольте мне объяснить с практическим примером, который может иметь место в некоторых товарищей, которые обратились за этой проблемы:

Когда вы разрабатываете с Eclipse, может быть, вы выбираете другой исследователь проекта, чем в Eclipse по умолчанию «Project Explorer », например,« Навигатор ». Используя представление «Навигатор», вы можете создавать папки, но эти папки не являются ресурсами пакета (как при создании «ресурсов пакета» с помощью «Проводника проекта» по умолчанию), поэтому Struts2 не может найти файл «struts.xml» для настройте действия. Таким образом, единственные папки, которые ваш проект будет обрабатывать как «ресурсы пакетов», - это те, что находятся в WEB-INF, как Eclipse в «Динамических веб-проектах» по умолчанию.

Итак, убедитесь, что все файлы конфигурации находятся в «ресурсе пакета».

0

внести изменения в файл struts.xml ,, добавить namespace="/" атрибут в как <package name="default" namespace="/" extends="struts-default">

0

Чтобы решить эту проблему, я должен был создать папку классов в WEB-INF и поместите файл struts.xml там. Затем я поместил файлы .jsp в веб-папку и разместил '/' перед файлами .jsp, например /x.jsp