java web servlet 过滤器_javaWeb中servlet开发——过滤器

servlet开发——过滤器(filter)

servlet有三种,分为简单servlet、过滤器servlet、监听servlet

简单servlet是作为一种程序所必须的开发结构保存的,继承httpServlet类形式。

过滤器servlet和监听servlet不是程序所必须的。

要想完成一个过滤器的开发,首先必须让一个类实现Filter接口,此接口是javax.serclet中的。根据这个包的特点可发现,此接口的主要功能是完成公共协议的操作。

751f69408382c655df4c59b07327e39c.png

Filter接口中的方法:

32b8bc830e3e5e8ba39c3bbb2a2c7ed7.png

简单的servlet必须手工调用,如在form表单的action之中编写路径。

过滤这种操作本身属于本身自动完成的。package org.lxh.filterdemo ;

import java.io.* ;

import javax.servlet.* ;

public class SimpleFilter implements Filter {

public void init(FilterConfig config)

throws ServletException{

// 接收初始化的参数

String initParam = config.getInitParameter("ref") ;

System.out.println("** 过滤器初始化,初始化参数=" + initParam) ;

}

public void doFilter(ServletRequest request,

ServletResponse response,

FilterChain chain)

throws IOException,

ServletException{

System.out.println("** 执行doFilter()方法之前") ;

chain.doFilter(request,response) ;

System.out.println("** 执行doFilter()方法之后") ;

}

public void destroy(){

System.out.println("** 过滤器销毁。") ;

try{

Thread.sleep(1000);//线程中休眠,可以看出销毁输出

}cathc(Exception e){

}

}

}

过滤器完成,也需要在web.xml中进行配置。先写filer配置,再写简单servlet配置

Welcome to Tomcat

Welcome to Tomcat

simple

org.lxh.filterdemo.SimpleFilter

ref

HELLOMLDN

simple

/*

此处,表示一个过滤器的过滤路径,现在既然是”/*则表示对 一个目录中的所有内容进行过滤。

过滤器不需要任何配置,就可以在服务器启动的时候自动地完成初始化操作。

一个过滤器的生命周期和servlet是相同的。

doFilter方法中FitlerChain作用

6db827fc281c77cd8e17f19341fafa0f.png

过滤器是执行两次的,一个过滤器本身可以对多个路径进行过滤。那么过滤器如何应用?

在实际开发中,应用最频繁的就是编码过滤和登录验证。

对应编码,所有的页面都需要使用,只要是页面,都需要编写request.setCharacterEncoding()方法对编码进行限制。

packageorg.lxh.filterdemo ;import java.io.*;import javax.servlet.*;public class EncodingFilter implementsFilter {privateString charSet ;public voidinit(FilterConfig config)throwsServletException{//接收初始化的参数

this.charSet = config.getInitParameter("charset") ;

}public voiddoFilter(ServletRequest request,

ServletResponse response,

FilterChain chain)throwsIOException,

ServletException{

request.setCharacterEncoding(this.charSet) ;

chain.doFilter(request,response) ;

}public voiddestroy(){

}

进行web.xml配置

encoding

org.lxh.filterdemo.EncodingFilter

charset

GBK

encoding

/*

至于登录验证操作,都需要session验证,但每个页面都写session判断,相当复杂,所以可以对一些需要限制的地方采用登录验证。

packageorg.lxh.filterdemo ;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class LoginFilter implementsFilter {public voidinit(FilterConfig config)throwsServletException{

}public voiddoFilter(ServletRequest request,

ServletResponse response,

FilterChain chain)throwsIOException,

ServletException{//session属于http协议的范畴

HttpServletRequest req =(HttpServletRequest) request ;

HttpSession ses=req.getSession() ;if(ses.getAttribute("userid") != null) {//已经登陆过了,则可以访问

chain.doFilter(request,response) ;

}else{

request.getRequestDispatcher("login.jsp").forward(request,response) ;

}

}public voiddestroy(){

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值