В Struts2 HOWTO обрабатывать URL-адрес с тем же пространством имен, но с или без конечной косой черты аналогично - PullRequest
2 голосов
/ 02 апреля 2012

В Struts2 я пишу приложение, в котором мне нужно убедиться, что перенаправление URL работает одинаково, независимо от того, есть ли в конце косая черта.

Например, example.com/app должен вести себя так же, какесли пользователь ввел example.com/app/.В настоящее время я изменил отображение в struts.xml следующим образом -

<struts>
    <package name="default" namespace="/" extends="secure">
        <interceptors> ... <interceptors>

        <action name="app">
            <result type="redirectAction">/app/</result>
        </action>
    </package>
</struts>

и

<struts>
    <package name="app" namespace="/app" extends="secure">
        <interceptors> ... <interceptors>

        <action name="" class="com.example.action.app.LoginAction" method="display">
        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>
        <interceptor-ref name="basic" />

        <result type="redirectAction">home</result>
        <result name="display">/jsp/base/content/login/loginForm.jsp</result>
    </action> 
</package>
</struts>

Но это кажется хакерским, поскольку, если я перейду к example.com/app, он покажет example.com//app/.html вURL.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 апреля 2012

Ответ был получен в комментариях под ответом.

Quaternion:

Лично я написал бы все свои URL без косой черты ...и затем я использовал бы что-то внешнее для приложения, чтобы переписать URL-адреса соответствующим образом, возможно, iptables мог бы определить, есть ли косая черта, и если это так, всегда убирать это.

Мохана Рао SV:

Как указано выше, следуйте без косой черты.И переопределите StrutsPrepareAndExecuteFilter, одно из заданий фильтра является URL-адресом, по которому оно должно идентифицировать пространство имен и имя действия, и вызвать соответствующее действие.Поэтому здесь удалите косую черту из URL.

Quaternion:

В пространстве имен "/" у вас есть действие, которое называется app.Это все, что нужно для вызова CONTEXT_ROOT / app (это то, что ожидает struts2), вы никогда не ожидаете увидеть «/» в конце URL, поэтому вы хотите найти метод, который анализирует URLдо Struts2 разрешает сопоставление.То, что вы описали, требует только чего-то, чтобы удалить завершающий символ "/", если он существует.Я бы посмотрел на iptables, потому что я использовал его раньше или какое-то другое средство переписывания URL-адресов ... Махана оставил бы все это в веб-приложении и использовал бы фильтр, методы отличаются, но эффект тот же.

...