Saudações a todos.
Este é o quinto artigo de uma série de artigos de treinamento com Spring Professional Certification.
Deixe-me lembrá-lo de que esses artigos são respostas a perguntas do guia oficial da Pivotal em preparação para a certificação.

MVC é uma abreviação de um padrão especial. O que é esse padrão e para que serve?MVC é um modelo especial. Ele divide o programa em 3 tipos de componentes:
- Modelo - o modelo é responsável pelo armazenamento de dados.
- View - é responsável pela saída de dados no frontend.
- Controlador - é responsável pela troca de dados com vista. Ele opera com modelos.

O que é um DispatcherServlet e onde é usado?Essa é uma das principais partes do MVC para troca de dados. Este é o principal servlet que distribui solicitações entre servlets regulares.
- Ele recebe solicitações e as envia para manipuladores registrados.
- Lida com visualizações combinando seus nomes com objetos ViewResolver
- Manipula exceções geradas

Qual é o ciclo de vida de uma solicitação?- A solicitação vem em DispatcherServlet
- DispatcherServlet envia uma solicitação para um dos controladores com base na URL da solicitação
- O controlador processa a solicitação, delega a execução da lógica de negócios para a camada de negócios (geralmente são classes com a anotação
@Service
) e cria um modelo com dados, que é enviado de volta ao DispatcherServlet - DispatcherServlet envia o modelo para a frente para a visualização, com base na interface ViewResolver (mais sobre isso abaixo)
Como é feita a criação do DispatcherServlet?O DS é criado antes de criar o ApplicationContext.
A partir do Spring 3.2, é usada uma implementação da interface WebApplicationInitializer chamada AbstractAnnotationConfigDispatcherServletInitialize.
AbstractAnnotationConfigDispatcherServletInitializer cria DispatcherServlet e ContextLoaderListener.
Há duas maneiras de configurar o DS:
- Definindo propriedades especiais no web.xml
- Substituindo AbstractAnnotationConfigDispatcherServletInitializer
O que é um WebApplicationContext? Que escopos adicionais ele traz?Este é um contexto especial para um aplicativo da web.
Ele possui todos os recursos de um ApplicationConext comum (porque é herdado dele), mas também possui métodos para a API Servlet padrão.
Nota: Escopo é o escopo.
Por que usar o escopo da sessão?Bean com escopo definido na sessão é um bean que existe enquanto a sessão existe. Pode ser usado ao criar uma cesta em uma loja online etc.
Qual é o escopo padrão no MVC?Assim como na primavera sem MVC - singleton.
Por que usar a anotação @Controller?A anotação Controller é usada para registrar manipuladores de solicitação http. Esta é uma anotação em nível de classe que contém uma anotação de componente . A classe controller parece um POJO comum, com métodos e anotações de manipulador.
Como as solicitações recebidas são mapeadas para métodos manipuladores?- DispatcherServlet recebe uma solicitação
- O DS contém uma lista de classes que implementam a interface
HandlerMapping
- O manipulador encontra o método lá e envia uma solicitação para ele na classe do controlador
- O método manipulador executa a solicitação
Conte-nos sobre a anotação @RequestMappingEsta anotação é usada principalmente para especificar um URI para uma classe de controlador. Anteriormente, era usado por métodos de classe para indicar o URI, método http, tipo de dados enviados etc. Nas versões mais recentes do Spring, ele foi substituído pelas anotações @GetMapping, @PostMapping etc. Agora é usado apenas para indicar o URI para a classe do controlador.
O que são anotações @GetMapping, @PostMapping, @DeleteMapping e outras?Essas são anotações mais restritas para o mapeamento de métodos http.
@GetMapping
- lida com solicitações@PostMapping
- lida com solicitações de postagem@DeleteMapping
- manipula solicitações de exclusão@PutMapping
- manipula solicitações de colocação@PatchMapping
- lida com solicitações de patch
Tudo o que está escrito abaixo também é característico de outras anotações.
Anotação @GetMapping é simplesmente uma anotação que contém @RequestMapping (método = RequestMethod.GET) .
Também permite ajustar o método manipulador.
Seus parâmetros (eles são convertidos em parâmetros similares @RequestMapping):
path
- URIheaders
- cabeçalhosname
- nome do manipuladorparams
- parâmetrosproduces
- tipo de dados retornados (JSON, XML, texto). Usado no RESTconsumes
- tipo de dados recebidos. Usado no REST
Por padrão, a anotação segue o caminho para o método.
@GetMapping("managers") = @GetMapping(path = "managers")
Por que usar a anotação @RequestParam?Essa anotação é usada para que os métodos manipuladores possam obter parâmetros de uma solicitação http.
Uma solicitação com parâmetros: http://localhost:8080/getByName/name=Ivan
.
O código a seguir colocará a sequência Ivan
no name
da variável.
@GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) {
Por que usar a anotação @PathVariable?Esta anotação obtém uma parte específica do URI.
URI: http://localhost:8080/getById/23
O código a seguir colocará 23
na variável id
.
@GetMapping("getById/_{id}_") public User getUserById(@PathVariable("id") String id) {
Quais parâmetros os métodos manipuladores aceitam?Os métodos na classe do controlador podem usar alguns tipos de objetos como argumentos aceitos. Então o Spring os implementará automaticamente. Por exemplo, o objeto HttpSession, Segurança etc.
@GetMapping public User getUserById(HttpSession session) {
Quais objetos podem ser usados (inglês) Que outras anotações existem para uso ao lado dos parâmetros do método?@MatrixVariable
- indica que o parâmetro deve ser associado a um par nome-valor do URI.@RequestHeader
- indica que o parâmetro deve estar associado ao cabeçalho da solicitação da web.@CookieValue
- indica que o parâmetro deve estar associado aos cookies.
O parâmetro pode ser declarado como um tipo de cookie ou como um tipo de valor de cookie (String, int, etc.).@ModelAttribute
- indica que o parâmetro está associado a um atributo de modelo nomeado disponível para visualização.@SessionAtribute
- indica que o parâmetro está associado a um atributo da sessão.
O que é a anotação @RequestBody?É usado para indicar que o método opera não com modelos, mas com dados. Ou seja, ele envia JSON, XML, texto etc. Geralmente é usado implicitamente nos serviços REST.
O que um método de controlador pode retornar?Tipos de objetos retornados e sua descrição (inglês) O que é uma visão?View é usado para exibir dados do aplicativo para o usuário.
O Spring MVC suporta vários provedores de exibição (eles são chamados de mecanismos de modelo) - JSP, JSF, Thymeleaf etc.
A interface View transforma objetos em servlets regulares.
Como o View é selecionado na fase de renderização? Como o View é exibido?DispatcherServlet contém uma lista de "mapeadores" especiais para exibição, os quais, com base na configuração do servlet, conterão caixas que implementam a interface ViewResolver .
Exibir processo de exibição:
- O controlador retorna a visualização de nome no DispactherServlet
- O nome mapeia para nomes no
ViewResolver
- Se um
ViewResolver
adequado for ViewResolver
, ele retornará o View que deve ser usado ao renderizar. - O DS passa o modelo com os dados em Exibir e exibe a saída (página html)
O que é um modelo?Este é um objeto de classe que implementa a interface Model e representa uma coleção de pares de valores-chave.
O conteúdo do modelo é usado para exibir dados na Visualização.
Por exemplo, se o View exibir informações sobre o objeto Customer
, ele poderá se referir às chaves do modelo, por exemplo customerName
, customerPhone
, e obter valores para essas chaves.
Objetos de valor do modelo também podem conter lógica de negócios.