10
respostas

Erro 404 no projeto Spring MVC

A não ser que eu acesse localhost:8080/casadocodigo/home.jsp, ele me retorna 404.

Segue as minhas classes até agora.

package br.com.casadocodigo.loja.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

    @RequestMapping("/")
    public String index() {
        System.out.println("Acesando a página inicial");
        return "home";
    }
}
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 };
    }

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

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

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

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

E no console ele não exibe a mensagem do System.out.println() que está no método index do HomeController.

Alguém poderia me ajudar?

10 respostas

Atualizando....

@RequestMapping("/")
    public String index() {
        System.out.println("Acessando a página inicial");
        return "home";
    }

Alguém?

Oi Naldson

Você tem o arquivo home.jsp dentro do diretório /WEB-INF/views/?

Outra coisa, pode nos mandar o log que aparece no terminal no startup da sua aplicação?

Olá, Rodrigo :).

Tenho o arquivo sim. Segue o log:

jul 20, 2016 7:01:56 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:casadocodigo' did not find a matching property.
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server version:        Apache Tomcat/8.0.35
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server built:          May 11 2016 21:57:08 UTC
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server number:         8.0.35.0
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: OS Name:               Linux
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: OS Version:            4.4.0-31-generic
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Architecture:          amd64
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Java Home:             /usr/lib/jvm/java-8-oracle/jre
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: JVM Version:           1.8.0_91-b14
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: JVM Vendor:            Oracle Corporation
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: CATALINA_BASE:         /home/naldson/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: CATALINA_HOME:         /opt/apache-tomcat-8.0.35
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dcatalina.base=/home/naldson/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dcatalina.home=/opt/apache-tomcat-8.0.35
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dwtp.deploy=/home/naldson/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Djava.endorsed.dirs=/opt/apache-tomcat-8.0.35/endorsed
jul 20, 2016 7:01:56 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dfile.encoding=UTF-8
jul 20, 2016 7:01:56 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
jul 20, 2016 7:01:57 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-nio-8080"]
jul 20, 2016 7:01:57 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMAÇÕES: Using a shared selector for servlet write/read
jul 20, 2016 7:01:57 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-nio-8009"]
jul 20, 2016 7:01:57 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMAÇÕES: Using a shared selector for servlet write/read
jul 20, 2016 7:01:57 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 3861 ms
jul 20, 2016 7:01:57 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
jul 20, 2016 7:01:57 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/8.0.35
jul 20, 2016 7:01:58 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
INFORMAÇÕES: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [169] milliseconds.
jul 20, 2016 7:02:01 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.
jul 20, 2016 7:02:01 PM org.apache.catalina.core.ApplicationContext log
INFORMAÇÕES: No Spring WebApplicationInitializer types detected on classpath
jul 20, 2016 7:02:01 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-nio-8080"]
jul 20, 2016 7:02:01 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-nio-8009"]
jul 20, 2016 7:02:01 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 3937 ms

Eu estou tendo o mesmo problema que você. A única diferença que fiz em relação as aulas foi que eu não criei o projeto pelo JBoss Forge e sim criei um projeto Maven normal.

Você conseguiu resolver?

Opa, verifiquei que seu log não foi inicializada a servlet do Spring.

Deveria aparecer a linha abaixo:

INFORMAÇÕES: Initializing Spring FrameworkServlet 'dispatcher'

Verifique todos os imports das suas classes de configuração, de um clean no Tomcat e tente novamente.

Abs!

Também não consegui passar da primeira aula, as configurações passadas não são suficientes para inicializar o spring. Acredito que alguma configuração deva ser realizada no web.xml.

Só consegui subir o dispatcher após colocar a seguinte configuração no arquivo web.xml:

<display-name>Spring Web MVC Application</display-name>

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>
             org.springframework.web.servlet.DispatcherServlet
        </servlet-class>

        <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value></param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

Porém, continuo com o erro 404. Não está sendo possível dar andamento ao curso.

Thiago, você gerou o projeto pelo JBoss Forge?

Pelo JBoss Forge eu consegui. Não consegui foi pelo Maven.

Olá,

Adicione a annotation @Configuration na classe AppWebConfiguration

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

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

A anotação é necessária para indicar que esta classe é de configuração do Spring MVC, conforme: http://docs.spring.io/spring-framework/docs/4.0.4.RELEASE/javadoc-api/org/springframework/context/annotation/Configuration.html

Espero ter ajudado!