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!

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!