Struts2 - Проблемы с сессиями - PullRequest
       13

Struts2 - Проблемы с сессиями

0 голосов
/ 11 декабря 2010

Я делаю (спасибо некоторым пользователям на этом портале) мое приложение, которое реализует SessionAware.

Это мой фактический код:

public class UserManager extends ActionSupport implements SessionAware {
    private Map<String, Object> session;

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public void setSession(Map<String, Object> map) {
        this.session=map;
    }

    public String checkLogin() {        
        session.put("loggedOn", true);
        return SUCCESS;
    }

    public String checkLogout() {
        session.clear();
        return SUCCESS;
    }
}

И я проверяю эти переменные в моем .jsp:

<s:if test="#session['loggedOn']!=true">
    DIV LOGIN
</s:if>
<s:else>
    DIV LOGOUT
</s:else>

Простой кусок кода.

Что я хотел бы знать, так это:

1 - бин (по умолчанию) ограничен запросом.Поэтому, когда запрос закончен, он будет уничтожен.Но я вижу, что, когда я помещаю переменную в карту, она все еще жива на сервере.Как это возможно?Является ли переменная моего Бина.

2 - Кто вызывает метод setSession?Я думаю, что сервлет, из-за того, что я реализую этот интерфейс?

3 - я хотел бы отсоединиться о сохранении объекта / бина на объекте сеанса.Я хотел бы использовать сферу действия Bean (как для любого вида инфраструктуры MVC).Как я могу сделать это на Struts2?

Надеюсь, вы сможете прояснить эти вопросы :) Cheers

1 Ответ

3 голосов
/ 12 декабря 2010

1) Ваш bean-компонент - это действие struts2, поскольку оно является областью действия (что является более ограничивающей областью действия, чем запрос). Я говорю, что действие является меньшей областью действия, поскольку вы можете переслать действие другому действию, и в этом случае предыдущее действие выходит за пределы области действия, однако объекты с областью запроса остаются в области действия до тех пор, пока запрос не будет обработан. Когда вы реализуете SessionAware, вам предоставляется ссылка на SessionObject, после чего вы помещаете свой объект в объект Session, срок жизни которого намного больше, чем ваше действие. Очистите кеш браузера, чтобы удалить значение сеанса ... вы также можете удалить их по коду, внедрив SessionAware и удалив значение из карты.

2 - сеанс уже существует. Вы можете получить сеанс и добавить ключи, но даже если вы ничего не положите в него, он будет там для использования.

3 - У вас уже есть вопрос по этой теме, смотрите мой ответ там.

...