Problema com Spring MVC - FJ21 projeto-tarefas

Fala galera.

Sou novo aqui, e gostaria muito de pedir ajuda de vocês.

Comecei a estudar java para web pelas apostilas da caelum, e estou enfrentando um problema.
Após terminar todas as etapas de implementação da classe OlaMundoController para o spring mvc, e setar corretamente o spring-context.xml e web.xml, sempre que vou acessar a url para visualizar a aplicação, recebo erro 404 com a seguinte descrição: The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Já verifiquei se o projeto estava setado para rodar no servidor e está tudo certinho.

Algúem saberia me ajudar?

Apenas para informações adicionais, no meu console, eu tenho o seguinte log:
SEVERE: Servlet [springmvc] in web application [/fj21-tarefas] threw load() exception
java.lang.ClassNotFoundException: >org.springframework.web.servlet.DispatcherServlet
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1109)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:508)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:489)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1050)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4921)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5231)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1439)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1439)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:656)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

Desde já agradeço quem puder dar uma força.

De acordo com o erro, esta faltando essa classe no projeto.

De uma revisada no pom.xml para ver se voce colocou todas as dependências do spring.

De uma olhada neste post https://danieldiasjava.wordpress.com/2017/01/11/aplicacao-spring-mvc-com-mongodb/ esta bem detalhado pode ser que te ajude.

Fala @campelo.m eu não tenho esse arquivo no projeto.

Estou fazendo via a apostila fj21. E neste caso, eu notei que o tal pom.xml é gerado pelo maven o qual eu não estou usando, e em nenhum momento é citado na apostila da caelum.

Alguma outra sugestão?

De qualquer forma obrigado pela pré-resposta.

Realmente a configuração não usa o pom.xml, equivoco meu.

Porem na apostila fala:

11.3 - Configurando o Spring MVC
Para que possamos aprender o Spring MVC, vamos criar um sistema de lista de tarefas. E o primeiro passo que precisamos dar é ter o Spring MVC para adicionarmos em nossa aplicação. Spring MVC vem junto com as bibliotecas do framework Spring que podemos encontrar no site http://springsource.org. Lá, é possível encontrar diversas documentações e tutoriais, além dos JARs do projeto.

Uma vez que adicionamos os JARs do Spring MVC em nosso projeto dentro do diretório WEB-INF/lib, precisamos declarar um Servlet, que fará o papel de Front Controller da nossa aplicação, recebendo as requisições e as enviando às lógicas corretas. Para declararmos a Servlet do Spring MVC, basta adicionarmos no web.xml da nossa aplicação

Mais em destaque para:
Uma vez que adicionamos os JARs do Spring MVC em nosso projeto dentro do diretório WEB-INF/lib,

Você fez a parte citada acima?`

Veja que o erro no seu log é relacionado diretamente ao mapeamento do seu servlet.

<servlet>
      <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
      <servlet-class>
          org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>
              /WEB-INF/spring-context.xml
          </param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
      <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
      <url-pattern>/</url-pattern>
</servlet-mapping>

Opa valeu pelo retorno.

Então eu fiz essa etapa sim, contudo, o endereço http://springsource.org não disponibiliza mais os jars para download.
Ele cita as ultimas versões liberadas, contudo você só consegue obter por esse link a configuração para o maven e/ou grandle.

De toda forma eu consegui os jars pelo seguinte repositório: https://repo.spring.io/release/org/springframework/spring/

Pelo que entendi é o repositório oficial deles, então acredito que não teria algum problema baixar por lá.
Além disso, baixei também as dependencias SLF4J que pelo que entendi o spring necessita de algumas coisas dessa API.

Eu realmente não entendo o que estou fazendo de errado visto que eu já baixei tudo que era necessário…

Quando você acessa o repositório do spring no maven voce tem a opção de download do(s) jar(s).

Veja nesse link como que você pode add jar no projeto.

baixei o jar desse repositorio do maven e tentei substituir o jar que eu já tinha, adicionei novamente ao build path e infelizmente o mesmo problema ocorre…

Vou ver se outras sugestões funcionam… caso contrário vou desistir dessa… estou desde ontem a noite e infelizmente não tenho tido sucesso.

Mas valeu pelo tempo @campelo.m.

Não vai te ajudar, você precisa que os jars sejam da versão especificas dada pela apostila, é só ir baixando pelo maven. Porém, se tiver alguma versão que não combine com outra versão do jar em sua lib, ele pode quebrar a sua aplicação, já passei por isso e durante a apostila da diversos crash. Um grande detalhe que ajuda nesses erros é que uma hora as configurações estão lá em cima outra hora lá em baixo, assim como as dependências na apostila.
Se quiser acompanhar, as dependências funcionais já estão posta, assim como o XML no branch master, no branch JPA está a “tentativa” de integrar com o mesmo, o que não deu certo! haha. Mas só de passar por ai, já fica de boa quando pega outros projetos o legal é ver que coisas que demoram semanas para serem realizadas com os frames passam a ser em menos de 2 min. Sabendo utilizar*. Por isso é importante passar por esse sofrimento.

Branch com tentativa de inclusão, se conseguir solucionar a integração com xml, me avisa. TKS

Se quiser observar como fica a agilidade depois, utilizando spring boot, na primeira aula. As demais ele utiliza conteúdos mais avançados e a apostila não cobre.

Hey @jonathan.sky eu recriei o projeto, e na minha pasta lib eu coloquei as jars que você tinha em seu projeto, e deu certo cara!

Só fiquei um pouco confuso quanto a essa questão das libs. Quer dizer… eu baixei as bibliotecas mais atualizadas para fazer um simples helloworld… então eu fiquei meio com pé atrás em se toda vez que eu iniciar um projeto novo e usar spring, mesmo com as bibliotecas atualizadas, vai dar pau?

De qualquer forma obrigado pelo tempo galera que postou aqui na página =)

O que pode ter acontecido no projeto anterior é o chamado cash na hora de subir o projeto.
Voce deve ir no server e dar um clean. Geralmente quando voce add alguma coisa o eclipse nao faz um rebuild do projeto.

Fala @campelo.m, acredito que não seja isso…

Eu acabei de criar um projeto from zero, todo limpo, configurei os xml certo, e adicionei as bibliotecas atualizadas e não as que eu peguei do projeto do @jonathan.sky, apliquei o build path e na hora de setar no servidor, eu fiz o clean que você mencionou, e deu o mesmo erro de antes…

Será que é algo com essas bibliotecas que eu baixei do repositório do spring?

Não é erro, é um problema mais profundo. ClassLoader, De maneira mais simples pode ser acarretado desta maneira:

Quando sobe a sua aplicação, ele carrega toda a sua lib correto.
Por exemplo, você usa o framework hibernate-x.10 e ele depende do jar.x.10, porém na sua aplicação tem o jar.x.11
pode ser que de certo por um momento, mas em algum método do hibernate ele precisa do jar especificamente x.10, o que acontece? ClassNotFoundException, você não sabe o que aconteceu e pensa… Mas estava tudo funcionando.

Este é o contexto que ocorreu no seu caso, não neste problema em especifico, pode ter sido 1000 e 1 coisas, por exemplo, lá atrás na apostila você sobe o seu servidor tomcat configurado para funcionar de tal jeito com a versão 7, Mas e se ela estiver usando alguma lib. da versão x.1 e esta a x.2? Estava funcionando até agora.
Quando implementou o spring, precisava adc. lib. especificas naquele contexto, colocou algo diferente quebra toda a aplicação.

Então eu fiquei meio com pé atrás em se toda vez que eu iniciar um projeto novo e usar spring

O spring boot já acaba com esse problema, pois ele já vem com tudo configurado,
http://start.spring.io/, só colocar o que precisa.

bibliotecas atualizadas, vai dar pau?

Isso ocorre pois esse projeto é legado, precisava está tudo certo.

Agora já mudou muitas coisas, mas o processo é quase o mesmo só que bem mais pratico, como falei, todo projeto da para ser feito em poucos minutos.

Dica: Siga sempre pelo caminho menos percorrido a recompensa no final da trilha é maior.

Dois livros bacanas, leia na ordem:

1 curtida

Entendi…

O complicado é seguir uma apostila onde algumas coisas estão desatualizadas pelo que parece…
Mas ok, vou ver como é que funciona esse spring boot e continuar tentando…

Novamente obrigado pelo pessoal que postou aqui.

A apostila toda esta desatualizada. O projeto ira funcionar mesmo com o Spring atualizado, bastando você sempre ver a documentação da mesma para ver o que mudou.

{ },s.

1 curtida

Mas até considero bom, tem que quebrar a cabeça com essas coisas antes de avançar, para não ter mágica. Acredito*

Correto. È sempre bom aprender a maneira complicada e cheia de configurações antes de sai mexendo com a Magia do Spring Boot ou qualquer outro que faça isso. Lembrando que nem toda empresa usa as ultima novidades.

Caso não queira mexer com XML do Spring pode utilizar o modo de configuração programática.

Eu até concordo de ter que quebrar cabeça de vez em quando… mas vamos ser realistas, o que adianta o cara que tá começando ficar travado com paradas obsoletas e não aprender logo o que é necessário para por em prática e ir ganhando experiência?

Quer dizer, não que tudo tenha que ser entregue de mão beijada, mas as vezes o que é obsoleto pode desmotivar bastante…

No meu caso, eu já trabalho alguns anos com programação de baixo nível… e estou começando agora a programar aplicações voltadas ao usuário e não ao hardware… então o jeito de programar é diferente, isso é evidente, mas ao meu ver, quando se trata de programação voltada ao usuário, acho que as “informações” em si deviam ser melhor distribuída, principalmente pq são coisas que serão usadas todos os dias tanto pelos programadores quando pelos usuários.

Até em programação para hardware as especificações mesmo quando são atualizadas, os desenvolvedores não perdem tanto tempo tendo que se adaptar, pq tudo é bem definido, então o que muda geralmente é a sintaxe de algo, e não a configuração de centenas de arquivos para fazer um recurso funcionar…

=z

Rapaz, estava mexendo nesse seu Branch de JPA, e sinceramente esta uma bagunça tudo. Consegui roda o mesmo, cria as tabelas, porem não persistir nada.

No caso como faria? você diz o flow do git? Se sim, ainda não conhecia kkk, então só fazia push e commit.