nos permitem criar filtros que sao tao flexiveis ou tao poderoso quanto gostariamos. Por um lado, os filtros sao adicionados e removidos de forma programatica. Enquanto nos poderiamos escrever um mecanismo de propriedade para a manipulacao adicao e remocao de filtros atraves de um arquivo de configuracao, ainda nao teria nenhuma maneira de envolver os objetos de requisicao e resposta. Alem disso, sem um mecanismo sofisticado de buffer, esta estrategia nao preve postprocessing flexivel.O Padrao de filtro Estrategia fornece solucoes para estas questoes, aproveitando os recursos da especificacao Servlet 2.3, que forneceu uma solucao padrao para o dilema do filtro.Standard Estrategia FiltroOs filtros sao controladas declarativamente usando um descritor de implementacao, conforme descrito na especificacao do servelet versao 2.3, que, como desta escrita, esta em fase de projeto final.A especificacao Servlet 2.3 inclui um mecanismo padrao para a construcao de cadeias de filtro e discretamente adicao e remocao de filtros das cadeias. Os filtros sao construidos em torno de interfaces e, acrescentado ou retirado de uma forma declarativa, modificando o descritor de implementacao de uma aplicacao web.Nosso exemplo para essa estrategia sera criar um filtro que pre-processa os pedidos de qualquer tipo de codificacao de forma que cada pedido pode ser tratado de forma semelhante em nossa solicitacao nucleo manipulacao de codigo. Por que isso pode ser necessario? formularios HTML que incluem um upload de arquivo usar um tipo de codificacao diferente da maioria das formas. Assim, os dados do formulario que acompanha o upload nao esta disponivel atraves de simples getParameter () invocacoes. Entao, criamos dois filtros que os pedidos preprocess, traduzindo todos os tipos de codificacao em um unico formato consistente. O formato que escolhemos e ter todos os dados do formulario disponivel como atributos pedido.Um filtro manipula o formulario padrao de codificacao do tipo application / x-www-form-urlencoded ea outra manipula o menos comum tipo de codificacao multipart / form-data, que e utilizado para as formas que incluem o upload de arquivos. Os filtros de traduzir todos os dados do formulario para solicitacao de atributos, de modo que o nucleo mecanismo de manipulacao de pedido pode trabalhar com todos os pedidos da mesma forma, em vez de com a embalagem especial para diferentes codificacoes.Exemplo 6.8 mostra um filtro que traduz os pedidos usando a aplicacao do regime comum de codificacao do formulario. Exemplo 6.9 mostra o filtro que controla a traducao dos pedidos que usam o esquema de codificacao de forma concatenada. O codigo para estes filtros se baseia na versao final da especificacao do servlet, versao 2.3. Uma base de filtro e utilizado, bem como, a partir da qual ambos os filtros de herdar (veja a secao "Base de Filtro Estrategia"). A base do filtro, mostrado no Exemplo 6.7, fornece o comportamento padrao para o padrao de metodos de retorno de filtro.Exemplo 6.7 Base Filtro Estrategia Filtro Padraopublic class BaseEncodeFilter implements javax.servlet.Filter { private javax.servlet.FilterConfig myFilterConfig; public BaseEncodeFilter() { } public void doFilter( javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse, javax.servlet.FilterChain filterChain) throws java.io.IOException, javax.servlet.ServletException { filterChain.doFilter(servletRequest, servletResponse); } public javax.servlet.FilterConfig getFilterConfig() { return myFilterConfig; } public void setFilterConfig( javax.servlet.FilterConfig filterConfig) {