2016-11-17 2 views
3

Я новичок Struts2, я знаю, что этот вопрос задавали здесь много раз, но я попробовал чтобы решить эту проблему и прочитать здесь много потоков, потратьте 6 часов и до сих пор не можете заставить ее работать. На самом деле нужно больше предложения ...Struts2 Нет действия, сопоставленного для пространства имен [/] и имени действия [login], связанного с контуром пути [/ Struts2Test]

Вот мой пакет

Struts2Test 
    +Struts2Test/src 
    +tw.com.rrstudio.java.test 
     -TestAction.java 
    +Struts2Test/build 
    +Struts2Test/WebContent 
    +Struts2Test/WebContent/META-INF 
     +Struts2Test/WebContent/WEB-INF/classes 
     +Struts2Test/WebContent/WEB-INF/lib 
     -Struts2Test/WebContent/WEB-INF/spring-context.xml 
     -Struts2Test/WebContent/WEB-INF/spring-mvc.xml 
     -Struts2Test/WebContent/WEB-INF/struts.xml 
     -Struts2Test/WebContent/WEB-INF/struts2-action.xml 
     -Struts2Test/WebContent/WEB-INF/web.xml 
    -Struts2Test/WebContent/error.jsp 
    -Struts2Test/WebContent/index.jsp 
    -Struts2Test/WebContent/TestAction.jsp 

Мой web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>Struts2Test</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-context.xml 
     /WEB-INF/spring-mvc.xml 
    </param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    <init-param> 
     <param-name>actionPackages</param-name> 
     <param-value>tw.com.rrstudio.java.test</param-value> 
    </init-param> 
    </filter> 

    <jsp-config> 
    <taglib> 
     <taglib-uri>HTTP://java.sun.com/jsp/jstl/core</taglib-uri> 
     <taglib-location>/WEB-INF/lib/tld/c.tld</taglib-location> 
    </taglib> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group> 
    </jsp-config> 

    <filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <servlet> 
    <servlet-name>springmvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-mvc.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>springmvc</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
    <session-timeout>10</session-timeout> 
    </session-config> 

</web-app> 

А также, struts.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> 
<struts> 
    <!-- struts 2.3.16.3 has problem of security,needing to set DynamicMethodInvocation=false --> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="false" /> 

    <constant name="struts.objectFactory" value="spring" /> 

    <constant name="struts.action.extension" value="do"/> 
    <constant name="struts.action.excludePattern" value="/jsp/.*?,/image/.*?,/css/.*?,/js/.*?,.*\\.jsp"/> 

    <package name="default" extends="json-default" ></package> 

    <package name="Strut2Test" extends="json-default" > 
    <global-results> 
     <result name="SystemErrorPage">/WebContent/error.jsp</result> 
    </global-results> 
    <action name="login" class="tw.com.rrstudio.java.test.TestAction"> 
     <result name="index">/WebContent/index.jsp</result> 
     <result name="success">/WebContent/TestAction.jsp</result> 
    </action> 
    </package> 

</struts> 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=login.action"> 
<title>Index of Struts2Test</title> 
</head> 
<body> 
    <h1>Index of Struts2Test</h1> 
    <form action="testAction" method="post"> 
    <label for="name">Please enter your name</label><br/> 
    <input type="text" name="name"/> 
    <input type="submit" value="Say Hello"/> 
    </form> 
</body> 
</html> 

Сервер Tomcat 8.0.38, он начинается без ошибок. Но когда я достигаю

это дает мне это (как название) ошибка, и если я доступ

Я буду получить регулярный результат 404.

Теперь я понятия не имею, какие-либо предложения или советы приветствуются ...

+0

Почему вы смешивания Struts2 с Spring MVC? Попробуйте удалить любую ссылку Spring MVC из web.xml, также удалите параметр actionPackages из фильтра struts2 и прокомментируйте настройки SpringFactoryFactory. Также обратите внимание, что вам нужен struts2-spring-plugin для использования spring как objectFactory, в то время как SpringMVC не имеет к этому никакого отношения. –

+0

Потому что это моя компания сделала это, это существующая структура, которую они использовали годами. Мне нужно попробовать что-то об исправлении ошибок/новой функции, основанной на этой структуре. – RRTW

+1

Ну, ваш лучший снимок - это посмотреть на различия между вашей конфигурацией и (той же частью) конфигурации рабочего проекта на основе этой структуры. Особенно обратите внимание на файлы xml struts (я вижу, у вас их два, вы разместили только один). Но перед этой утомительной работой вы можете попробовать (добавить ее, если она еще не указана) [** config-browser-plugin **] (https://struts.apache.org/docs/config-browser-plugin.html) и ищите 'http: //127.0.0.1: 8080/Struts2Test/config-browser/actionNames.action': он точно скажет, что сопоставляется с тем, что в вашем веб-приложении. Стоит попробовать;) –

ответ

2

Вопросов, связанных с: Там нет действий отображаются для пространства имен и названия действия, связанное с путем контекста

Если вы используете url для вызова действия, убедитесь, что этот URL-адрес сопоставлен с конфигурацией расположений. Чтобы устранить проблему при сопоставлении URL-адресов, вы можете использовать плагин config-browser. Просто добавьте этот плагин в зависимости от проекта, и когда он будет развернут, вы можете получить доступ к веб-сайту, на котором показана конфигурация времени выполнения с доступными URL-адресами для вызова действия. Например, если вы работаете Tomcat на локальном порту 8080 и развертывания приложения на context, то вы можете получить доступ к URL плагина с

http://localhost:8080/[context]/config-browser/index.action 

Вы можете нажать какие-либо действия доступны на странице действий по пространству имен на боковая панель. Также обратите внимание, что если ваше действие не найдено на упаковке, оно может быть в пакете default. Struts делает дополнительный поиск в пространстве имен default для действия, которое не находится в пространстве имен, отображаемом из URL-адреса.


Отъезд config-browser плагин для конфигурации отладки вопросы.

Чтобы правильно отобразить URL-адрес действия, требуются два параметра: имя и пространство имен .

Struts загружает конфигурацию xml при запуске, и она должна знать местоположение местоположения struts.xml. По умолчанию он ищет путь к классу найти файл с известным именем, например struts.xml. Затем он анализирует документ и создает конфигурацию времени выполнения. Эта конфигурация используется для найти соответствующий элемент конфигурации для URL-адреса действия. Если такой элемент не найден во время запроса, код ошибки 404 возвращается : There is no Action mapped for namespace and action name.

Также это сообщение содержит пространство имен и имена действий, используемые для нахождения конфигурации действий. Затем вы можете проверить свои настройки конфигурации в struts.xml. Иногда имя действия и пространство имен, хранящиеся в ActionMapping указывают на неправильное действие. Эти значения определены ActionMapper, которые могут иметь различную реализацию, используя плагинами.

Существует еще одна настройка, которая может повлиять на отображение и отображение , но точка будет такой же, если вы получите это сообщение, а затем URL-адрес не отображал конфигурацию действий во время выполнения. Если вы не можете понять, какой URL-адрес вы должны использовать, вы можете попробовать плагин config-browser, чтобы просмотреть список доступных URL-адресов.


+0

Это помогает мне узнать мой реальный путь действия, спасибо. Теперь у меня есть еще 404 вопрос ...... – RRTW

Смежные вопросы

 Смежные вопросы