Visão geral
Este artigo se concentrará na implementação de redirecionamentos na primavera e discutirá as razões por trás de cada estratégia.
Por que redirecionar?
Vamos primeiro considerar por que você pode precisar fazer um redirecionamento no seu pedido de primavera.
É claro que existem muitos exemplos e razões possíveis. Um simples pode ser o pós -formulário, em torno do envio duplo do problema ou apenas delegar o fluxo de execução para outro método do controlador.
Uma coisa a observar é que o padrão típico de postagem/redirecionamento/get não resolve adequadamente o problema de comprometimento duplo - a questão de refrescar a página antes que a confirmação inicial seja concluída ainda pode resultar em um compromisso duplo.
Redirecionar usando o RedirectView
Vamos começar com este método simples - vamos dar um exemplo diretamente:
Por trás do RedirectView, disparará httpServletResponse.sendRedirect () - Isso executará o redirecionamento real.
Observe como injetamos propriedades redirecionadas no método aqui - a estrutura faz essa parte do trabalho pesado, permitindo interagir com essas propriedades.
Adicionamos atributo ao modelo RedirectTtributes - exponha -o como um parâmetro de consulta HTTP. O modelo contém objetos - geralmente strings ou objetos que podem ser convertidos em strings.
Agora, vamos testar nossa função de redirecionamento - use um comando simples para ajudar:
O resultado será:
Redirecionar usando o redirecionamento: prefixo
O método anterior usa o RedirectView, porque não é ideal por alguns motivos.
Primeiro, agora estamos acoplados à API da Spring porque usamos o RedirectView diretamente em nosso código.
Segundo, precisamos saber desde o início que, ao implementar a operação do controlador, seus resultados sempre serão redirecionados, mas esse nem sempre é o caso.
Uma opção melhor é usar o redirecionamento: prefixo - o nome de visualização de redirecionamento é injetado no controlador como outros nomes de exibição lógica. O controlador nem sabe que o redirecionamento está acontecendo.
Parece o seguinte:
Quando o nome da visualização é retornado com redirecionamento:, a classe URLBasedViewResolver (e todas as suas subclasses) a reconhece como uma indicação especial que precisa ser redirecionada. O restante do nome da visualização será tratado como um URL de redirecionamento.
Há um lugar a ser observado aqui - quando usamos o redirecionamento:/redirectedUrl Logical View aqui, estamos fazendo um redirecionamento relacionado ao contexto atual do servlet.
Se você precisar redirecionar para um URL absoluto, podemos usar um nome como este: Redirecionar: http: // localhost: 8080/spring-redirect/redirectedurl.
Então agora, quando executamos o comando curl:
Teremos um redirecionamento imediatamente:
Encaminhamento com prefixo avançado
Agora vamos ver como fazer algo um pouco diferente - um encaminhamento.
Antes de olhar para o código, vamos dar uma olhada em um resumo rápido e de alto nível da semântica do encaminhamento e redirecionamento:
O redirecionamento responderá com um novo URL contendo o código de resposta 302 e o cabeçalho da localização; Em seguida, o navegador/cliente fará uma solicitação para o novo URL novamente para a frente completamente no lado do servidor; O contêiner de servlet encaminha a mesma solicitação para o URL de destino; O URL no navegador não precisa ser alterado
Agora vamos dar uma olhada no código:
Como redirecionar:, o prefixo direto: será analisado pelo URLBasedViewResolver e suas subclasses. Internamente, isso cria um internoResourceView que executa uma operação requestDispatcher.forward () para a nova visualização.
Quando executamos o comando com Curl:
Teremos o HTTP 405 (método não permitido):
Nesse caso, temos apenas uma solicitação enviada do navegador/cliente para o lado do servidor em comparação com as duas solicitações que temos na solução de redirecionamento. Obviamente, as propriedades adicionadas pelos redirecionamentos não são necessários.
Propriedades contendo redirectattributes
Em seguida - vamos analisar as propriedades de aprovação em um redirecionamento - aproveite a Redirectattribures na estrutura:
Como mencionado anteriormente, podemos inserir objetos de propriedade diretamente no método - o que facilita muito o uso do mecanismo.
Observe também que também adicionamos um atributo flash - esta é uma propriedade que não será adicionada ao URL. Podemos alcançar essa propriedade - mais tarde podemos usar @modelattribute ("flashattribute") no método final de destino redirecionado para acessar o atributo flash:
Portanto, conclua com sucesso - se você precisar usar o CURL para testar a função:
Seremos redirecionados para o novo local:
Dessa forma, o uso de redirectattribures em vez do ModelMap nos dá a capacidade de compartilhar algumas propriedades apenas entre os dois métodos envolvidos na operação de redirecionamento.
Outra configuração sem prefixos
Agora vamos explorar outra configuração - redirecionamento sem prefixos.
Para conseguir isso, precisamos usar org.springframework.web.servlet.view.xmlViewResolver:
Em vez de org.springframework.web.servlet.view.internalResourceViewResolver que usamos em nossa configuração anterior:
Também precisamos definir um Bean RedirectView na configuração:
Agora podemos nos referir a este novo feijão através do ID para acionar o redirecionamento:
Para testá -lo, usamos o comando curl novamente:
O resultado será:
Redirecionar solicitação de postagem HTTP
Para casos de uso, como pagamentos bancários, podemos precisar redirecionar solicitações de postagem HTTP. Dependendo do código de status HTTP retornado, a solicitação de postagem pode ser redirecionada para HTTP GET ou POST.
De acordo com a referência do protocolo HTTP 1.1, os códigos de status 301 (removidos permanentemente) e 302 (encontrados) permitem que o método de solicitação seja alterado da postagem para obter. A especificação também define os códigos de status 307 relevantes (redirecionamento temporário) e 308 (redirecionamento permanente) que não permitem alterar o método de solicitação da postagem para obter.
Agora, vamos dar uma olhada no código para redirecionar a solicitação de postagem para outra solicitação de postagem:
Agora, vamos usar o comando curl para testar a postagem redirecionada:
Estamos sendo redirecionados para o endereço de destino:
para concluir
Este artigo apresenta três maneiras diferentes de implementar redirecionamentos na primavera, como lidar/passar atributos ao executar esses redirecionamentos e como lidar com redirecionamentos de solicitações de postagem HTTP.
O acima é o guia de redirecionamento do vspring (redirecionamento) e questões de estratégia relacionadas apresentadas a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!