Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Servidor não encontra a página do formulário

Quando tento acessar o link " http://localhost:8080/casadocodigo/produtos/form " o seguinte erro aparece: HTTP Status 404 – Not Found Type Status Report

Message /casadocodigo/produtos/WEB-INF/views/produtos/form.jsp

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/9.0.5

Não sei se é isso mas na mensagem logo depois do /casadocodigo/ tem um produtos/. Era pra ter isso? já olhei na minha classe de configuração, pra mim está tudo correto, ele até entra no método porém não está exibindo o formulário de produtos. Segue as classes:

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

@Controller
public class ProdutosController {

    @Autowired
    private ProdutoDAO produtoDao;

    @RequestMapping("/produtos/form")
    public String form() {
        System.out.println("Entrando em método FORM");
        return "produtos/form";
    }

    @RequestMapping("/produtos")
    public String gravar(Produto produto) {
        System.out.println(produto);
        this.produtoDao.gravar(produto);
        return "produtos/ok";
    }
}
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.daos.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;
    }
}
3 respostas

Fiz uma alteração como teste. Troquei o:

@RequestMapping("/produtos/form")
    public String form() {
        System.out.println("Entrando em método FORM");
        return "produtos/form";
    }

por:

@RequestMapping("/form")
    public String form() {
        System.out.println("Entrando em método FORM");
        return "produtos/form";
    }

Com essa alteração consigo acessar o formulário. Pelo visto está dando conflito no mapeamento de url's parecidas. Alguém pode me dizer se isso é para acontecer ou é normal? Pois segui exatamente como o instrutor fez.

solução!

Entendi o que aconteceu. Se no @RequestMapping eu colocar duas palavras separadas por "/" ele adiciona a anterior entre o nome do projeto e o /WEB-INF. Isso era pra acontecer? E se eu quiser montar uma url com mais de uma palavra como foi feito no curso que estou fazendo?

Opa,

Da uma olhadinha na linha:

  resolver.setPrefix("WEB-INF/views/");

troca para:

  resolver.setPrefix("/WEB-INF/views/");

Acreduto que teu problema é a falta da "/" inicial, com isso, o spring ta se perdendo.