Bom dia colegas,
estou iniciando no desenvolvimento web com java e tenho uma dúvida…se eu estiver desenvolvendo um módulo de vendas, uma loja virtual por exemplo…quando o usuario escolher os itens, é mais aconselhavel eu ir guardando os itens numa sessao e resgatar só depois q ele finalizar a venda, ou é melhor eu ir guardando esses itens numa tabela temporario no meu banco de dados e manter o Id da venda na sessao, e assim q ele confirmar a venda eu pego os itens da tabela temporaria com o Id q estava na sessao e transporto para a tabela principal de venda?
Exemplo Loja Virtual
29 Respostas
Ola,
Eu acho melhor vc guardar isto em sessão…
concordo com o BrunoCarlo
ok, entao se o usuario escolher 5 itens por exemplo eu vou envia-los para um servlet q irá colocar numa sessao correto? e como eu pego esses cinco itens da sessao …eu so vi como pegar um ate agora q é assim:
HttpSession sessao = req.getSession( true );
String nomeString = (String) sessao.getAttribute(?valor?);
existe algum tipo de loop na sessão…como eu faço colegas?
obrigado, abraços.
Você pode colocar um Objeto na sessão, e recuperar esse objeto depois.
Abraços,
Humm… que tal ao inves de vc colocar na sessão o item em si vc colocar um conjunto?
Dae vc recupera o conjunto e adiciona um novo item a este conjunto…
no caso esse conjunto seria um objeto como o rodrigoK falou? pode ser um ArrayList ou um Vector…eu posso colocar esses objetos na sessão q é tranquilo? e eu uso o mesmo Session.setAtibute(objeto) ?
abracos.
no caso esse conjunto seria um objeto como o rodrigoK falou? pode ser um ArrayList ou um Vector…eu posso colocar esses objetos na sessão q é tranquilo? e eu uso o mesmoSession.setAtibute(objeto)?abracos.
Isto ae, é tranquilo.
blz BrunoCarlo, vou tentar essa dica…qualquer coisa eu retorno aqui…muito obrigado…abraços.
use o ArrayList ao inves do Vector ja que esse ultimo possui metodos sincronizados e isso deixa sua aplicacao um pouco mais lenta…
mas num contexto web seria muito bom ter uma coleção sincronizada, para evitar erros e problemas de concorrencia…
mas num contexto web seria muito bom ter uma coleção sincronizada, para evitar erros e problemas de concorrencia…
mas seria melhor ele sincronizar os metodos necessario e ate pq Vector, como StringBuffer nao garantem a sincronização de eficiente é melhor usar ArrayList e ele definir o que será realmente necessario ele synchronized
eu usei um List…fiz o seguinte (exemplo):
String valor = reqeust.getParamater("valor");
List<Classe> lista = new ArrayList<Classe>();
lista.add(new Classe(valor));
HttpSession sessao = req.getSession( true );
sessao.setAttribute("itens",lista);
agora eu encontrei uma dificuldade…eu quero dar um loop no List criado com base na classe (Classe) que usei para cria-lo, eu ja dei o sessao.getAttribute…como eu faço esse loop no List com base na classe atribuida?
obrigado, abraços?
Op,a
Blz, tá indo muito bem… vamos lá, so vc recuperar o List e for nele:
List<Classe> list = (List<Classe>)session.getAtribute("itens");
//pode ser assim:
for(Classe classe : list){
...
}
//ou asssim
for(int x=0;x<list.size();x++){
Classe classe = list.get(x);
...
}
blz BrunoCarlo e colegas, vcs ajuram muito mesmo…muito obrigado, abraços. t+ 
colegas, funcionou as dicas q vcs me deram…mas agora surgiu uma pequena dúvida…primeiro vou posta o exemplo de teste q estou usando:
é um teste simples, só para ver como funciona esse esquema de sessão, ele joga e ja pega os dados da sessão e imprime numa table
import br.com.Bean.ClasseTeste;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletTeste extends HttpServlet {
List<ClasseTeste> list = new ArrayList<ClasseTeste>();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
try {
String cmd = request.getParameter("cmd");
if (cmd.equalsIgnoreCase("adc")){
String nome = request.getParameter("nome");
String tel = request.getParameter("tel");
String end = request.getParameter("end");
list.add(new ClasseTeste(nome,tel,end));
session.setAttribute("itens", list);
List<ClasseTeste> listItens = new ArrayList<ClasseTeste>();
listItens = (List<ClasseTeste>) session.getAttribute("itens");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ServletTeste</title>");
out.println("</head>");
out.println("<body>");
out.println("<table border='1'>");
for(ClasseTeste classeTeste : listItens){
out.println("<tr>");
out.println("<td>"+classeTeste.getNome()+"</td>");
out.println("<td>"+classeTeste.getTel()+"</td>");
out.println("<td>"+classeTeste.getEnd()+"</td>");
out.println("</tr>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
} finally {
out.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
a minha dúvida é a seguinte…acho q deve ser uma pergunta meio besta, mas me perdoe, sou leigo no assunto… como vcs viram eu adicionei os dados vindos da pagina.jsp em um List e depois coloquei na sessão e assim vai indo, add um, dois, tres itens…no caso desse List que está no Servlet, é criado um para cada usuário certo? ou esse List acaba sendo compartilhado o mesmo para todos os usuários e aí vou ter problemas de ter itens de um usuario q nao é dele?
Ola, Em relação a pergunta a resposta é : ERRADO.
O servlet é compartilhado, então vc tem que fazer nas linhas 31 a 35:List<ClasseTeste> list = (List<ClasseTeste>) session.getAttribute("itens");
if(list == null){
list = new ArrayList<ClasseTeste>();
session.setAttribute("itens", list);
}
list.add(new ClasseTeste(nome,tel,end));
//apartir daqui pq vc não imprimi direto o list???
a minha dúvida é a seguinte…acho q deve ser uma pergunta meio besta, mas me perdoe, sou leigo no assunto… como vcs viram eu adicionei os dados vindos da pagina.jsp em um List e depois coloquei na sessão e assim vai indo, add um, dois, tres itens…no caso desse List que está no Servlet, é criado um para cada usuário certo? ou esse List acaba sendo compartilhado o mesmo para todos os usuários e aí vou ter problemas de ter itens de um usuario q nao é dele?
Só pra complementar melhor,
A especificação não garante que só havera um unico,mas tb naõ garante quantos, servlets irão viver, então os recursos deste servlet, atriubutos e tals, tem que ser planejado para que não ocorram erros de concorrencia… por isto vc não pode colocar a lista de itens como um atributo do seu servlet, ele será compartilhado, isto é certo.
ok, BrunoCarlo, entendi, desculpe a pergunta, ams eu estou aprendendo programacao web…eu fiz da seguinte maneira, mudou um pouco a maneira q vc postou, mas eu testei em dois micros aqui e funcionou…dá uma olhada:
public class ServletTeste extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
try {
String cmd = request.getParameter("cmd");
if (cmd.equalsIgnoreCase("adc")){
String nome = request.getParameter("nome");
String tel = request.getParameter("tel");
String end = request.getParameter("end");
List<ClasseTeste> list = (List<ClasseTeste>) session.getAttribute("itens");
if(list==null){
list = new ArrayList<ClasseTeste>();
//session.setAttribute("itens", list);
}
list.add(new ClasseTeste(nome,tel,end));
session.setAttribute("itens", list);
/* List<ClasseTeste> listItens = new ArrayList<ClasseTeste>();
listItens = (List<ClasseTeste>) session.getAttribute("itens");*/
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ServletTeste</title>");
out.println("</head>");
out.println("<body>");
out.println("<table border='1'>");
for(ClasseTeste classeTeste : list){
out.println("<tr>");
out.println("<td>"+classeTeste.getNome()+"</td>");
out.println("<td>"+classeTeste.getTel()+"</td>");
out.println("<td>"+classeTeste.getEnd()+"</td>");
out.println("</tr>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
} finally {
out.close();
}
}
}
é isso mesmo? está ok agora?
Assim tb ficou maneiro, parabens.
Em relação a pergunta, não precisa pedir desculpas não… estamos aqui pra aprender mesmo 
valew colega…eu andei olhando uns tutoriais (http://www.guj.com.br/content/articles/jsf/jsf.pdf) aqui no guj sobre JSF e vi que com ele nao dá pra acessar um Servlet, mas a maneira que ele trabalha é parecido com um Servlet, é a mesma ideia ne…o q vc acha sobre JSF, vc utiliza? é melhor que usar JSP com Servlet?
Seguinte, estes frameworks sao bem interessantes, eu nao conheco a fundo JSF, mas sei que e um projeto bem maduro, que faz a parte MVC da coisa, tem componentes, trabalha legal com Ajax… enfim, bem legal mesmo, vale aprender sim… mas aconselharia vc primeiro pegar uma otima nocao de como e o funcionamento da arquitetura primeiro.
sim, eu estou dando uma olhada, tem bastante coisa num livro que comprei e tbm baixei alguns tutores da internet…mas assim, pelo que vi em relacao a desenvolvimento web com java ja vi jsp com servlet e tbm com jstl, jsf, visual web jsf…ou seja tem amis de uma maneira pra desenvolver…o q eu gostaria era um conselho, por onde seguir, o que é mais utilizado hj em dia pelos desenvolvedores…o q é melhor…abraços colega.
Então, geralmente vejo pessoal falar bastante, e anuncio de vagas e tal:
Structs, 1 e 2; (MVC)
JSF (MVC)
Ajax, (VIEW)
JPA (Persistencia)
HIBERNATE (Persistencia)
Mas como te disse, e repito, se vc dominar legal o básico (JSP, Servlet, JSTL, Filters e tals) vc aprende estes frameworks em questão de semanas…
ta certo entao…era isso q eu queria saber…vlw BrunoCarlo, t+ abraços.
Nem tanto é questão de semanas. Há frameworks que necessitam de tempo, como o Hibernate. Você pode aprender o básico em algumas semanas, mas quando pega um projeto cabeludo, percebe que num sabe nada.
Eu diria que o SPring é o mais fácil, porém, não o mais simples.
O JSF tem coisa pra dedel em relação ao seu domínio. E não precisa saber JSP para saber JSF, basta Servlets, que acho o caminho mais lógico.
Struts ainda tem muito serviço legado, vivo dando manutenção nele. Mas projetos novos é tudo JSF.
Nem tanto é questão de semanas. Há frameworks que necessitam de tempo, como o Hibernate. Você pode aprender o básico em algumas semanas, mas quando pega um projeto cabeludo, percebe que num sabe nada.
Eu diria que o SPring é o mais fácil, porém, não o mais simples.
O JSF tem coisa pra dedel em relação ao seu domínio. E não precisa saber JSP para saber JSF, basta Servlets, que acho o caminho mais lógico.
Struts ainda tem muito serviço legado, vivo dando manutenção nele. Mas projetos novos é tudo JSF.
Opa, uma opnião de um colega que vive no meio, sempre válida… eu tõ a um tempo só na parte de servidores, não mexo muito com web…
entao o colega djemacao indica JSF, acha que é o melhor caminho?
só que eu nao consigo trabalhar com Servlet utilizando JSF…consigo?
Não diria que JSF é o melhor caminho, mas o que mais tem mercado para trabalho. Struts é necessário aprender, porque vira e mexe pinta serviço desse negócio, geralmente manutenção. A menos que a empresa que trabalhe esteja especificamente focada em um determinado framework, é bom saber.
O Servlet, pra mim, é a raiz de tudo. Você pode trocar informações de Servlets com JSF, embora não vejo necessidade. O JSF é completamente independente se quiser, porém, os Servlets tem certas características que você pode querer aproveitar, como filtros e listeners. Mas o JSF tem seus próprios meios de trabalho.
Tem outros frameworks que gostei de aprender, como o Wicket e o Grails. Ambos são bons e precisam ser mais populares, pois muitas empresas estão começando a usar Struts 2, por causa do Struts 1, embora somente o nome seja igual.
Como vê, há muito a se aprender, mas como foco, pode ficar com Servlets e JSF como apresentação, Hibernate como ORM (com o uso de JPA é interessante) e se puder, conhecer o básico do Spring ajudaria muito (muitas coisas que os EJBs fazem, o Spring tb faz).
legal, bom saber de tudo isso…mas tem um seguinte…eu andei olhando num livro q comprei a parte de JSF…neste livro tem um pouco de td, JSF, JSP com Servlet, Struts, Spring e Hibernate, EJB…eu gostei muito de JSP com Servlet, é um negocio bem tres camadas e é como eu trabalho meus sistemas em delphi (sistemas desktops) …porém gostei tbm de JSF e no livro diz q a Sun recomenda o uso de JSF e diz que é mais rapido que JSP, mas eu nao consegui fazer JSF com Servlet, fazer ele enviar chamadas para o Servlet como em JSP e no livro tbm nao mostra isso…vc poderia me indicar um link de algum tutor mostrando isso…uns colgas me falaram q nao tem como fazer JSF com Servlet, disseram que JSF é MVC, é a pagina com os seus controllers e blz…vc poderia me dar essa ajuda?
muito obrigado, abracos.