English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
java request.getSession(true/false/diferenças entre (null)
Motivo da Demanda
Na realidade, frequentemente nos deparamos com o seguinte3Uso na prática:
HttpSession session = request.getSession();
HttpSession session = request.getSession(true);
HttpSession session = request.getSession(false);
Diferenças
1. O documento oficial do Servlet diz:
public HttpSession getSession(boolean create)
Retorna a sessão atual do HttpSession associada a essa solicitação ou, se não há sessão atual e create é true, retorna uma nova sessão.
Se create for false e o pedido não tiver uma HttpSession válida, este método retorna null.
Para garantir que a sessão seja mantida corretamente, você deve chamar este método antes de comprometer a resposta. Se o Container estiver usando cookies para manter a integridade da sessão e for solicitado a criar uma nova sessão quando a resposta for comprometida, uma exceção IllegalStateException é lançada.
Parâmetros: true -para criar uma nova sessão para este pedido se necessário; false para retornar null se não houver uma sessão atual
Retorna: a HttpSession associada a este pedido ou null se create for false e o pedido não tiver uma sessão válida
2. A tradução significa:
getSession(boolean create) significa retornar a HttpSession atual do reqeust, se a HttpSession atual do reqeust for null, quando create for true, cria uma nova sessão, caso contrário, retorna null;
Em resumo:
HttpServletRequest.getSession(true) é equivalente a HttpServletRequest.getSession(); HttpServletRequest.getSession(false) é equivalente a se a sessão atual não existir, retornar null;
3. Uso
Quando se armazena ou recupera informações de login na sessão, geralmente é recomendado: HttpSession session = request.getSession();
Quando você obtém informações de login da Session, geralmente é recomendado: HttpSession session = request.getSession(false);
4. Uma maneira mais concisa
Se seu projeto usar Spring, as operações de session ficam muito mais fáceis. Se precisar obter valores da Session, você pode usar a ferramenta WebUtils (org.springframework.web.util.WebUtils) com o método WebUtils.getSessionAttribute(HttpServletRequest request, String name); Veja o código-fonte:
public static Object getSessionAttribute(HttpServletRequest request, String name){ Assert.notNull(request, "Request must not be null"); HttpSession session = request.getSession(false); return (session != null63; session.getAttribute(name) : null); }
Nota: Assert é uma ferramenta do pacote Spring, usada para avaliar operações de validação, neste exemplo usada para avaliar se reqeust está vazio, se estiver, lança exceção
Ao usar:
WebUtils.setSessionAttribute(request, "user", User); User user = (User)WebUtils.getSessionAttribute(request, "user");
Agradecemos a leitura, esperamos que ajude a todos, obrigado pelo apoio ao nosso site!