CasadoCódigo Agradecimentos Esse é o primeiro livro que escrevo pela Casa do Código e a satisfação é imensa.Serumdosautoresdaeditoraquedesburocratizouacriaçãodelivros nopaíséumaenormehonra. Porcontadissomeuprimeiroagradecimento vaiparaPauloeAdriano,pormedaremespaçoparaescrever.Ecomojáéde praxe na minha vida, vou deixar aqui o agradecimento para Larissa, minha esposa,poraguentaraausêncianecessáriaparaescreverumlivro. Porúltimoqueroagradeceravocê,quetemsededeconhecimentoequer estarsempreaprendendo.Sãodepessoasassimqueomundoprecisaeeues- pero,sinceramente,quecadagotadesuordirecionadoparaseuaprendizado setransformeemumpassoamaisdadonasuacarreira. i CasadoCódigo Sumário Sumário 1 Introdução 1 1.1 PorqueoSpringMVC . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Amargemdaespecificação . . . . . . . . . . . . . . . . . . . . 3 1.3 Comeceaaventura. . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Público-alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5 Código-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.6 Pedindoajuda . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Começandooprojeto 7 2.1 Configuraçãobásicaecriaçãodoprojeto . . . . . . . . . . . . 7 2.2 Acessandooprimeiroendereço . . . . . . . . . . . . . . . . . 18 2.3 HabilitandooSpringMVC . . . . . . . . . . . . . . . . . . . . 20 2.4 Configurandoapastacomaspáginas . . . . . . . . . . . . . . 23 2.5 Umpoucopordentrodoframework . . . . . . . . . . . . . . 25 2.6 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3 Cadastrodeprodutos 29 3.1 Formuláriodecadastro . . . . . . . . . . . . . . . . . . . . . . 29 3.2 Lógicadecadastro . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3 Gravandoosdadosnobancodedados . . . . . . . . . . . . . 33 3.4 ConfigurandoaJPAcomoHibernate. . . . . . . . . . . . . . 36 3.5 Habilitandoocontroletransacional . . . . . . . . . . . . . . . 41 3.6 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 iii Sumário CasadoCódigo 4 Melhorandoocadastroealistagem 45 4.1 Recebendoumalistadevaloresnoformulário. . . . . . . . . 45 4.2 Disponibilizandoobjetosnaview . . . . . . . . . . . . . . . . 48 4.3 Listandoosprodutos . . . . . . . . . . . . . . . . . . . . . . . 50 4.4 MelhorusodosverbosHTTP . . . . . . . . . . . . . . . . . . 52 4.5 ModularizaçãodasURLsdeacesso . . . . . . . . . . . . . . . 54 4.6 ForwardxRedirect . . . . . . . . . . . . . . . . . . . . . . . . 55 4.7 Parâmetrosextrasnosredirects . . . . . . . . . . . . . . . . . 57 4.8 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5 Validaçãoeconversãodedados 61 5.1 Validaçãobásica . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2 Exibindooserros . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.3 Exibindoasmensagensdeerrodemaneiraamigável . . . . . 73 5.4 Mantendoosvaloresnoformulário . . . . . . . . . . . . . . . 78 5.5 IntegraçãocomaBeanValidation . . . . . . . . . . . . . . . . 80 5.6 Convertendoadata . . . . . . . . . . . . . . . . . . . . . . . . 82 5.7 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6 Uploaddearquivos 87 6.1 RecebendooarquivonoController . . . . . . . . . . . . . . . 87 6.2 Salvandoocaminhodoarquivo . . . . . . . . . . . . . . . . . 91 6.3 Configuraçõesnecessárias . . . . . . . . . . . . . . . . . . . . 92 6.4 Gravandoosarquivosforadoservidorweb . . . . . . . . . . 94 6.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7 Carrinhodecompras 105 7.1 URItemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.2 CarrinhodecompraseoescopodeSessão . . . . . . . . . . . 111 7.3 Exibindoositensdocarrinho . . . . . . . . . . . . . . . . . . 116 7.4 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 iv CasadoCódigo Sumário 8 Retornosassíncronos 121 8.1 Executandooperaçõesdemoradasassincronamente . . . . . 127 8.2 DefferedResulteummaiorcontrolesobreaexecuçãoassín- crona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 8.3 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 9 MelhorandoperformancecomCache 135 9.1 Cacheandooretornodosmétodosdoscontrollers . . . . . . 136 9.2 Equandotiveremnovoslivros? . . . . . . . . . . . . . . . . . 139 9.3 Usandoumprovedordecachemaisavançado . . . . . . . . . 140 9.4 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 10 Respondendomaisdeumformato 143 10.1 Expondoosdadosemoutrosformatos . . . . . . . . . . . . . 143 10.2 ContentnegotiationeoutrosViewResolvers . . . . . . . . . . 145 10.3 Curiosidadesobreoobjetoaserserializado . . . . . . . . . . 148 10.4 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 11 Protegendoaaplicação 151 11.1 ConfigurandooSpringSecurity . . . . . . . . . . . . . . . . . 152 11.2 Garantindoaautenticação . . . . . . . . . . . . . . . . . . . . 154 11.3 Configuraçãodafontedebuscadosusuários . . . . . . . . . 157 11.4 Cross-siterequestforgery . . . . . . . . . . . . . . . . . . . . . 165 11.5 Customizandomaisalgunsdetalhes. . . . . . . . . . . . . . . 168 11.6 Exibindoousuáriologadoeescondendotrechosdapágina . 171 11.7 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 12 Organizaçãodolayoutemtemplates 173 12.1 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 12.2 Deixandootemplateaindamaisflexível . . . . . . . . . . . . 178 12.3 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 v Sumário CasadoCódigo 13 Internacionalização 181 13.1 Isolandoostextosemarquivosdemensagens . . . . . . . . . 182 13.2 Accept-Languageheader . . . . . . . . . . . . . . . . . . . . . 184 13.3 Passandoparâmetrosnasmensagens . . . . . . . . . . . . . . 185 13.4 Deixequeousuáriodefinaalíngua . . . . . . . . . . . . . . . 186 13.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 14 Testesautomatizados 191 14.1 TestesdeintegraçãonoDAO . . . . . . . . . . . . . . . . . . . 192 14.2 Utilizeprofilesecontroleseuambiente . . . . . . . . . . . . . 197 14.3 Testesdocontroller . . . . . . . . . . . . . . . . . . . . . . . . 201 14.4 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 15 Outrasfacilidades 209 15.1 ResolvendooproblemageradopeloLazyLoad . . . . . . . . 209 15.2 Liberandoacessoarecursosestáticosdaaplicação . . . . . . 212 15.3 Enviandoe-mail . . . . . . . . . . . . . . . . . . . . . . . . . . 213 15.4 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 16 Deploydaaplicação 217 16.1 ConfigurandooMavenparaoHeroku . . . . . . . . . . . . . 217 16.2 QualbancoseráusadonoHeroku . . . . . . . . . . . . . . . . 219 16.3 NovaaplicaçãonoHeroku . . . . . . . . . . . . . . . . . . . . 221 16.4 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 17 Horadepraticar 223 17.1 Mantenhacontato . . . . . . . . . . . . . . . . . . . . . . . . . 223 vi Capítulo1 Introdução JáexistemdiversosframeworksMVCnomercadoeaprimeiraperguntaque vocêdevefazeré: existeanecessidadedeaprendermaisum? Emgeral,exis- tem algumas tecnologias que, quando são escolhidas para serem usadas em umaaplicação,nãosãofacilmentereversíveis.OframeworkMVCéumade- las. Ele vai fazer parte de uma boa parte da sua rotina de desenvolvimento. Quasesemprequeumanovafuncionalidadeforpedidaparaseuprojeto,além deimplementararegradenegócioespecífica,vocêteráquecriaralgumacoisa relativaaessaregranacamadawebdasuaaplicação.Eaí,vocêmaisumavez estaráinteragindocomoframeworkescolhido. Atravésdesseprisma,vocêdevesercapazdeanalisarospontospositivos enegativosdecadaumadassuasopçõesetomaramelhordecisãopossível. 1.1. PorqueoSpringMVC CasadoCódigo 1.1 Por que o Spring MVC OSpringéumprojetodelongadata,eleganhoumuitanotoriedadenostem- pos em que a especificação JavaEE ainda era muito burocrática. Tirou pro- veitodissoetomoudeassaltoomercadodesdemuitotempoatrás,atéosdias dehoje. AideiadelesemprefoiserumaalternativaaoJavaEEe,paraatingiresse objetivo,elescriaramdiversosprojetosaoredordomóduloprincipal,queé odeinjeçãodedependências. Fig.1.1:módulosdoSpring Esse é um dos principais motivos para a adoção do Spring MVC, que é justamente o módulo web. Na hora da adoção de um framework, um dos pontosmaisrelevanteséoqueelelheentregademaneiragratuita,eoSpring MVCécompletamenteintegradocomtodasasextensõesproduzidasemcima dopróprioSpring. Essaimagemmostraapenasasprincipaiscaracterísticas 2 CasadoCódigo Capítulo1. Introdução doframework.Paraconhecertodasasopções,valeapenaacessarolinkhttp: //spring.io/projects. Umoutropontoaltamenterelevanteéoquantodeajudavocêpodeobter atravésdainternet.Enesseponto,osprojetosrelacionadosaoSpringtambém sebeneficiambastante.ElestêmumapáginaexclusivacomquestõesdoStac- kOverflow,apenascomasperguntasmarcadascomtagsrelativasaoSpring. Você pode dar um olhada seguindo este: link http://spring.io/questions. Alémdisso,aZeroTurnaround,empresafamosaporferramentascomooJRe- bel, fez um levantamento dos frameworks MVC mais usados no mercado, o Spring MVC liderou com 40%. Você pode dar uma olhada neste: link . http://tinyurl.com/nq8n4zx QuasezerodeconfiguraçãoemXML Atualmente, oSpringsuportaqueamaioriadassuasconfiguraçõesseja feitademaneiraprogramática,ouseja,vocênãoprecisacriarnenhumXML paraqueseusmóduloscomecemafuncionar. Esseémaisumpontoquefa- cilitou ainda mais sua adoção. Em algum momento do tempo, pareceu que configurações em XML eram a saída para declarar informações pertinentes aoprojeto,masopontoé:semprequevocêalteraumadessasconfigurações, énecessárioqueumanovainstalaçãodoprojetosejagerada.Dadaessacon- dição,porquevamosdeixardeescrevercódigoemJavaparaescrevercódigo em XML? Com uma boa separação de pacotes, conseguimos deixar nossas configuraçõesbemmodulareseissoserámostradonodecorrerdolivro. 1.2 A margem da especificação AsespecificaçõesproduzidaspelacomunidadeJavasãodegrandevaliapara asempresas, issoéinegável. TerumaempresacomoaOracleabalizandoas decisões que envolvem a plataforma passa segurança para os tomadores de decisãoquequeremusarestalinguagemesuasferramentasnoseuprojeto. O ponto negativo, assim como quase todas as decisões que tomamos, é quemuitasvezesasespecificaçõesdemoramparasercriadasesomosobriga- dosarecorreraprojetosdeterceiros,quemuitasvezesnãoestãointegrados comasespecificaçõesjáexistentes,paraconcluirmosalgumatarefa. Eéjus- 3
Description: