Для пространства имен [/] и имени действия [], связанного с контекстным путем, нет сопоставленных действий [/struts]
Я просмотрел все подобные вопросы в stackru, но это не помогло, извините. Основным отличием от всех них является то, что я получил ПУСТОЕ имя действия в сообщении об ошибке. Поиск в Google не помог:(Надеюсь, что кто-то может дать подсказку, где искать источник проблемы. Thx
сообщение:
Stacktraces
There is no Action mapped for namespace [/] and action name [] associated with context path [/struts]. - [unknown location]
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58
..................
struts.xml:
<?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">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/*" extends="struts-default">
<action name="login"
class="training.struts.action.LoginAction">
<result>login.jsp</result>
</action>
</package>
</struts>
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"
version="2.5">
<display-name>Struts Lab</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>
<!-- Spring Config -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/springServlet/appServlet/mvc-servlet.xml,
/WEB-INF/db/db-cfg.xml,
/WEB-INF/springServlet/application-security.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springServlet/appServlet/mvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- *** -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
хорошо.. изображение невозможно, поэтому структура проекта:
src/main/java
----+training.struts.action.LoginAction.java
src/main/webapp
----+WEB-INF
--------+classes
-----------+struts.xml
--------+db
-----------+db-cfg.xml
--------+springServlet
-----------+appServlet
---------------+mvc-servlet.xml
-----------+application-security.xml
--------+index.jsp
--------+login.jsp
--------+web.xml
ОБНОВЛЕНИЕ: так грустно быть глупым =(я переместил свой login.jsp из WEB-INF в корневой каталог веб-приложения, и это решило проблему.
ОБНОВЛЕНИЕ 2: Я провел некоторое расследование: если я удалю блок "welcome-file-list" из web.xml, контейнер будет искать "index.jsp" в корневом каталоге веб-приложения, чтобы отобразить его в качестве первого просмотра запущенного приложения. Если я удаляю "index.jsp", то получаю идентичное сообщение об исключении:для пространства имен [/] и имени действия [], связанных с контекстным путем [/struts], не отображается действие
Поэтому, на мой взгляд, если в сообщении об ошибке указано пустое имя действия с правильными настройками xml для стоек, первым шагом должна стать проверка доступности JSP при запуске.
Ура, ребята.
6 ответов
Итак, я поместил login.jsp в неправильном месте в структуре папок моего веб-приложения. Это была ошибка
Добавьте нижеприведенное пустое действие к вам в файл struts.xml в "/"
пакет namespace, и он покажет index.html, когда вы только попытаетесь получить доступ к своему URL (например, appid.app.com), и он не покажет ошибку. Обычно это добавляет пустое действие, и механизм приложения перенаправляет пустое действие в ваш файл приветствия.
<action name="" class="com.candi.actions.Dashboard" method="noAction">
<result name="success">index.jsp</result>
</action>
Добавьте / в ваше пространство имен вместо /*:
<package name="default" namespace="/" extends="struts-default">
Или, если проблема не решена, вы можете использовать плагин Config Browser.
Плагин Config Browser - простой инструмент, помогающий просматривать конфигурацию приложения во время выполнения. Это очень полезно при отладке проблем, которые могут быть связаны с проблемами конфигурации.
Я изменил пространство имен в теге пакета на '/', и проблема решена!!!
Для меня я изменил открывающий тег файла web.xml с
<web-app>
в
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
Добавьте следующий пакет в struts.xml
<package name="default" namespace="/" extends="struts-default">
<action name="login"
class="training.struts.action.LoginAction">
<result>login.jsp</result>
</action>
</package>