2016-05-27 7 views
1

У меня есть 2 @RequestMapping в классе контроллера, оба из которых имеют HttpSession httpSession.Объявить HttpSession глобально в классе Controller?

Можно ли объявить HttpSession httpSession глобально, чтобы я мог объявить HttpSession один раз и может использоваться в нескольких функциях?

@Controller 
public class ControllerClass{ 

    @RequestMapping(value="/sectionsAjax", method=RequestMethod.POST) 
    public @ResponseBody String sectionsAjax(HttpSession httpSession){ 
     // Code 
    } 

    @RequestMapping(value="loadAjax", method=RequestMethod.POST) 
    public @ResponseBody String sectionsAjax(HttpSession httpSession){ 
     // Code 
    } 
} 

ответ

1

Не работает в контексте запроса, вы не можете иметь не HttpSession доступны. Даже в контексте запроса может (пока) не создаваться сеанс.

Что может поместиться в вашем случае (хотя это не лучше вашего текущего подхода) использует весну RequestContextHolder.

Что-то вроде

public static HttpSession getHttpSession() { 
    ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 
    return attr.getRequest().getSession(true); 
} 

всегда будет работать (после добавления чек на getRequestAttributes не возвращаются null) в контейнере сервлетов (создание сеанса, если его нет).

Чтобы немного расширить, как вы спросили об инъекции (или «глобальном объявлении») HttpSession в ваш контроллер. Контроллеры Spring (т. Е. Лежащие в основе объекты Java) - очень долгоживущие одноэлементные объекты, имеющие так называемый «Singleton scope». Сеанс является объектом «области сеанса», поэтому его нельзя напрямую вводить в контроллер (зависимость должна быть одинаковой или более продолжительной). Можно использовать прокси (имеющие в этом случае одноточечную область) разрешающие значения, например, объем сессии; но это не стоит хлопот в вашем случае. Для получения дополнительной информации см. Очень вескую рекомендацию весны, в частности, в главе Bean scopes.

0

Я думаю, что вы можете autowire в HttpSession в контроллере:

@Autowired 
private HttpSession session; 
+0

ya Я пробовал, но его предоставление HTTP-статуса 404 в браузере –

+0

404 в браузере? Любой стек? – codependent

+0

org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем 'ajaxFunctions': не удалось выполнить инъекцию автоуведомленных зависимостей; –