introducao ao spring web mvc
Post on 26-May-2015
3.648 Views
Preview:
DESCRIPTION
TRANSCRIPT
Globalcode – Open4education
Spring Web MVC
Eder Magalhães eder@yaw.com.br
twitter.com/edermag
Globalcode – Open4education
Spring Framework para Web
! Spring Web MVC
! Spring Web Flow
! Spring Faces
! Spring JavaScript
Globalcode – Open4education
Flexível e sofisticado framework para desenvolvimento de aplicativos Web em Java, seguindo a estrutura Model View Controller.
Spring Web MVC
“Open for extension, closed for modifica8on” Bob Mar8n, the open-‐closer principle
Globalcode – Open4education
Por falar em MVC, camadas...
Presenta)on
Web
Service
Persistence
Model
Globalcode – Open4education
Uma (re)visão sobre MVC
Globalcode – Open4education
Features ! Controllers e Form-Beans são POJOS; ! Validadores e Conversores; ! Suporte a IoC / DI (Core Spring); ! Flexibilidade em Mapping Request + Render Response ! Arquitetura RESTFull; ! Suporte a JSR 303; ! Exception Handling; ! Favorece Testes; ! Plugável a outras tecnologias Web; ! Annotation Driven Development;
Globalcode – Open4education
Demonstração
Globalcode – Open4education
Criando um Controller
@Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping public String lista() { return "lista"; } }
http://<host>/<appcontext>/produtos
lista.jsp
Globalcode – Open4education
Mais flexibilidade c/ RequestMapping
@Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(value="/{id}",method=RequestMethod.GET) public String exibe(@PathVariable("id") Integer id) { //... } @RequestMapping(params = "find=byDesc", method=RequestMethod.GET) public String filtraPorDescricao(@RequestParam String desc) { //... } }
http://<host>/<appcontext>/produtos/20
http://<host>/<appcontext>/produtos?find=byDesc&desc=Livro
Globalcode – Open4education
Injeção de Dependência
@Controller @RequestMapping("/produtos") public class ProdutoController { @Autowire private ProdutoService service; //... }
@Component public class ProdutoServiceImpl implements ProdutoService { //... }
Globalcode – Open4education
Acessando atributos na Session
@Controller @RequestMapping("/produtos") @SessionAttribute("user") public class ProdutoController { @RequestMapping(method=RequestMethod.DELETE) public String delete(Long id, @ModelAttribute("user") String username) { // ... } }
Globalcode – Open4education
Trabalhando com a Request
@Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping("requestValues") public String requestValues(HttpServletRequest req, Locale locale) { //... } }
Globalcode – Open4education
Binding do view com model
@Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(method=RequestMethod.GET) public String formNovoProduto(Model model) { model.addAttribute(new Produto()); return ”novo”; } @RequestMapping(method=RequestMethod.POST) public String salvar(Produto produto) { //... } }
novo.jsp
Globalcode – Open4education
Validação public class Produto { @NotEmpty private String nome; @NumberFormat(pattern="$###,#0") private Double preco; //... }
public class ProdutoController { @RequestMapping(method=RequestMethod.POST) public String salvar( @Valid Produto p, BindingResult result) { //... } }
Globalcode – Open4education
RESTful
@Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(value="atualizar", method=RequestMethod.PUT) public String atualizar(Produto produto) { //... } @RequestMapping(value="delete", method=RequestMethod.DELETE) public String delete(Produto produto) { //... } }
//view jsp <form:form action=“./produtos/delete“ method="DELETE"> ... </form:form> //fake
Globalcode – Open4education
Render Response @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(value="/{id}",method=RequestMethod.GET) public String exibeProduto(@PathVariable("id") Integer id, Model model) { //... return "produto"; } @RequestMapping(params = "find=byId", method=RequestMethod.GET) public @ResponseBody Produto getProdutoPorId( @RequestParam Long id) { Produto produto = service.findById(id); return produto; } }
Globalcode – Open4education
JSON
public class ProdutoController { @RequestMapping(value = "/status", method=RequestMethod.GET) public @ResponseBody String getStatusProduto(Integer idProd) { return service.situacaoEmEstoque(idProd); } }
//view jsp usando JQuery function checkStatusProduto() { $.getJSON("produtos/status", { idProd: $('#inputId').val }, function (status) { $('#lStat').appendHtml("<h6>"+status+"</h6>"); }); }
Globalcode – Open4education
Custom tags <JSP> <%@ taglib uri="http://www.springframework.org/tags" prefix="s"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> ... <s:url value="/produtos/novo" var="save_form_url"/> <form:form id="form" method="post" action="${save_form_url}" modelAttribute="produto" cssClass="cleanform"> <form:label path="descricao“>Descricao</form:label> <form:input path="descricao" /> ... </form:form> ...
Globalcode – Open4education
O que mais? ! @RequestHeader
! @RequestBody
! @CookieValue
! @ExceptionHandler
! MultipartFile
! Etags / HttpEntity / ResponseEntity
Globalcode – Open4education
Mais informações ! http://www.springsource.org/documentation ! http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html ! http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/ ! http://src.springsource.org/svn/spring-samples/mvc-showcase ! http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ ! http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/ ! http://blog.globalcode.com.br/search/label/Spring ! http://www.springbrasil.com.br/
Globalcode – Open4education
Follow ! @springrod
! @kdonald
! @poutsma
! @benalexau
! @youandwe
! @globalcode
Globalcode – Open4education
Obrigado !
Eder Magalhães eder@yaw.com.br
twitter.com/edermag
top related