Spring Web MVC é um framework flexível e sofisticado para desenvolvimento de aplicações web em Java seguindo o padrão MVC. Ele oferece recursos como mapeamento de requisições, injeção de dependência, validação, tratamento de exceções e suporte a REST entre outros.
1. Spring Web MVC
Eder Magalhães
eder@yaw.com.br
twitter.com/edermag
Globalcode
–
Open4education
2. Spring Framework para Web
! Spring Web MVC
! Spring Web Flow
! Spring Faces
! Spring JavaScript
Globalcode
–
Open4education
3. Spring Web MVC
Flexível e sofisticado framework para
desenvolvimento de aplicativos Web em
Java, seguindo a estrutura Model View
Controller.
“Open
for
extension,
closed
for
modifica8on”
Bob
Mar8n,
the
open-‐closer
principle
Globalcode
–
Open4education
4. Por falar em MVC, camadas...
Presenta)on
Web
Model
Service
Persistence
Globalcode
–
Open4education
6. 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
11. 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
12. Trabalhando com a Request
@Controller
@RequestMapping("/produtos")
public class ProdutoController {
@RequestMapping("requestValues")
public String requestValues(HttpServletRequest req,
Locale locale) {
//...
}
}
Globalcode
–
Open4education
13. 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”; novo.jsp
}
@RequestMapping(method=RequestMethod.POST)
public String salvar(Produto produto) {
//...
}
}
Globalcode
–
Open4education
14. 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
15. 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
16. 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
17. 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