Preparando-se para a certificação profissional da Spring. Perguntas sobre Spring MVC

Saudações a todos.


Este é o quinto artigo de uma série de artigos de treinamento com Spring Professional Certification.


Sumário
  1. Injeção de dependência, contêiner, IoC, feijão
  2. AOP (programação orientada a aspectos)
  3. JDBC, Transações, JPA, Dados da Primavera
  4. Bota de mola
  5. Spring mvc
  6. Segurança de primavera
  7. REST
  8. Teste

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?
  1. A solicitação vem em DispatcherServlet
  2. DispatcherServlet envia uma solicitação para um dos controladores com base na URL da solicitação
  3. 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
  4. 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.


Âmbito de aplicaçãoDescrição do produto
RequestEscopo - 1 solicitação HTTP. Um novo bean é criado para cada solicitação.
SessionEscopo - 1 sessão. Um novo bean é criado para cada sessão.
ApplicationEscopo - Ciclo de Vida do ServletContext
WebSocketEscopo - Ciclo de vida do WebSocket

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?
  1. DispatcherServlet recebe uma solicitação
  2. O DS contém uma lista de classes que implementam a interface HandlerMapping
  3. O manipulador encontra o método lá e envia uma solicitação para ele na classe do controlador
  4. O método manipulador executa a solicitação

Conte-nos sobre a anotação @RequestMapping

Esta 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 - URI
  • headers - cabeçalhos
  • name - nome do manipulador
  • params - parâmetros
  • produces - tipo de dados retornados (JSON, XML, texto). Usado no REST
  • consumes - 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) { //some logic } 

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) { //some logic } 

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) { //some logic //      } 

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:


  1. O controlador retorna a visualização de nome no DispactherServlet
  2. O nome mapeia para nomes no ViewResolver
  3. Se um ViewResolver adequado for ViewResolver , ele retornará o View que deve ser usado ao renderizar.
  4. 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.

Source: https://habr.com/ru/post/pt470566/


All Articles