javaweb过滤器

过滤器

它会在一组资源(jsp,servlet,css,html等等)的前面执行,它可以让请求得到目标资源,也可以不让请求到达

过滤器有拦截请求的能力

2 过滤器如何编写

1 写一个实现Filter接口

2 在web.xml进行配置

方法:

void init(FilterConfig) 创建之后马上执行:Filter会在服务器启动时就创建

void destory() 销毁之前执行,在服务器关闭时销毁

void doFilter(ServletRequest,ServletResponse,FilterChain) 每次过滤时都会执行

Filter是单例的。

web.xml

<filter>

<filter-name>xxx</filter-name>

<filter-class>包名+类名 </filter-class>

</filter>

<filter-mapping>

<filter-name>xxxx</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

3 FilterConfig 

获取初始化参数:getInitParameter()

获取过滤器名称:getFilterName()

获取application:   getServletContext()

    FilterChain

doFilter(ServletRequest,ServletResponse) 放行

4 可以指定多个过滤器,过滤器的执行顺序,是web.xml的配置顺序

在<filter-mapping>的配置顺序,决定

5 过滤器的四种拦截方式

  请求  REQUEST

  转发 FORWARD

  错误  INCLUDE

  包含 ERROR

在<filter-mapping>中进行配置 <dispatcher>拦截方式</dispatcher>

6过滤器的应用场景

执行目标资源之前做预处理工作,例如设置编码,这种 方式通常都会方行,只是在目标资源执行之前做一些准备工作

通过条件判断是否方行,例如校验当前用户是否已经登录,或者用户ip是否已经被禁用

在目标资源执行后,做一些后续的特殊处理工作

7 案例一 分ip统计网站的访问次数

统计工作需要在所有资源之前都执行,那么就可以放到Filter中了

不做拦截操作,只是统计数据

用Map装载统计数据 Map<String,Integer>

Map需要在Filter中用来保存数据

Map需要在页面中使用,打印Map中的数据

Map保存到ServletContext中

Map在服务器开启时创建,使用ServletContextListener


8 案例二  粗粒度权限控制

9 案例三 解决全站字符乱码

在过滤器方法中:

//处理post请求编码
request.setCharacterEncoding("UTF-8");
//处理get请求问题
/*1 调包request
*2 在放行时使用我们自己的request
*3 使用装饰类,修改request的getParameter()方法 编写装饰类,继承 HttpServletRequestWrapper
* */

HttpServletRequest req = (HttpServletRequest) request;
if(req.getMethod().equals("GET")){
EncodingRequest ef = new EncodingRequest(req);
chain.doFilter(ef, response);
}
else if(req.getMethod().equals("POST")){
chain.doFilter(request, response);
}

10 案例四 页面静态化

1 第一步,创建一个项目

jsp:链接页面 link.jsp

四个超链接:

查询所有:

查看SE分类

查看EE分类

查看框架分类

show.jsp  显示查询结果

Servlet“

BookServlet

findALL()

findByCategory()

BookService:略

BookDao:

List<Book> findAll()

List<Book> findByCategory(int category)

domain Book类

2 页面静态化概念

首次访问去数据库获取数据,然后把数据保存到一个html页面中

二次访问,就不再去数据库获取了,而是直接显示html”

1 目标:给出一个过滤器,把servlet请求的资源所做输出保存到html中,重定向到html页面

二次访问时,这个html已经存在,那么直接重定向,不再访问servlet

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值