13
respostas

Aula 11 - HTTP Status 404 – Not Found (carrinho/add)

Estou com problema para adicionar um item no carrinho...

Ao clicar no botão para adicionar e "HTTP Status 404 – Not Found".

Já revisei todos e incluse comparei com outroscódigo que encontre aqui no forum mas ainda o problema persiste.

<form action='<c:url value="/carrinho/add"/>' method="post" class="container">
        <ul id="variants" class="clearfix">
        <input type="hidden" value="${produto.id }" name="produtoId"/>
        <c:forEach items="${produto.precos }" var="preco">
              <li class="buy-option" >
                <input type="radio" name="tipo" class="variant-radio" id="tipo" value="${preco.tipo }"  checked="checked"  />
                <label  itemscope class="variant-label" >${preco.tipo } </label>
                <small class="compare-at-price">${preco.valor}</small>
                <p class="variant-price">${preco.valor}</p>
              </li>    
        </c:forEach>           
        </ul>
        <button type="submit" class="submit-image icon-basket-alt" alt="Compre Agora" title="Compre Agora '${produto.titulo }'"></button>

CarrinhoComprasController:

package br.com.alura.loja.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.alura.loja.daos.ProdutoDAO;
import br.com.alura.loja.models.CarrinhoCompras;
import br.com.alura.loja.models.CarrinhoItem;
import br.com.alura.loja.models.Produto;
import br.com.alura.loja.models.TipoPreco;

@Controller
@RequestMapping("/carrinho")
public class CarrinhoComprasController {
    @Autowired
    private ProdutoDAO produtoDAO;

    @Autowired
    private CarrinhoCompras carrinho;

    @RequestMapping("/add")
    public ModelAndView add(Integer produtoId, TipoPreco tipoPreco){
        ModelAndView modelAndView = new ModelAndView("redirect:/produtos");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
        carrinho.add(carrinhoItem);
        return modelAndView;
    }

    private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipoPreco) {
        Produto produto = produtoDAO.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipoPreco);
        return carrinhoItem;
    }

}

CarrinhoCompras

package br.com.alura.loja.models;

import java.util.LinkedHashMap;
import java.util.Map;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION)
public class CarrinhoCompras {

    private Map<CarrinhoItem, Integer> itens = new LinkedHashMap<CarrinhoItem, Integer>();

    public void add(CarrinhoItem item){
        itens.put(item, getQuantidade(item) + 1);
    }

    private int getQuantidade(CarrinhoItem item) {

        if (!itens.containsKey(item)){
            itens.put(item, 0);
        }

        return itens.get(item);
    }

    public int getQuantidade(){
        // Expressão (proximo, acumulador) -> proximo + acumulador) "lambida" disponóvel no java 8 
        return itens.values().stream().reduce(0,  (proximo, acumulador) -> proximo + acumulador);
    }

}

CarrinhoItem

package br.com.alura.loja.models;

public class CarrinhoItem {
    private Produto produto;
    private TipoPreco tipoPreco;

    public CarrinhoItem(Produto produto, TipoPreco tipoPreco) {
        this.produto = produto;
        this.tipoPreco = tipoPreco;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public TipoPreco getTipoPreco() {
        return tipoPreco;
    }

    public void setTipoPreco(TipoPreco tipoPreco) {
        this.tipoPreco = tipoPreco;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((produto == null) ? 0 : produto.hashCode());
        result = prime * result + ((tipoPreco == null) ? 0 : tipoPreco.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CarrinhoItem other = (CarrinhoItem) obj;
        if (produto == null) {
            if (other.produto != null)
                return false;
        } else if (!produto.equals(other.produto))
            return false;
        if (tipoPreco != other.tipoPreco)
            return false;
        return true;
    }
}

Desde já obrigado!

13 respostas

Oi Alberto, tudo bem?

Eu acho que o problema esta no seu controller, pois voce esta mandando um POST, mas no controller esta mapeado como GET. Então deveria ficar assim:

@RequestMapping(value="/add",method=RequestMethod.POST)
    public ModelAndView add(Integer produtoId, TipoPreco tipoPreco){
        ModelAndView modelAndView = new ModelAndView("redirect:/produtos");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
        carrinho.add(carrinhoItem);
        return modelAndView;
    }

Espero ter ajudado

Olá Caio, obrigado pelo retorno.

Fiz a alteração que você mencionou só que agora não carrega nem a página principal.

ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:alura' did not find a matching property.

Será que corrompeu algo ?

Boa noite, Alberto! Como vai?

O Caio matou a charada! O seu problema era em relação ao método HTTP.

Mas, como na vida de todo programador, vc resolveu um e caiu em outro! Para que a gente possa te ajudar, cole aqui todo o log que vc obtem ao tentar acessar a página principal.

Blz Gabriel, segue abaixo.

mar 08, 2018 11:14:32 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:alura' did not find a matching property.
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server version:        Apache Tomcat/8.5.28
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server built:          Feb 6 2018 23:10:25 UTC
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server number:         8.5.28.0
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: OS Name:               Windows 10
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: OS Version:            10.0
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Architecture:          amd64
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Java Home:             C:\Program Files\Java\jre1.8.0_162
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: JVM Version:           1.8.0_162-b12
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: JVM Vendor:            Oracle Corporation
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: CATALINA_BASE:         D:\eclipse_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: CATALINA_HOME:         D:\ProgramasUteis\ServidoresWeb\apache-tomcat-8.5.28
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dcatalina.base=D:\eclipse_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dcatalina.home=D:\ProgramasUteis\ServidoresWeb\apache-tomcat-8.5.28
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dwtp.deploy=D:\eclipse_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Djava.endorsed.dirs=D:\ProgramasUteis\ServidoresWeb\apache-tomcat-8.5.28\endorsed
mar 08, 2018 11:14:32 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dfile.encoding=Cp1252
mar 08, 2018 11:14:32 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent

Mais uma parte.

INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_162\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre1.8.0_162/bin/server;C:/Program Files/Java/jre1.8.0_162/bin;C:/Program Files/Java/jre1.8.0_162/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;D:\opt\apache-maven-3.5.2\bin;C:\Users\Alberto Lima\AppData\Local\Microsoft\WindowsApps;C:\Users\Alberto Lima\AppData\Local\atom\bin;C:\eclipse;;.]
mar 08, 2018 11:14:33 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-nio-8080"]
mar 08, 2018 11:14:33 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMAÇÕES: Using a shared selector for servlet write/read
mar 08, 2018 11:14:33 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-nio-8009"]
mar 08, 2018 11:14:33 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMAÇÕES: Using a shared selector for servlet write/read
mar 08, 2018 11:14:33 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1924 ms
mar 08, 2018 11:14:33 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service [Catalina]
mar 08, 2018 11:14:33 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/8.5.28
mar 08, 2018 11:14:36 PM org.apache.jasper.servlet.TldScanner scanJars
INFORMAÇÕES: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
mar 08, 2018 11:14:36 PM org.apache.catalina.core.ApplicationContext log
INFORMAÇÕES: No Spring WebApplicationInitializer types detected on classpath
mar 08, 2018 11:14:36 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-nio-8080"]
mar 08, 2018 11:14:36 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-nio-8009"]
mar 08, 2018 11:14:36 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 2801 ms

Alberto, esse log é referente à inicialização do Tomcat e aparentemente a inicialização ocorreu com sucesso. Depois que o Tomcat é iniciado, tente acessar a página principal que vc disse que dá problema.

Se der o problema novamente, cole aqui o erro que ocorreu e o log do servidor.

Olá Gabriel, fiz o que indicou mas no console não apresenta erro a não ser o que passei antes. E ainda está com HTTP Status 404 – Not Found.

Pior que agora não abre mais nenhuma página,.. home, form, produtos nada

Boa tarde, Alberto! Como vai?

Vc tem como compartilhar o seu projeto no github e colar o link aqui para que eu possa dar uma olhada melhor nele e te ajudar de uma forma mais direta? Além disso, me diz qual a versão do Tomcat que vc está utilizando!

Estou com o Apache Tomcat/8. estranho andré que estava perfeito até o momento. apenas com problema no carrinho. Bom vou compartilhar no github pra ficar mais fácil. Desde já obrigado.

Alberto, aguardo vc compartilhar o seu projeto no github e colar o link aqui para que eu possa continuar a te ajudar!

Fala ai Gabriel, boa noite. Cara tentei subir no git mas não consegui. Estou tentado ai passo aqui pra.

Olá, Gabriel. Fiz merda no projeto. Estava tentando uar o GitHub mas ele acabou sobrescrevendo todo os arquivo que tinha. :(

Vc ao menos tem o link do projeto no github? Se vc conseguiu colocar ele lá antes de sobrescrever tudo deve dar pra recuperar.