Проблемы с подхватом рута с перехватчиком в стойках2
У меня есть перехватчик, который проверяет, вошел ли пользователь в систему, прежде чем выполнять запрошенное действие. Я попытался установить это как значение по умолчанию для всех действий. Для всех адресов, кроме одного, это работает как брелок. Когда я иду на мой корневой 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>
Я немного запутал имена классов на случай, если мой работодатель возразит.
2 ответа
Мне удалось выяснить это сам в конечном итоге.
Я протестировал запись простого вывода на консоль на этапе выполнения
<action name="index" class="**.map.MapAction">
Когда я открыл веб-страницу, в консоли не было напечатано ничего. Это заставило меня задуматься. Моя главная страница называлась index.jsp, и, очевидно, это имя обходит обычные элементы управления Struts. Изменение имени на index2.jsp решило проблему.
Возможно, есть место, где я мог бы изменить это поведение, но было проще просто изменить имя.
Ваш корневой URL может быть http://localhost:8080/map/, но пакет "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, и при изменении этого параметра выберите один или другой.