Перенаправление в Struts 2 - PullRequest
       22

Перенаправление в Struts 2

0 голосов
/ 16 октября 2011

Я использую Struts 2 в своем веб-приложении.

Обычно фильтр Struts в моем приложении ищет * .do в шаблонах URL.

Теперь существует дополнительное требование; когда приложение набирает

       http://appname:port/login.jsp   

, решение о том, отображать или нет login.jsp, основано на бизнес-правилах.

Так что в идеале я должен отфильтровать этот шаблон URL и отправить его через действие Struts (назовем его LoginDecideAction).

Шаг 1 - добавить шаблон URL в шаблон URL фильтра в файле web.xml. Теперь, как мне сказать, что этот шаблон URL '* login.jsp' сопоставляется с LoginDecideAction?

Я новичок в Struts 2. Помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Есть несколько способов сделать это; Сначала я подробно остановлюсь на ответе Джеймса.

(хотя S2.0 сейчас довольно старый; вот текущий тег действия docs ).

Предоставьте файл login.jsp (т.е. не помещайте его в WEB-INF) и используйте тег <s:action> внутри него, чтобы запустить LoginDecideAction. Логика внутри действия определяет, что будет дальше, хотя использование техники executeResult="true" означает, что все, что произойдет, будет в URL-адресе login.jsp, если только у него нет JavaScript для установки местоположения окна.

IMO, это немного неуклюже (и я не большой поклонник тега action). Я бы предпочел, чтобы страница JSP немедленно перенаправила на действие, которое либо отображало страницу JSP, либо отображало другую страницу JSP, если бизнес-логика говорит, что это должно.

Вы могли бы предположительно делать то, что говорите, и S2 фактически обрабатывал запрос .jsp, устанавливая jsp как расширение, используя свойство struts.action.extension (см. default struts.properties файл документации для деталей . Но тогда вам нужно создать для него действие и, возможно, убедиться, что S2 и другие запросы .jsp не обработаны и т. Д. Вероятно, это не стоит.

1 голос
/ 16 октября 2011

Если вы можете отобразить свой login.jsp, добавьте тег s:action, чтобы вызвать действие Struts, которое может позаботиться о вашей бизнес-логике.Для отображения вида используйте executeResult="true".Для получения дополнительной информации о s: action см. Ссылку ниже:

http://struts.apache.org/2.0.14/docs/action.html

...