Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

14
respostas

Erro 404!

Eu ligo o servidor e na hora que eu entro na url "http://localhost:8080/casadocodigo/produtos" da o erro 404. A descrição do erro é "Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists." como se o servidor não fosse encontrado, Alguém poderia me ajudar??

14 respostas

Oi Rodrigo, tudo bem?

Posta aqui o código do seu ProdutosController e form.jsp, por favor.

package br.com.casadocodigo.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.casadocodigo.loja.dao.ProdutoDAO;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;

@Controller
public class ProdutosController {


    @Autowired
    private ProdutoDAO dao;

    @RequestMapping("/produtos/form")
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());

        return modelAndView;
    }

    @RequestMapping("/produtos")
    public String gravar(Produto produto){
        System.out.println(produto);
        dao.gravar(produto);
        return "/produtos/ok";
    }
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ="c" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais -
    Casa do Código</title>
</head>
<body>
    <h1>Casa do Código</h1>
    <form action="/casadocodigo/produtos" method="post">
        <div>
            <label>Título</label> <input type="text" name="titulo" />
        </div>
        <div>
            <label>Descrição</label>
            <textarea rows="10" cols="20" name="descricao"></textarea>
        </div>
        <div>
            <label>Páginas</label> <input type="text" name="paginas" />
        </div>

            <c:forEach items= "${tipos }" var = "tipoPreco" varStatus= "status"> </c:forEach> 

        <label>${tipoPreco }</label> 
        <input type="text" name="precos[${status.index }].valor" />
        <input type= "hidden" name= "precos[${status.index }].tipo" value= "${tipoPreco }">

        <button type="submit">Cadastrar</button>
    </form>
</body>
</html>

Posta também o AppWebConfiguration. Você criou o "WEB-INF/views/produtos/form/ok.jsp" ?

Sim criei "WEB-INF/views/produtos/form/ok.jsp", será que tem algo a ver com a versão do TomCat? Eu uso a versão 9 dele e também se teria algo a ver com o terminal.

segue o meu código do appWebConfiguration.

package br.com.casadocodigo.loja.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import br.com.casadocodigo.loja.controllers.HomeController;
import br.com.casadocodigo.loja.dao.ProdutoDAO;

@EnableWebMvc
@ComponentScan(basePackageClasses= {HomeController.class, ProdutoDAO.class})
public class AppWebConfiguration {

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix( ".jsp");
        return resolver;
    }

}

Será que é esse seu foreach??

            <c:forEach items= "${tipos }" var = "tipoPreco" varStatus= "status"> </c:forEach> 

Você abriu e fechou o forEach sem nada dentro e depois chamou a div que teoricamente utilizaria os dados do forEach. Tente algo parecido com:

<c:forEach items= "${tipos }" var = "tipoPreco" varStatus= "status"> 
    <label>${tipoPreco }</label> 
        <input type="text" name="precos[${status.index }].valor" />
        <input type= "hidden" name= "precos[${status.index }].tipo" value= "${tipoPreco }">
</c:forEach> 

Outra coisa que ia te perguntar é por qual motivo você está fazendo o acesso direto ao endereço "/produtos". Teoricamente essa página só serviria para salvar o produto.

Para cadastrar seria em "/produtos/form" e para visualizar a mensagem de sucesso seria "/produtos/ok"

Não é o for each, o que acontece é que parece que não encontra o servidor. Quando eu entro na url aparece essa mensagem na descrição do erro " The origin server did not find a current representation for the target resource or is not willing to disclose that one exists."

Vish, nao tenho certeza, mas pode ser algo com o Tomcat sim. Pode postar o ServletSpringMVC?

package br.com.casadocodigo.loja.conf;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer{

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {AppWebConfiguration.class, JPAConfiguration.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

Rapaz, copiei todos os arquivos que você postou e aqui funcionou. Tenho duas hipóteses:

  • Ou o problema está em um dos arquivos que você nao colocou aqui ainda (ex ProdutoDao, entity Produto, etc.)
  • Ou o problema vai ser no servidor mesmo. O problema só acontece nessa página?? se vc tentar acessar o produtos/form funciona normal??

Não o problema acontece em todas as páginas que eu tento entrar e não acontece. Nem na produtos/form não entra. Se o problema for o servidor tem como resolver??

Se for o servidor, o jeito mais garantido de resolver é vc seguir a configuração que ele faz no curso pra deixar igual.

Aconselho também tentar baixar um dos projetos que o instrutor disponibiliza entre os capítulos e tentar rodar. Deveria funcionar.

O meu servidor tá diferente também, o que mudou aqui foi o seguinte: ao invés dos arquivos de view estarem em 'src/main/webapp/WEB-INF' eles ficam em 'WebContent/WEB-INF'.

Posta aqui se conseguir resolver - só por curiosidade mesmo.

"Aconselho também tentar baixar um dos projetos que o instrutor disponibiliza entre os capítulos e tentar rodar. Deveria funcionar." Ja tentei com o que ele disponibiliza e não deu certo também. Dá o mesmo erro, não sei se tem a ver com terminal de comando, ou o forge que não deu certo.

Pois é, mas se fizer o download do projeto dele pronto era pra funcionar, pq aí nao tem necessidade de rodar o forge ou alterar alguma configuração. Rapaz, tirando o que sugeri, nao sei o que pode ser. Se quiser subir seu projeto eu posso tentar fazer o download e ver se dá algum erro pra mim.

Sim eu fiz o download do projeto e não funcionou, o que também pode ser é meu notbook que é antigo e pode ser que esteja interferindo no servidor. Realmente eu também não sei, já fiz de tudo aqui hahahaa