O titulo é auto-explicativo, agradeço a atenção e boa vontade de todos.
Como obter a instância corrente de um HttpServletRequest fora de um servlet?
8 Respostas
Por que tu não passa o HttpServletRequest como parâmetro através do teu servlet pra classe que está chamando?!
Se isso não for a solução, poderia dar um exemplo mais prático? Porque na verdade, não tem lógica tu querer pegar o Request sem que o cliente faça uma requisição. A “porta de entrada” pra requisição é o próprio servlet (pelo doGet, doPost etc), a partir daí é possível pegar o Request e ir passando pra quem tu quiseres.
Por que tu não passa o HttpServletRequest como parâmetro através do teu servlet pra classe que está chamando?!Se isso não for a solução, poderia dar um exemplo mais prático? Porque na verdade, não tem lógica tu querer pegar o Request sem que o cliente faça uma requisição. A “porta de entrada” pra requisição é o próprio servlet (pelo doGet, doPost etc), a partir daí é possível pegar o Request e ir passando pra quem tu quiseres.
A situação é a seguinte:
Via aspectos, quero interceptar o “new” num determinado objeto e setar um atributo nele que está presente APENAS na sessão. Logo, preciso acessar a sessão de dentro de um aspecto… entendeu?
=)
obs: tbm tah valendo se tiver uma forma de se obter esse carinha via Spring

nossa, mas :O… caramba…
tá, tu tá usando aspectj ou spring aop?
e outra: quando esse objeto é criado? Vale lembrar que, o objeto request, como falado anteriormente, só vai existir se houver uma requisição http
nossa, mas :O… caramba…tá, tu tá usando aspectj ou spring aop?
e outra: quando esse objeto é criado? Vale lembrar que, o objeto request, como falado anteriormente, só vai existir se houver uma requisição http
Leozin, pq espanto? Uso o Spring AOP, mas o provider eh o AspectJ. Eu apenas quero a instancia corrente de um objeto de sessão quando eu precisar, fora do contexto de servlets. Este objeto é criado pelo container web e estou ciente disso. Eu andei pesquisando e vi algumas coisas relacionadas com a classe ThreadLocal (neste caso ele armazena uma thread a sessão corrente e atualiza a cada requisição, aí, para recuperar, basta acessar a thread e solicitar o ‘get’, mas ainda não é isso que eu queria…)…
valeu!
To um pouco espantado assim, por querer fazer de algo simples um bixo de 7 cabeças, usando AOP, instanciar na construção de outra classe etc. Será que é realmente necessário fazer tudo isso?
Tipo, tu poderias também colocar um listener do session na hora que ele é criado pra tu poderes colocar em outra classe, tu já tentou?
A fonte da sessão pouco importa (se será de um listener ou de um filtro), claro que listener ficaria melhor, mas isso tudo depende da versão do servlet container. De todo modo, descobri como fazer usando Spring:
Vamos considerar que o cliente está usando servlet 2.4+, logo, utilizaremos um listener:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
E um bean que armazenará a sessão:
public class BeanWithASession {
public BeanWithASession(HttpSession session) { ...
...
}
registramos este bean no contexto do spring com escopo de sessão:
<bean autowire="autodetect" class="BeanWithASession" scope="session"/>
criamos um listener que recupera este bean gerenciado pelo spring e seta a sessão a cada vez que a sessão for criada…
então, para se obter a sessão de dentro do aspecto, basta acessar este bean gerenciado pelo Spring e dar um getXPTOSession()…
Depende do objetivo.
Por exemplo, se voce precisa deste objeto só pra testar, Mocka ela.
De uma olhada em Mock Object.