Prefácio
O sistema interceptador é uma parte importante da estrutura do Struts2. Não é exagero dizer que, sem o sistema interceptador, não haverá uma estrutura STRUTS2 tão fácil de usar. Na estrutura do Struts2, um grande número de interceptores concluiu muitas funções básicas. Por exemplo, o Params Interceptor é responsável por analisar os parâmetros das solicitações HTTP e definir as propriedades da ação; O interceptador de servlet-config passa diretamente na instância HttpServletRequest e na instância de HttPervletResponse na solicitação HTTP à ação; O FileUpload Interceptor é responsável por analisar o domínio do arquivo nos parâmetros de solicitação e definir um domínio de arquivo nas três propriedades da ação ... tudo isso é feito pelo interceptador interno. Portanto, dominando os princípios e métodos de uso de interceptores no STRUTS2, podemos entender a "linha de vida" da estrutura do Struts2.
No entanto, até agora, além de configurar um filtro STRUTSPERPAREANDexecuteFilter no web.xml, ainda não contatamos nenhum outro interceptores. Então, por que nosso aplicativo pode funcionar bem? De fato, o STRUTS2 permitiu um grande número de interceptores comuns por padrão. Esses interceptores funcionarão enquanto o pacote configurado para ação herdar o pacote de defasa-padrão. Vamos dar uma olhada no interceptador interno do Struts2.
Interceptador interno de struts2
Existem muitos interceptores embutidos na estrutura do Struts2. Esses interceptores quase completam 70% do trabalho da estrutura STRUTS2, incluindo parâmetros de solicitação de análise, atribuindo parâmetros de solicitação aos atributos de ação, etc. O design inteligente do Struts2 é em grande parte devido ao design do interceptador; Quando é necessário estender a função STRUTS2, você só precisa fornecer o interceptador correspondente e configurá -lo no contêiner Struts2.
Esses interceptores embutidos são configurados no arquivo struts-default.xml na forma de pares de classe de nome, onde o nome é o nome do interceptador, que é o identificador exclusivo do interceptador a ser usado posteriormente; Classe especifica a classe de implementação do interceptador. Para uma descrição detalhada desses interceptores embutidos, consulte a documentação oficial.
Configure o interceptador
Definir um interceptador no arquivo struts.xml requer apenas a especificação de um nome interceptador para a classe interceptadora, e a definição interceptadora é concluída. Defina um interceptador usando <interceptador .../>, por exemplo:
<!-Defina o interceptador especificando o nome do interceptador e a classe de implementação do interceptador-> <Interceptor name = "Nome do interceptador"> <param name = "param name"> param value </amam> </socceptor>
Além disso, vários interceptores podem ser conectados juntos para formar uma pilha interceptadora e <interceptor-ref .../> é usado no interceptador para definir a referência interceptora. Por exemplo:
<Interceptor-Stack Name = "Interceptor Stack One"> <Interceptor-Ref Name = "Interceptor One"/> <Interceptor-Ref Name = "Interceptor Two"/> ... </Interceptor Stack>
Da perspectiva da estrutura do programa, a pilha interceptadora consiste em múltiplos interceptores; Mas, da perspectiva da função do programa, a pilha interceptores e o interceptador são iguais, e os métodos que eles contêm serão executados automaticamente antes da execução do método de execução de ação. Portanto, podemos tratar completamente a pilha interceptadora como um interceptador maior.
Como a pilha interceptores e o interceptador são consistentes, a pilha interceptores também pode conter uma pilha interceptora, por exemplo:
<Interceptor-Stack Name = "Interceptor Stack 2"> <interceptor-ref name = "Modeldriven"/> <interceptor-ref name = "Interceptor Stack 1"/> </Interceptor-STACK>
Usando interceptador
Depois que a pilha interceptores e o interceptador são definidos, essa pilha interceptor ou interceptador pode ser usada para interceptar a ação. O comportamento de interceptação do interceptador será executado antes que a ação seja executada.
Usando o elemento <interceptor-ref .../>, a sintaxe de configuração do uso de um interceptador em uma ação é exatamente a mesma que a sintaxe de referência a um interceptador ao configurar a pilha interceptora. Por exemplo:
<ação name = "login"> <resultado name = "error">/error.jsp </resultado> <resultado name = "succcess">/walcma.jsp </resultado> <!-interceptor Stack-> <interceptor-ref name = "defaultStack"/> <!-intercept-ref name = "test1"/> <! name = "key"> parâmetros dinâmicos </param> </interceptor-ref> </ction>
Após a conclusão dessa configuração, esses três interceptores funcionarão antes que o DownloadAction seja executado.
Configure o interceptador padrão
Ao configurar um pacote, ele pode ser especificado com um interceptador padrão. Depois que um interceptador padrão é especificado para um pacote, o interceptador padrão funcionará se a ação nesse pacote não especificar explicitamente o interceptador. No entanto, uma vez que apliquemos explicitamente um interceptador à ação no pacote, o interceptador padrão não funcionará; Se a ação exigir que o interceptador padrão seja usado, você deverá configurar manualmente a referência ao interceptador.
O interceptador padrão do pacote em que a ação está localizada entrará em vigor apenas se não houver explicitamente aplicado na ação.
Configure o interceptador padrão para usar o elemento <padrão-interceptor-ref .../>, que é usado como criança do elemento <pacote .../>, e configure o interceptador padrão para todas as ações neste pacote. Por exemplo:
<padrão-interceptor-ref name = "Interceptador padrão"/>
Você também pode especificar parâmetros para o interceptador padrão, por exemplo:
<default-interceptor-ref name = "interceptador padrão"> <param name = "nome do parâmetro"> Valor do parâmetro </param> </default-interceptor-ref>
No arquivo struts-default.xml, um pacote abstrato chamado Struts-Default está configurado, no qual uma referência interceptadora padrão chamada DefaultStack é definida. Quando o pacote que definimos herda o pacote de defasa-padrão, ele também herda sua pilha interceptadora padrão: DefaultStack, o que também significa que, se não aplicarmos explicitamente o interceptador para ação, a pilha de interceptor de defaultstack entrará em efeito automaticamente.
Interceptador personalizado
1>. Adicione uma classe para herdar a classe AbstractInterceptor ou implementar a interface interceptores
classe pública TimeInter-cECETOR estende abstrumInterceptor {/*** O valor de retorno do método central da interceptação é uma string*/@substituir string intercept (ACTIONVocation Invocation) lança exceção {// TODO Auto-Generated Method Stubreturn "Login";}}2>. Adicione o nó infantil dos interceptores no pacote struts.xml e adicione o nó interceptador sob ele
<names do pacote = "bens" namespace = "/bens" estends = "Common-pkg"> <igreptectors> <interceptor name = "timeInterceptor"> </socceptor> </socceptors> </cackage>
3> .Add Child Node Interceptor-Ref sob o nó de ação que você deseja ser interceptado
<ação name = "list_category" method = "list"> <interceptor-ref name = "timeInterception"> </interceptor-ref> <name de resultado = "list" type = "despacher">/páginas/category/list.jsp </resultado> </ction>
Resumir
Este artigo fornece um resumo preliminar do núcleo do STUTS2 - o interceptador. No artigo subsequente, implementaremos nosso próprio interceptador e aplicaremos os pontos de conhecimento resumidos neste artigo.
Ok, o acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.