Estou com uma dúvida e preciso muito da ajuda de vocês, eu tenho um JSP chamada perfil (perfil.jsp) e gostaria que a mesma carregasse as informacoes do usuário quando eu passasse, por exemplo: perfil.jsp?id=1 e ele carregasse diretamente as informações do usuário. como eu posso fazer isso?
eu consigo passando para o servlet diretamente, mas gostaria que o jsp chamasse o servlet “internamente” e completasse a página
Alguma ideia?
Resumindo: eu preciso enviar um parâmetro que indica o usuário para uma servlet. A servlet busca os dados, carrega os dados em atributos e retorna para a JSP.
A melhor maneira de fazer o que você citou, é de fato passando pelo Servlet antes (Leia sobre MVC).
ex:
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){UsuarioModelUsuarioModel=newUsuarioModel();// dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ...Usuariousuario=usuarioModel.findById(Integer.parseInt(request.getParameter("id")));request.setAttribute("usuario",usuario);request.getRequestDispatcher("suaJSP.jsp").forward(request,response);}
então deveria ser assim o fluxo: chamar o servlet diretamente passando o ID, e, em seguida, o servlet redireciona para o JSP?
eu não devo acessar um JSP antes de um Servlet?
porque dessa maneira eu chamo o servlet direto…
B
brshell
alguem? não consigo encontrar exemplos assim…
F
FelipeThi
WRYEL:
A melhor maneira de fazer o que você citou, é de fato passando pelo Servlet antes (Leia sobre MVC).
ex:
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){UsuarioModelUsuarioModel=newUsuarioModel();// dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ...Usuariousuario=usuarioModel.findById(Integer.parseInt(request.getParameter("id")));request.setAttribute("usuario",usuario);request.getRequestDispatcher("suaJSP.jsp").forward(request,response);}
nesse exemplo eu acesso direto Servlet e depois ele me manda pra JSP.
o certo não seria uma JSP chamar o serlvet e depois retornar uma jsp?
F
FelipeThi
isso…sua jsp, vai chamar a servlet e vai retornar…
brunojf
Você também pode usar um AJAX no onRead que chama o controlador e carrega tudo antes e vc seta as informações na página .
Isso vai resolver o “problema” de não chamar o servlet de cara.
WRYEL
Model (Classe java de negócio) View (JSP) Controller (Classe java - Servlet)
Sua View manda dados para o Controller, que toma decisões de acordo com os dados recebidos da View.
Seu Controller aciona seu Model passando os dados que são necessários para executar a ação.
Seu Controller recebe recebe do model o resultado da ação acionada.
Seu Controller encaminha o resultado para a View (Jsp)
baseado nas ideias acima, suponha que você tenha um servlet UsuarioController mapeado para: /usuarioController, logo, seu link poderia ser:
publicclassUsuarioControllerextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){Stringacao=request.getParamater("acao");if("info".equals(acao)){UsuarioModelUsuarioModel=newUsuarioModel();// dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ... Usuariousuario=usuarioModel.findById(Integer.parseInt(request.getParameter("id")));// acao de negóciorequest.setAttribute("usuario",usuario);// atributo para view ...request.getRequestDispatcher("informacoesUsuario.jsp").forward(request,response);//encaminha para a View responsavel}elseif("delete".equals(acao)){UsuarioModelUsuarioModel=newUsuarioModel();// dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ... usuarioModel.deleteById(Integer.parseInt(request.getParameter("id")));// acao de negóciorequest.setAttribute("mensagem","Usuario deletado com sucesso");// atributo para view ... request.getRequestDispatcher("usuarioDeletado.jsp").forward(request,response);//encaminha para a View responsavel}}}
ficou mais claro agora ?
B
brshell
muito obrigado. ficou mais claro!
então quando eu tenho uma aplicação com um link fixo (no caso o perfil de um usuario), o link de acesso sempre vai ser o servlet direto? pois eu preciso carregar a pagina na hora… nao existe um JSP antes, só após o servlet?
achava que eu precisava ter um jsp que chamasse o servlet sempre.