java - HTTP स्थिति 404-नामस्थान के लिए कोई क्रिया मैप नहीं है




struts2 struts2-namespace (4)

इस तरह से अपना कोड बदलें

 <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 में प्रवेश दोनों समान होना चाहिए और नामस्थान को भी जोड़ना चाहिए

मैंने सीखा है Struts2 के सिद्धांत और अब अभ्यास। प्रोजेक्ट निष्पादित करते समय समस्याओं का सामना करते हुए। मैंने कई मायनों में Google में खोज की लेकिन परिणाम नहीं मिल सका। कृपया मेरी मदद करें नीचे कोड है। कृपया मेरी मदद करो ...

परियोजना संरचना:

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>

आपके 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"/>

मुझे उम्मीद है कि यह उत्तर आपकी समस्या का समाधान करेगा ...


रयान की टिप्पणी का जवाब देने के लिए मेरे पास पर्याप्त अंक नहीं हैं और न ही उन्हें दर देना है, लेकिन जो कुछ कहता है वह ठोस मामलों में एक वैध समाधान है, और मैं यह बताने जा रहा हूं कि क्यों

कभी-कभी आप किसी प्रोजेक्ट में बनाए गए फ़ोल्डर को एप्लिकेशन के संसाधनों के रूप में नहीं ले जाते हैं, और आपको इसे कॉन्फ़िगर करना होगा।

मुझे अपने आप को एक व्यावहारिक उदाहरण के साथ समझाइए, जो शायद इस समस्या के लिए कुछ साथी से आए हों:

जब आप ग्रहण के साथ विकसित हो रहे हैं, तो हो सकता है कि उदाहरण के लिए, "नेविगेटर" के रूप में, ग्रहण की डिफ़ॉल्ट "प्रोजेक्ट एक्सप्लोरर" की तुलना में आप एक अन्य प्रोजेक्ट एक्सप्लोरर चुनते हैं। "नेविगेटर" दृश्य का उपयोग करके, आप फ़ोल्डर्स बना सकते हैं, लेकिन यह फ़ोल्डर्स पैकेज संसाधन नहीं हैं (जैसा कि आप "पैकेज संसाधनों" को डिफ़ॉल्ट "प्रोजेक्ट एक्सप्लोरर" के साथ बनाते हैं), इसलिए स्ट्रट्स 2 को "स्ट्रट्स.एक्सएमएल" फ़ाइल को कॉन्फ़िगर करने के लिए नहीं मिल सकता है क्रियाएँ। इसलिए, केवल वे फ़ोल्डर्स जो आपकी प्रोजेक्ट "पैकेज संसाधन" के रूप में संसाधित करेंगे, वे वेब-आईएनएफ के तहत हैं, क्योंकि डिफ़ॉल्ट रूप से "डायनामिक वेब प्रोजेक्ट्स" में एक्लिप्से करना है।

तो फिर, "पैकेज संसाधन" में सभी कॉन्फ़िगरेशन फ़ाइलों को होने के बारे में सुनिश्चित करें


struts.xml फ़ाइल में परिवर्तन करें, जैसे <package name="default" namespace="/" extends="struts-default"> namespace="/" विशेषता को जोड़ें।





action-mapping