ebook img

Spring MVC: Domine o principal framework web Java PDF

231 Pages·2015·1.15 MB·Portuguese
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Spring MVC: Domine o principal framework web Java

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:
O Spring é o principal concorrente da especificação JavaEE. Com uma plataforma muito estável e com integração fina entre todas as suas extensões, fornece um ambiente muito propício para que o programador foque nas regras de negócio e esqueça dos problemas de infraestrutura. Durante o livro
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.