Struts 2: não há ação mapeada para namespace

Eu sou novo no Struts 2 e tenho acompanhado um tutorial em vídeo no Struts 2 (Koushik). Eu criei o Struts.xml, a class de ação e as JSPs da mesma forma que foram criadas no tutorial. Mas dá a seguinte exceção.

Exceção:

Jan 13, 2014 9:30:48 PM org.apache.struts2.dispatcher.Dispatcher warn WARNING: Could not find action or result: /Struts2Starter/getTutorial.action There is no Action mapped for namespace [/] and action name [getTutorial] associated with context path [/Struts2Starter]. - [unknown location] at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 

Struts.xml

      /success.jsp /error.jsp    

Web.xml

   Struts2Starter  index.html index.htm index.jsp default.html default.htm default.jsp   struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter   struts2 /*   

TutorialAction.java (class de ação que estou usando)

 package org.koushik.javabrains.action; public class TutorialAction { public String execute(){ System.out.println("Hello from execute"); return "success"; } } 

Estrutura do projeto

Estrutura do aplicativo

success.jsp e error.jsp são arquivos jsp normais com algum texto. Eu fiz muitas coisas para resolver esse problema pesquisando. Mas nada não resolveu isso. Por favor, deixe-me saber se alguém sabe o que está por trás disso. Eu aprecio muito isso. 🙂

Renomear a Struts.xml nomenclatura Struts.xml para struts.xml funcionará.

A mensagem do erro diz claramente que

não Ação mapeada para namespace [/] e nome de ação [getTutorial] associado ao caminho de contexto [/ Struts2Starter]

Isso significa que a configuração de ação não está disponível no tempo de execução. Confira o plugin do navegador de configuração para depurar problemas de configuração.

Para mapear corretamente o url para a ação, são necessários dois parâmetros: o nome da ação e o namespace.

O Struts carrega a configuração xml na boot e deve saber a localização do struts.xml . Por padrão, ele está procurando no classpath para encontrar um arquivo com nome conhecido como struts.xml . Em seguida, ele analisa o documento e cria uma configuração de tempo de execução. Essa configuração é usada para encontrar o elemento de configuração apropriado para o URL de ação. Se nenhum elemento desse tipo for encontrado durante a solicitação, o código de erro 404 será retornado com a mensagem: There is no Action mapped for namespace and action name .

Além disso, essa mensagem contém um namespace e nomes de ação usados ​​para localizar a configuração da ação. Então você pode verificar suas configurações em struts.xml . Às vezes, o nome da ação e o namespace, armazenados no ActionMapping apontam para a ação errada. Esses valores são determinados pelo ActionMapper que pode ter implementações diferentes, usadas pelos plug-ins.

Há também outra configuração que pode afetar esse mapeador e mapeamento, mas o ponto é o mesmo se você receber essa mensagem, então a URL é usada e não mapeou nenhuma configuração de ação na configuração de tempo de execução. Se você não consegue perceber qual URL deve usar, tente o plugin do navegador de configuração para ver a lista de URLs disponíveis para uso.

altere seu Struts.xml e coloque no Development mode or devMode ele habilita a debugging extra e ajuda a indebugar tente abaixo do código

  < ?xml version="1.0" encoding="UTF-8"?> < !DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">     /success.jsp /error.jsp    

U só precisa verificar que o nome da ação é constante em todos os lugares … eu também tive o mesmo problema resolvi removendo namespace, pois não é necessário que eu vejo u não tenha mencionado e também eu tinha nome de ação diferente em loginpage.jsp e struts. página xml .. apenas veja o nome da ação ur

Seu arquivo JSP não deve estar sob a pasta WEB-INF, mas deve estar sob a pasta web. Anexei uma imagem para mostrar a hierarquia correta.

Sistema de pastas

Acabei de fazer o tutorial e tive o mesmo problema. Acontece que o problema era que o arquivo struts.xml estava no local errado. Verifique se o arquivo struts.xml está localizado aqui: /Struts2Starter/src/struts.xml