FILTROS
Em sistemas webs alguns tipos de usuários não podem acessar certas partes do site. Por exemplo, uma pessoa que vai comprar algum item online não pode ter capacidade de alterar o estoque do site. Uma forma de fazer esse controle de acesso é usando os filtros da API Servlet. Um filtro também pode ser útil para fazer tratamento de erros, medir tempo de execução e fazer uma conexão com o banco de dados a cada requisição.
Por definição uma classe que implementa javax.servlet.Filter deve implementar 3 métodos:
void init(FilterConfig config) throws ServletException
void destroy()
void doFilter(ServletRequest re, ServletResponse res, FilterChain chain) throws IOException, ServletException
O primeiro passo para começar a mexer com filtros, é configurar o web.xml:
<filter> <filter-name>tempo</filter-name> <filter-class> br.ucb.filtro.TempoExecucao </filter-class> </filter> <filter-mapping> <filter-name>tempo</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Crie uma página JSP simples, e digite o formulário abaixo:
<form action = "tempo"> <input type="submit" value="Enviar"> </form>
Logo em seguida analise a classe a seguir e crie ela em seu projeto.
package br.ucb.filtro; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; public class TempoExecucao implements Filter{ @Override public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { long inicial = System.currentTimeMillis(); chain.doFilter(request, response); long tempoFinal = System.currentTimeMillis(); String uri = ((HttpServletRequest)request).getRequestURI(); System.out.println("Tempo da requisição de " + uri + " demourou (ms): " + (tempoFinal - inicial)); } @Override public void init(FilterConfig arg0) throws ServletException { } }
A classe TempoExecução irá calcular o tempo que uma requisição levou para ser processada. Quando você for rodar a aplicação, a página não irá para lugar algum, apenas dará um erro 404, mas veja a console do Eclipse, lá estará o que você fez na classe. Essa é apenas uma das utilidades do filtro.
Atividade de Fixação
No intuito de fixar a aprendizagem iniciada por meio deste módulo e verificar como seu entendimento sobre este conteúdo está, estão sendo sugeridos alguns exercícios de fixação para serem resolvidos. Clique no link de exercícios ao lado, pois será por meio dele iniciada a lista de exercícios sobre os conteúdos estudados até este momento nesta disciplina.