Проблемы с отловом рута интерцептором в struts2

У меня есть intercetpor, который проверяет, вошел ли пользователь в систему, прежде чем выполнять запрошенное действие. Я попытался установить это по умолчанию для всех действий. Для всех адресов, кроме одного, это работает как шарм. Когда я перехожу к своему корневому URL-адресу "http://localhost:8080/map/", по какой-то причине перехватчик не срабатывает. Я предполагаю, что в struts.xml чего-то не хватает, но я не могу понять, что:

<struts>

    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources,DatabaseResources" />

    <package name="map" extends="struts-default">
        <interceptors>
            <interceptor name="loginintercept"
                class="se.contribe.intercept.LoginInterceptor" />
            <interceptor-stack name="defaultLoginStack">
                <interceptor-ref name="loginintercept" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="defaultLoginStack" />

        <default-action-ref name="index"></default-action-ref>

        <global-results>
            <result name="loginneeded">/login.jsp</result>
        </global-results>

        <action name="index" class="**.map.MapAction">
            <result>/index.jsp</result>
        </action>

        <action name="login">
            <result>/login.jsp</result>
        </action>

        <action name="loginInput" class="**.session.LoginAction">
            <result type="redirectAction">
                <param name="actionName">index</param>
            </result>
            <result name="input">/login.jsp</result>
            <result name="error">/login.jsp</result>
        </action>

        <action name="*" class="**.map.MapAction">
            <result>/index.jsp</result>
        </action>
    </package>

</struts>

Я немного запутал имена классов на тот случай, если мой работодатель будет возражать.


person Skadlig    schedule 20.04.2011    source источник
comment
Является ли запрос к localhost:8080/map вызовом вашего индексного действия? Если да, то какие перехватчики вызываются для этого запроса?   -  person Steven Benitez    schedule 20.04.2011


Ответы (2)


В конце концов мне удалось разобраться с этим самостоятельно.
Я протестировал запись простого вывода на консоль на этапе выполнения

<action name="index" class="**.map.MapAction">  

Когда я открыл веб-страницу, в консоли вывод не выводился. Это заставило меня задуматься. Моя главная страница называлась index.jsp, и, по-видимому, это имя обходит обычные элементы управления Struts. Изменение имени на index2.jsp решило проблему.
Вероятно, есть еще какое-то место, где я мог бы изменить это поведение, но было проще просто изменить имя.

person Skadlig    schedule 21.04.2011

Ваш корневой URL может быть http://localhost:8080/map/, но пакет "карта" относится к http://localhost:8080/map/map

Вероятно, вам нужен пакет, определенный для "/", который находится в корневом каталоге http://localhost:8080/map/. и вам может понадобиться пакет, определенный для "", который позволяет выполнять действия внутри любого пакета.

Редактировать: в приведенном выше примере я перепутал имя с пространством имен (кажется, слишком много использовал плагин соглашений!)

Я сильно подозреваю, что если вы проверите свой файл web.xml, вы найдете что-то вроде:

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

что, если вы изменили это на

<welcome-file-list>
    <welcome-file>index.action</welcome-file>
</welcome-file-list>

вы получите то, что ожидали, так как у меня могут быть как index.jsp, так и index.action, и изменение этого параметра позволяет выбрать один или другой.

person Quaternion    schedule 20.04.2011
comment
@Qyaternion Я думаю, вы говорите о пространстве имен пакета. Если ничего не указано, используется namespace=. Атрибут имени пакета - это просто имя, нет связи с URL-адресом, если не указано пространство имен. По крайней мере, так я понял из справочного руководства Apache. - person Skadlig; 21.04.2011