Exemplo Loja Virtual

29 respostas
T

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?

29 Respostas

B

Ola,

Eu acho melhor vc guardar isto em sessão…

G

concordo com o BrunoCarlo

T

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.

rodrigoK

Você pode colocar um Objeto na sessão, e recuperar esse objeto depois.

Abraços,

B

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…

T

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.

B

tap_pedroso:
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.

Isto ae, é tranquilo.

T

blz BrunoCarlo, vou tentar essa dica…qualquer coisa eu retorno aqui…muito obrigado…abraços.

LPJava

use o ArrayList ao inves do Vector ja que esse ultimo possui metodos sincronizados e isso deixa sua aplicacao um pouco mais lenta…

B

mas num contexto web seria muito bom ter uma coleção sincronizada, para evitar erros e problemas de concorrencia…

LPJava

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

T

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?

B

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); ... }

T

blz BrunoCarlo e colegas, vcs ajuram muito mesmo…muito obrigado, abraços. t+ :smiley:

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?

B

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???
B

tap_pedroso:

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.

T

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?

B

Assim tb ficou maneiro, parabens.

Em relação a pergunta, não precisa pedir desculpas não… estamos aqui pra aprender mesmo :wink:

T

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?

B

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.

T

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.

B

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…

T

ta certo entao…era isso q eu queria saber…vlw BrunoCarlo, t+ abraços.

D

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.

B

djemacao:
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…

T

entao o colega djemacao indica JSF, acha que é o melhor caminho?

só que eu nao consigo trabalhar com Servlet utilizando JSF…consigo?

D

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).

T

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.

Criado 4 de agosto de 2008
Ultima resposta 11 de ago. de 2008
Respostas 29
Participantes 6