{"id":12,"date":"2010-03-14T20:27:44","date_gmt":"2010-03-14T23:27:44","guid":{"rendered":"http:\/\/www.javaframework.org\/portal\/2010\/03\/14\/hello-world-com-spring-3-para-um-projeto-web\/"},"modified":"2010-05-14T15:07:08","modified_gmt":"2010-05-14T18:07:08","slug":"hello-world-com-spring-3-para-um-projeto-web","status":"publish","type":"post","link":"https:\/\/www.javaframework.org\/portal\/2010\/03\/14\/hello-world-com-spring-3-para-um-projeto-web\/","title":{"rendered":"Hello World com Spring 3 para um projeto WEB"},"content":{"rendered":"<p>Uma das maiores d\u00favidas na utiliza\u00e7\u00e3o do Spring \u00e9 como fazer a configura\u00e7\u00e3o inicial da aplica\u00e7\u00e3o. Nesse tutorial explicaremos como fazer essa configura\u00e7\u00e3o. Mostraremos como criar uma aplica\u00e7\u00e3o web, quais arquivos necess\u00e1rios, e configurar beans no contexto do Spring. Tudo para uma aplica\u00e7\u00e3o WEB.<\/p>\n<p> <!--more-->  <\/p>\n<h3>1. Baixando o Spring<\/h3>\n<p>Nesse tutorial foi utilizado o Spring vers\u00e3o 3.0.1, que pode ser baixado no seguinte endere\u00e7o <a href=\"http:\/\/www.springsource.com\/download\/community\" target=\"_blank\">http:\/\/www.springsource.com\/download\/community<\/a>. Quando acessar a p\u00e1gina, ser\u00e1 pedido que preencha um formul\u00e1rio, voce pode preencher ou clicar no link <em>download page<\/em> na parte de baixo do form onde \u00e9 dito \u201cI&#8217;d rather not fill in the form. Just take me to the download page\u201d. \u00c9 interessante fazer dois downloads, um \u00e9 o Spring Framework with Docs, que \u00e9 o Spring + Documenta\u00e7\u00e3o. E o Spring Framework Dependencies, que s\u00e3o as dependencias do Spring.     <br \/><a title=\"http:\/\/s3.amazonaws.com\/dist.springframework.org\/release\/SPR\/spring-framework-3.0.1.RELEASE-A-dependencies.zip\" href=\"http:\/\/s3.amazonaws.com\/dist.springframework.org\/release\/SPR\/spring-framework-3.0.1.RELEASE-A-dependencies.zip\">http:\/\/s3.amazonaws.com\/dist.springframework.org\/release\/SPR\/spring-framework-3.0.1.RELEASE-A-dependencies.zip<\/a>     <br \/><a title=\"http:\/\/s3.amazonaws.com\/dist.springframework.org\/release\/SPR\/spring-framework-3.0.1.RELEASE-A-with-docs.zip\" href=\"http:\/\/s3.amazonaws.com\/dist.springframework.org\/release\/SPR\/spring-framework-3.0.1.RELEASE-A-with-docs.zip\">http:\/\/s3.amazonaws.com\/dist.springframework.org\/release\/SPR\/spring-framework-3.0.1.RELEASE-A-with-docs.zip<\/a><\/p>\n<p>Extraia os arquivos baixados para um pasta qualquer. No arquivo Spring with Docs existir\u00e1 uma pasta <em>dist<\/em>, que cont\u00e9m a distribui\u00e7\u00e3o do Spring e uma pasta <em>src<\/em> com os fontes das biliotecas, essas s\u00e3o as pastas mais importantes. No arquivo dependencies existir\u00e1 uma pasta que representa cada pacote de depend\u00eancias do Spring. Voc\u00ea n\u00e3o precisar\u00e1 importar para seu projeto todas as biliotecas, apenas as que for utilizar.<\/p>\n<p>Dica: Quando estiver desenvolvendo com o Spring e encontrar um erro como java.lang.NoClassDefFoundError: org\/apache\/commons\/logging\/LogFactory, significa que a classe LogFactory do pacote org.apache.commons.logging n\u00e3o foi encontrada. Repare o pacote org\/apache\/commons, esse pacote \u00e9 de uma biblioteca externa (n\u00e3o \u00e9 org\/springframework), voc\u00ea poder\u00e1 encontrar essa biblioteca no arquivo de <em>dependencies<\/em> na pasta org.apache.commons. Dentro dessa pasta existir\u00e1 uma subpasta <em>com.springsource.org.apache.commons.logging<\/em> o final do pacote condiz com o pacote da classe n\u00e3o encontrada org.apache.commons.logging, logo essa deve ser a biblioteca a ser adicionada.     <br \/>Se o erro encontrado for algo como java.lang.NoClassDefFoundError: org\/springframework\/asm\/ClassVisitor, repare que o pacote \u00e9 org\/springframework, logo essa \u00e9 uma classe do Spring. Essa classe estar\u00e1 dentro de algum jar dentro da pasta <em>dist<\/em> da distribui\u00e7\u00e3o do JAR do Spring. Existe um arquivo JAR chamado org.springframework.asm-3.0.1.RELEASE-A.jar repare que o nome do arquivo org.springframework.asm condiz com o pacote da classe, logo esse \u00e9 o JAR que deve ser adicionado ao seu projeto.<\/p>\n<h3>2. Criando o projeto<\/h3>\n<p>Vamos criar e preparar um projeto com as bibliotecas do Spring. Crie um projeto WEB no seu ambiente de desenvolvimento. Se estiver utilizando o plugin WTP do eclipse, ser\u00e1 um projeto <em>Dynamic Web Project<\/em>. Escolha um projeto que tenha como vers\u00e3o do servlet 2.4 ou superior e Java 1.5 ou superior.<\/p>\n<p>Copie para o diret\u00f3rio \/WEB-INF\/lib da sua aplica\u00e7\u00e3o os seguintes arquivos JAR (est\u00e3o na pasta <em>dist<\/em> do arquivo baixado):<\/p>\n<ul>\n<li>org.springframework.asm-3.0.1.RELEASE-A.jar <\/li>\n<li>org.springframework.beans-3.0.1.RELEASE-A.jar <\/li>\n<li>org.springframework.context-3.0.1.RELEASE-A.jar <\/li>\n<li>org.springframework.core-3.0.1.RELEASE-A.jar <\/li>\n<li>org.springframework.expression-3.0.1.RELEASE-A.jar <\/li>\n<li>org.springframework.web-3.0.1.RELEASE-A.jar <\/li>\n<\/ul>\n<p>Copie tamb\u00e9m para o diret\u00f3rio \/WEB-INF\/lib da sua aplica\u00e7\u00e3o o seguinte JAR que est\u00e1 no arquivo de dependencias (pasta <em>org.apache.commons\\com.springsource.org.apache.commons.logging\\1.1.1<\/em>):<\/p>\n<ul>\n<li>com.springsource.org.apache.commons.logging-1.1.1.jar <\/li>\n<\/ul>\n<p>Essas s\u00e3o as bibliotecas que utilizaremos nesse tutorial, a medida que for avan\u00e7ando na utiliza\u00e7\u00e3o do Spring, outras bibliotecas podem ser necess\u00e1rias.<\/p>\n<h3>3. Configurando o projeto com o Spring<\/h3>\n<p>A configura\u00e7\u00e3o do Spring \u00e9 feita atrav\u00e9s de um arquivo XML. Vamos criar um arquivo applicationContext.xml na pasta WEB-INF para utilizar como configura\u00e7\u00e3o do Spring. Esse arquivo deve ter o seguinte conte\u00fado:<\/p>\n<p><font size=\"2\" face=\"Courier New\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;      <br \/>&lt;beans xmlns=&quot;<\/font><a href=\"http:\/\/www.springframework.org\/schema\/beans&quot;\"><font size=\"2\" face=\"Courier New\">http:\/\/www.springframework.org\/schema\/beans&quot;<\/font><\/a>     <br \/><font size=\"2\" face=\"Courier New\">&#160;&#160;&#160;&#160;&#160;&#160; xmlns:xsi=&quot;<\/font><a href=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\"><font size=\"2\" face=\"Courier New\">http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;<\/font><\/a>     <br \/><font size=\"2\" face=\"Courier New\">&#160;&#160;&#160;&#160;&#160;&#160; xsi:schemaLocation=&quot;<\/font><a href=\"http:\/\/www.springframework.org\/schema\/beans\"><font size=\"2\" face=\"Courier New\">http:\/\/www.springframework.org\/schema\/beans<\/font><\/a>&#160; <font size=\"2\" face=\"Courier New\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><a href=\"http:\/\/www.springframework.org\/schema\/beans\/spring-beans-3.0.xsd&quot;\"><font size=\"2\" face=\"Courier New\">http:\/\/www.springframework.org\/schema\/beans\/spring-beans-3.0.xsd&quot;<\/font><\/a><font size=\"2\" face=\"Courier New\">&gt;      <br \/><\/font><\/p>\n<p><font size=\"2\" face=\"Courier New\">&lt;\/beans&gt;<\/font><\/p>\n<p>Por enquanto esse arquivo n\u00e3o ter\u00e1 nenhuma configura\u00e7\u00e3o.<\/p>\n<p>Ao iniciar a aplica\u00e7\u00e3o ser\u00e1 necess\u00e1rio inicializar o container do Spring. Esse container ir\u00e1 ler o applicationContext.xml criado e far\u00e1 a inicializa\u00e7\u00e3o da aplica\u00e7\u00e3o. Precisamos informar ao container web sobre a inicializa\u00e7\u00e3o do Spring, fazemos isso com a seguinte configura\u00e7\u00e3o no web.xml:<\/p>\n<p><font size=\"2\" face=\"Courier New\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;      <br \/>&lt;web-app version=&quot;2.5&quot;       <br \/>&#160;&#160;&#160; xmlns=&quot;<\/font><a href=\"http:\/\/java.sun.com\/xml\/ns\/javaee&quot;\"><font size=\"2\" face=\"Courier New\">http:\/\/java.sun.com\/xml\/ns\/javaee&quot;<\/font><\/a>     <br \/><font size=\"2\" face=\"Courier New\">&#160;&#160;&#160; xmlns:xsi=&quot;<\/font><a href=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\"><font size=\"2\" face=\"Courier New\">http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;<\/font><\/a>     <br \/><font size=\"2\" face=\"Courier New\">&#160;&#160;&#160; xsi:schemaLocation=&quot;<\/font><a href=\"http:\/\/java.sun.com\/xml\/ns\/javaee\"><font size=\"2\" face=\"Courier New\">http:\/\/java.sun.com\/xml\/ns\/javaee<\/font><\/a>     <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <a href=\"http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd&quot;\"><font size=\"2\" face=\"Courier New\">http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd&quot;<\/font><\/a><font size=\"2\" face=\"Courier New\">&gt;&#160; <\/p>\n<p>&lt;!&#8211; Bootstrap the root application context as usual using ContextLoaderListener &#8211;&gt;       <br \/>&#160;&#160;&#160; &lt;listener&gt;       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;listener-class&gt;       <br \/><\/font><font size=\"2\" face=\"Courier New\">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; org.springframework.web.context.ContextLoaderListener      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;\/listener-class&gt;       <br \/>&#160;&#160;&#160; &lt;\/listener&gt; <\/font><\/p>\n<p><font size=\"2\" face=\"Courier New\">&lt;\/web-app&gt;<\/font><\/p>\n<p>O ContextLoaderListener por padr\u00e3o ir\u00e1 ler o arquivo applicationContext.xml e fazer a configura\u00e7\u00e3o do Spring. <\/p>\n<p>Agora \u00e9 um momento interessante de se testar a aplica\u00e7\u00e3o. Fa\u00e7a o deploy da aplica\u00e7\u00e3o, ligue o servidor e verifique se a aplica\u00e7\u00e3o \u00e9 incializada sem erros. Se tudo funcionou perfeitamente, passe para a pr\u00f3xima etapa. Se acontecer algum erro, verifique seu deploy, se as bibliotecas foram colocadas nos locais corretos, e se o arquivo web.xml e applicationContext.xml est\u00e3o como no exemplo (voc\u00ea poder\u00e1 utilizar um web.xml com vers\u00e3o de servlet 2.4, o exemplo acima utiliza servlet 2.5).<\/p>\n<h3>4. Criando o primeiro bean<\/h3>\n<p>No Spring os objetos configurados tem o nome de bean. Voc\u00ea declara v\u00e1rios beans na sua aplica\u00e7\u00e3o e o Spring faz a inje\u00e7\u00e3o de dependencia, instanciando e configurando os objetos. Vamos criar nosso primeiro bean para testar o Spring. Crie uma classe chamada HelloWorld com o seguinte c\u00f3digo:<\/p>\n<p>package org.javaframework.spring; <\/p>\n<p>public class HelloWorld { <\/p>\n<p>&#160;&#160;&#160; String mensagem;    <br \/>&#160;&#160;&#160; public void setMensagem(String message) {     <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.mensagem = message;     <br \/>&#160;&#160;&#160; }     <br \/>&#160;&#160;&#160; public void dizerMensagem(){     <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;Hello World!! &quot;+mensagem);     <br \/>&#160;&#160;&#160; }     <br \/>}<\/p>\n<p>\u00c9 apenas uma classe comum em Java. Iremos configurar agora, um bean no Spring. Como dito anteriormente um bean \u00e9 um objeto configurado pelo container do Spring. Iremos utilizar o applicationContext.xml para configurar esse bean. Adicione o seguinte trecho no arquivo \/WEB-INF\/applicationContext.xml:<\/p>\n<p>&lt;bean class=&quot;org.javaframework.spring.HelloWorld&quot; init-method=&quot;dizerMensagem&quot;&gt;    <br \/>&#160;&#160;&#160; &lt;property name=&quot;mensagem&quot; value=&quot;Primeiro bean configurado do Spring!!!&quot;\/&gt;     <br \/>&lt;\/bean&gt;<\/p>\n<p>A tag bean define um bean para a classe org.javaframework.spring.HelloWorld. Configuramos o m\u00e9todo que deve ser chamado na inicializa\u00e7\u00e3o desse bean atrav\u00e9s do init-method. E configuramos a propriedade mensagem. O Spring ir\u00e1 instanciar um objeto da classe HelloWorld, chamar\u00e1 o m\u00e9todo setMensagem com o valor \u201cPrimeiro bean configurado do Spring!!!&quot; e por fim invocar\u00e1 o m\u00e9todo dizerMensagem. Se fizer a publica\u00e7\u00e3o da aplica\u00e7\u00e3o e ligar o servidor voc\u00ea ver\u00e1 a seguinte linha no console:<\/p>\n<p>Hello World!! Primeiro bean configurado do Spring!!!<\/p>\n<p>(Procure no console pois n\u00e3o ser\u00e1 a \u00faltima linha impressa)<\/p>\n<p>Espero que tenha sido \u00fatil, fique atento ao <a href=\"http:\/\/www.javaframework.org\">Java Framework Portal<\/a> para novos tutoriais.<\/p>\n<p>Veja tamb\u00e9m: <a href=\"http:\/\/www.javaframework.org\/portal\/2010\/03\/15\/spring-3-configurando-beans-com-annotations\/\">Spring 3, configurando beans com Annotations<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma das maiores d\u00favidas na utiliza\u00e7\u00e3o do Spring \u00e9 como fazer a configura\u00e7\u00e3o inicial da aplica\u00e7\u00e3o. Nesse tutorial explicaremos como fazer essa configura\u00e7\u00e3o. Mostraremos como criar uma aplica\u00e7\u00e3o web, quais arquivos necess\u00e1rios, e configurar beans no contexto do Spring. Tudo para uma aplica\u00e7\u00e3o WEB.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[11,10,4,6,9,5],"class_list":["post-12","post","type-post","status-publish","format-standard","hentry","category-tutoriais","tag-bean","tag-configuracao","tag-framework","tag-jee","tag-spring","tag-web"],"_links":{"self":[{"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/posts\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/comments?post=12"}],"version-history":[{"count":1,"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/posts\/12\/revisions"}],"predecessor-version":[{"id":38,"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/posts\/12\/revisions\/38"}],"wp:attachment":[{"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/media?parent=12"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/categories?post=12"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javaframework.org\/portal\/wp-json\/wp\/v2\/tags?post=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}