GoConqr hat ein neues Design! Sag uns, wie es dir gefällt.

Notizen

Filtros - Exemplos

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Portugiesisch 22 Seiten

Filtros - Exemplos

Inhalt der Notizen (22)

Seite 1

Diretório do projeto

Esse projeto ilustra o conceito de filtros web. Algumas considerações importantes a respeito de filtros:

Um filtro é um objeto que intercepta uma mensagem entre uma fonte de dados origem e uma fonte de dados destino e então filtra os dados passado entre as fontes. Ou seja, o filtro é um componente web que reside no servidor web e filtra as requisições e as respostas que são passadas entre um cliente e um recurso.

Algumas tarefas que podem ser realizadas por filtros:

Analisar uma requisição e decidir se a requisição pode ser passada ao recurso requerido ou então o próprio filtro deve criar uma resposta apropriada.

Manipulam uma requisição, incluindo headers de requisição e então, empacotam a requisição em um objeto apropriado de requisição customizado antes que seja entregue ao recurso.

Manipulam uma resposta, empacotando-a dentro de um objeto response customizado antes de entregar a resposta ao cliente.

Ao receber a requisição, um filtro pode então gerar ele mesmo a resposta, repassar a requisição modificada ou não para o próximo filtro de uma cadeia de filtros, ou então, se o filtro corrente for o último, redirecionar a requisição ao recurso apropriado, ou então, dependendo dos dados da requisição, repassar o processamento da mesma para um recurso diferente.

É importante dizer que quando retorna ao cliente, a resposta volta passando pelo mesmo conjunto de filtros em ordem inversa.

Filtros - Exemplos

Filtros - Exemplos

Filtros - Exemplos

Seite 2

Arquivo index.html

Aqui uma página de exemplo que explica utilização de filtros e dos exemplos aqui expostos. No próximo slide vemos a explicação pela execução dessa página.

Filtros - Exemplos

Filtros - Exemplos

Seite 3

Execução de index.xml

Todo e qualquer filtro deve ser configurado no descritor de implantação da aplicação web. Nos exemplos, conforme acompanhamos abaixo, temos um filtro de nome HelloWorld, vinculado a classe filter HelloWorldFilter, que filtra todos os padrões de URL que se encaixam com /filter/*. Então qualquer chamada via URL que se encaixe nesse padrão, chamará o filtro HelloWorldFilter.java

No descritor de implantação ( arquivo web.xml ) dessa aplicação criamos múltiplos filtros que serão chamados em cadeia dependendo do padrão de URL digitado. Esses filtros serão avaliados pelo container da seguinte forma:

O container primeiro analisa segundo a ordem dos filtros descritos no arquivo web.xml, todos os < filter-mapping > cujo valor de < url-pattern > correspondem com o padrão de URL requisitado.

Após essa analise, o container analisa segundo a ordem descrito no arquivo web.xml, todos os < filter-mapping > cujo valor de < servlet-name > estejam vinculados ao padrão de URL passado ao servidor.

Também podemos alterar os objetos ServletRequest ou HttpServletRequest, e ServletResponse ou HttpServletResponse, de modo que podemos criar comportamentos customizados para processamento da requisição e da resposta enviada a um cliente e criar um filtro que utilize esses objetos request e response customizados, podendo passá-los como parâmetros para o método doFilter() da interface FilterChain(), enviando-os ao próximo filtro de uma cadeia de filtros.

Tais classes que alteram essas requisições devem subclassificar a interface ServletRequestWrapper ou HttpServletRequestWrapper.

Da mesma forma, tais classes que alteram essas respostas,devem subclassificar a interface ServletResponseWrapper ou HttpServletResponseWrapper.

Assim, o filtro TextToHTMLFilter usa um objeto request customizados para, receber uma requisição, fazendo com que a mesma use um valor nulo para o header if-modified-since, o que faz com que o container sempre obtenha um recurso do servidor web, sem usar o cache.

O filtro TextToHTMLFilter utiliza também um objeto response customizado para armazenar todos os dados escritos pelo servidor web em um array de bytes, de modo que seja possível mostrar o conteúdo de um arquivo de texto dentro do padrão HTML, como uma página HTML com um fundo pré-estabelecido.

Filtros - Exemplos

Seite 4

Visão do arquivo texto ReportJanFeb.txt

Aqui temos uma visão do arquivo de texto ReportJanFeb.txt, arquivo que será embutido como conteúdo de uma página HTML com um plano de fundo que se encontra na pasta raiz da aplicação através do filtro TextToHTMLFilter.

Filtros - Exemplos

Seite 5

Arquivo web.xml

Aqui temos uma visão do arquivo web.xml com os mapeamentos para os filtros dessa aplicação:

HelloWorldFilter: será chamado caso o padrão de URL enviado ao servidor e definido por < url-pattern > seja equivalente a /filter/*

TesteFilter: filtro mapeado para vários < filter-name > dependendo do padrão URL enviado ao servidor web. Exemplo: será chamado o filtro de nome FilterC vinculado ao arquivo de filtro TesteFilter caso o padrão de URL enviado ao servidor seja equivalente a /red/*

Ainda, os filtros de nome FilterA e FilterB estão associados ao servlet RedServlet, o que quer dizer que, dado um padrão de URL associado a esse servlet, serão chamados os filtros FilterA e FilterB, vinculados a classe Filter TesteFilter, e após essa execução, o controle do processamento da resposta final dada ao cliente será vinculada ao servlet RedServlet.

Por último, TextToHTMLFilter está mapeado para interceptar padrões de URL *.txt. Esse filtro se utilizará de objetos request e response customizados de modo a embutir um arquivo de texto residente no diretório raiz do projeto e vinculado à URL digitada pelo usuário em um arquivo HTML com um fundo definido.

Filtros - Exemplos

Filtros - Exemplos

Filtros - Exemplos

Seite 6

Arquivo HelloWorldFilter.java

Esse filtro vai interceptar todas as requisições que encontrarem o padrão de URI /filter/* e responderá com uma mensagem HelloWorldFilter.

A configuração para esse filtro deve ser declarada no arquivo web.xml.

Podemos ver através desse exemplo alguns passos da codificação de filtros:

Todos os filtros devem implementar a interface javax.servlet.Filter.

A classe do filtro deve implementar todos os métodos abstratos da interface Filter:

Método init()

Assinatura: public void init(FilterConfig filterConfig) throws ServletException

Análogo ao método init(ServletConfig) do Servlet e implementado tipicamente para gravar os parâmetros de FilterConfig para uso posterior.

Método doFilter()

public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws Java.io.IOException, ServletException;

O filtro pode processar a requisição, redirecionar a requisição para o próximo componente da cadeia de filtros (chain) ou ele próprio responder ao cliente. Pode também redirecionar a requisição a algum outro recurso através dos métodos include() ou forward() de RequestDispatcher, obtido através dos objetos ServletRequest ou ServletContext.

Método destroy()

O container chama esse método como o último do objeto Filter.

Usado para que o objeto filtro libere os recursos adquiridos durante seu ciclo de vida e para executar limpeza de tarefas antes que o filtro fique fora de serviço.

Filtros - Exemplos

Filtros - Exemplos

Seite 7

Execução de HelloWorldFilter.java

Digitamos na barra de endereços do navegador o caminho da aplicação chapter07 e o padrão de URL /filter/*, conforme discutido, esse padrão de URL irá ser interceptado pelo filtro HelloWorldFilter.java, e ele mesmo responderá ao cliente enviando a mensagem vista abaixo.

Filtros - Exemplos

Seite 8

TestFilter.java

Aqui temos o código para TesteFilter.java. Conforme descrito anteriormente no arquivo web.xml, esse filtro está configurado nesse arquivo para filtrar vários padrões de URL com vários nomes de filtro diferente para cada padrão de URL filtrado, conforme consta no arquivo web.xml.

Dependendo do padrão de URL que for utilizado para essa aplicação, um certo conjunto de filtros será chamado ( todos associados a TestFilter.java) e assim será impresso o nome do filtro chamado através de FilterConfig.getFilterName().

O container web verifica quais filtros serão chamados dependendo da URL passada pela ordem dos filtros cadastrados no arquivo web.xml, ou seja, chama primeiro os filtros mapeados pela URI que tenham sido informados primeiro, obedecendo as seguintes regras:

O container tenta encontrar todos os < filter-mapping > no descritor de implantação com um padrão de URL, < url-pattern > que combine com a URI requisitada.

O container tenta encontrar todos os < filter-mapping > no descritor de implantação com um < servlet-name > que esteja mapeado para a URI requisitada.

Aqui será importante reparar na assinatura do método doFilter() e atentar para a chamada a chain.doFilter(request,response) ao final da execução do trabalho do filtro.

A chamada a chain.doFilter(request,response) significa que queremos continuar o processo de chamada ao próximo filtro da cadeia de filtros. Isso passará o controle da execução da requisição ao próximo filtro da cadeia de filtros conforme informado no web.xml ou então passará o controle para o recurso mapeado pelo padrão de URL informado, caso o filtro atual seja o último filtro da cadeia de filtros.

O método init() da interface Filter servirá para obter os parâmetros iniciais do filtro e para gravar a referência ao objeto FilterConfig conforme seja necessário.

Filtros - Exemplos

Filtros - Exemplos

Seite 9

RedServlet.java

O servlet RedServlet está vinculado a certas chamadas de filtro ( FilterA e FilterB ), que estão vinculados ao filtro TesteFilter.

Isso que dizer que, dado um padrão de URL mapeado para o servlet RedServlet, os filtros serão executados conforme foi exposto, mas antes de passar a execução ao servlet RedServlet, serão chamados os filtros vinculados a esse servlet e, após o processamento desses filtros, o controle do processamento da resposta passará ao servlet RedServlet.

Aqui, o servlet RedServlet irá incluir na resposta enviada ao cliente um trecho de página HTML com seu nome de servlet dado pela chamada a getServletName().

Filtros - Exemplos

Seite 10

NonCachingRequestWrapper

Aqui a classe NonCachingRequestWrapper será utilizada pela classe filtro TextToHTMLFilter de modo a modificar o objeto request ( já que a classe aqui em questão é um HttpServletRequestWrapper ), já que nessa classe fazemos com que o header if-modified-since atue de modo que sempre irá atualizar a página buscando recursos no servidor web e nunca na memória cache.

As classes ServletRequestWrapper e HttpServletRequestWrapper são implementações concretas das interfaces ServletRequest e HttpServletRequest, sendo utilizada de modo a modificar um objeto request passado pelo cliente ao método doFilter() da interface FilterChain.

Filtros - Exemplos

Seite 11

TextResponseWrapper.java

A classe TextResponseWrapper é uma subclasse de HttpServletResponseWrapper, sendo utilizadas no filtro TextToHTMLFilter de modo a alterar a resposta dada ao cliente. Aqui, antes do envio ao cliente, os dados serão armazenados em um array de bytes.

Isso é feito de modo que seja possível embutir o conteúdo de um arquivo *.txt digitado na URL do browser em uma página HTML com uma imagem de fundo estabelecida.

Aqui, o array de bytes resultante do processamento em TextResponseWrapper corresponderá ao arquivo *,txt passado pelo cliente ao servidor web. Bastará ao filtro TextToHTMLFilter incluí-lo em tags HTML apropriadas de modo que seja possível mostrá-lo como uma página HTML com imagem de fundo ao cliente.

Acompanhe as explicações dadas pelas linhas de código abaixo:

Filtros - Exemplos

Filtros - Exemplos

Filtros - Exemplos

Seite 12

TextToHTMLFilter.java

Aqui o filtro TextToHTMLFilter.java utiliza os objetos wrapper modificados de request e response pelas classes NonCachingRequestWrapper e TextResponseWrapper, respectivamente de modo que seja possível embutir o conteúdo de um arquivo textual em uma página HTML com uma imagem de fundo definida e apresentá-la ao cliente. O arquivo de texto digitado na URL do browser e utilizado para isso deve estar no diretório raiz do projeto.

Basicamente o filtro passa os objetos empacotados request e response para o método doFilter() da interface FilterChain de modo que após esse ponto o relatório textual passado via URL do navegador já está armazenado como um array de bytes pelo response modificado por TextResponseWrapper.

Nesse ponto, o filtro irá construir as tags HTML necessárias e incluir o array de bytes como conteúdo do corpo do documento HTML a ser produzido, Tal conteúdo será incorporado ao StringBuffer chamado htmlFile, com o conteúdo html enviado ao cliente através do objeto PrintWritter pw através da chamada a pw.print(htmlFile.toString()).

Acompanhar a explicação e codificação a seguir:

Filtros - Exemplos

Filtros - Exemplos

Seite 13

Chamada ao filtro TextToHTMLFilter.java

Conforme descrito no arquivo web.xml, a chamada ao padrão de URL *.txt a partir do browser, será direcionada ao filtro TextToHTMLFilter.java, que embutirá dados textuais e uma imagem de fundo na saída HTML da página.

Filtros - Exemplos

Seite 14

Chamada aos filtros e servlets mapeados para a URL aaa.red

Aqui, dado um padrão de URL serão chamados uma sequência de filtros vinculados ao arquivo TesteFilter, conforme as regras a seguir:

Serão chamados os filtros cadastrados no arquivo web.xml por ordem em que são informados e cujo < filter-mapping > informado corresponda ao valor da URL passada ao browser.

Serão chamados os filtros cadastrados no arquivo web.xml por ordem em que são informados e cujo valor de < servlet-name > esteja mapeada por um padrão de URL que corresponda ao valor da URL passada ao browser.

Conforme podemos ver, a chamada ao padrão de URL aaa.red invocará os filtros FilterE, FilterA, FilterB e o servlet RedServlet.

Filtros - Exemplos

Seite 15

Chamada aos filtros e servlets mapeados para a URL red/aaa.red

Conforme consta abaixo, a chamada ao padrão de URL red/aaa.red ativará os filtros FilterC, FilterE, FilterA, FilterB e o servlet RedServlet.

Filtros - Exemplos

Seite 16

Chamada aos filtros e servlets mapeados para a URL red/red/aaa.red

Conforme vemos abaixo, a chamada ao padrão de URL red/red/aaa.red ativará os filtros FilterC, FilterD, FilterE, FilterA, FilterB e, ao final, o servlet RedServlet.

Filtros - Exemplos

Seite 17

Chamada aos filtros e servlets mapeados para a URL red/red/red/aaa.red

Conforme vemos abaixo, a chamada ao padrão de URL red/red/red/aaa.red ativará os filtros FilterC, FilterD, FilterE, FilterA, FilterB e, ao final, o servlet RedServlet.

Filtros - Exemplos

Seite 18

Chamada aos filtros e servlets mapeados para a URL red/red/red/aaa

Conforme vemos abaixo, a chamada ao padrão de URL red/red/red/aaa ativará os filtros FilterC, FilterD, FilterA, FilterB e, ao final, o servlet RedServlet.

Filtros - Exemplos

Seite 19

Chamada aos filtros e servlets mapeados para a URL red/red/red/aaa.doc

Conforme vemos abaixo, a chamada ao padrão de URL red/red/red/aaa.doc ativará os filtros FilterC, FilterD, FilterA, FilterB e, ao final, o servlet RedServlet.

Filtros - Exemplos

Seite 20

Chamada aos filtros e servlets mapeados para a URL red/red/aaa

Abaixo vemos o resultado da chamada a URL red/red/aaa.

Na realidade, conforme pode ser analisado pelo arquivo web.xml, a chamada a essa URL irá ativas os filtros FilterC, FilterD

Devido ao fato de RedServlet não ser chamado como recurso que fará os ajustes finais antes de se mostrar a mensagem ao usuário, a página de erro abaixo será chamada para a última chamada a FilterChain.doFilter(request, response)

Filtros - Exemplos

Seite 21

Chamada aos filtros e servlets mapeados para a URL /red/aaa

Conforme consta no arquivo web.xml, a chamada a red/aaa irá invocar o filtro FilterC. Após isso, o próximo recurso será chamado para continuar a atender a requisição através da chamada a FilterChain.doFilter(request,response) e como não existe próximo recurso, a página com erro 404 será chamada pelo container web.

Filtros - Exemplos

Seite 22

Chamada aos filtros e servlets mapeados para a URL aaa.doc

Conforme analisado no arquivo web.xml, a chamada ao padrão de URL aaa.doc pelo cliente não será atendido por nenhum filtro cadastrado. Em razão disso, a página associada ao erro 404 será chamada pelo servidor web.

Filtros - Exemplos

Informationen

Beschreibung
Concursos Públicos Desenvolvimento de Software (OCEJWCD 6 ONLINE COURSE) Notiz am Filtros - Exemplos, erstellt von Luis Felipe Guariento am 27/04/2018.
Aufrufe
0
Bewertung

Feedback

Worum geht es?

Wie gefällt dir das neue Design?

Dein Eindruck