Развертывание приложения Struts2 без ContextPath

78
11

У меня есть приложение struts2, работающее под контекстом path/path на моем локальном tomcat без проблем. Когда я развертываю его на веб-сервере (используя прокси для перенаправления из http://www.domain.com "на" myserver: 8080/path/") Struts всевозможные странные вещи.


Во-первых, он включает контекст в -tags. Это может быть отключено атрибутом. Но, к сожалению, он также включает в себя путь в атрибутах действия моих форм, поэтому форма входа в систему указывает на " http://www.domain.com/path/login.action" вместо " http://www.domain.com/login.action"...


Есть ли возможность так как-то изменить контекст по умолчанию, который добавлен здесь, или отключить это для форм? (Я хотел бы сохранить -tags, только путь вокруг, похоже, будет использовать стандартные HTML-формы.) Спасибо заранее!

спросил(а) 2021-01-25T19:06:38+03:00 5 месяцев назад
1
Решение
77

Я обнаружил, что у других также была проблема, но разработчики структуры, похоже, не думают, что это проблема. Мои решения:


    use includeContext = "false" во всех s: url-tags
    вместо тега s: form, используйте обычную форму, установите действие в "actionname.action" и включите простую таблицу с tablerows() для каждого поля. Вы все еще можете использовать s: текстовое поле и т.д.
    К сожалению, сеансы HTTP больше не работают, поскольку они устанавливаются для пути "/path" (ApplicationPath). Это связано с файлом cookie, который сохраняет JSESSIONID, установленный в /path. Это означает, что ваши посетители будут получать только переменные сеанса, если они находятся в http://www.domain.com/path/login.action и что они будут потеряны, когда они будут перенаправлены обратно to http://www.domain.com/interestingstuff.action... мое решение - это взлом, который требует установки клиента cookie JSESSIONID через JavaScript, как описано здесь: Struts2: проблема сеанса (после обратного прокси)

Надеюсь, это поможет кому-то... если вы найдете более приятные решения, пожалуйста, дайте мне знать.: -)

ответил(а) 2021-01-25T19:06:38+03:00 5 месяцев назад
46

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


Приложением, над которым я работал, было добавление контекстно-зависимого типа. 'myContextRoot' на мой url на localhost, и он отлично работал там. Например, как указано выше, действие "myAction" становилось   http://localhost:8050/myContextRoot/myAction.action
Но как только я развернул его на сервере, он перестал работать, а после поиска, как ад, я нашел решение для меня. Я развертываю EAR файл на стеклянную рыбку, и там у нас есть файл application.xml. В application.xml у меня был тег "context-root", значение которого было "myContextRoot", которое я изменил на "/", и после этого я получил свой url, как на localhost, и

Надеюсь, что это может помочь:)

ответил(а) 2021-01-25T19:06:38+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема