servlet中的Filter接口(过滤器接口)

一.介绍

====

(1)来自于Servlet规范下接口,在Tomcat中存在于servlet-api.jar包

(2)Filter接口实现类由开发人员负责提供,Http服务器不负责提供

(3)  Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截

二.具体作用

======

1.拦截Http服务器,帮助Http服务器检测当前请求合法性.

2.拦截Http服务器,对当前请求进行增强操作.

三.Filter接口实现类开发步骤

=====================

其开发步骤一共有三步:

(1)创建一个Java类实现Filter接口

(2)重写Filter接口中doFilter方法,完成我们具体想要实现的功能。

(3)web.xml将过滤器接口实现类注册到Http服务器(此处我们是tomcat),并且可以设置去通知我们的Tomcat在调用何种资源文件前需要使用我们的过滤器类进行拦截。

四.Filter拦截地址格式

==============

(1) 命令格式:

首先将我们的的Filter接口实现类注册到我们的tomcat容器

oneFilter

com.bjpowernode.filter.OneFilter

oneFilter

想要拦截的路径

首先使用filter将我们的过滤器接口实现类注册到我们的tomcat,然后此时再使用filter-mapping来指定我们注册到tomcat的过滤器类需要拦截哪个资源文件。

(2)下面我们来介绍下 中可以放入哪些拦截路径,假设此时我们设置的过滤器类为OneFilter

要求Tomcat在调用某一个具体文件之前,来调用OneFilter拦截

/img/mm.jpg

要求Tomcat在调用某一个文件夹下所有的资源文件之前,来调用OneFilter拦截

/img/*

要求Tomcat在调用任意文件夹下某种类型文件之前,来调用OneFilter拦截

*.jpg

要求Tomcat在调用网站中任意文件时,来调用OneFilter拦截

/*

要求Tomcat在调用网站中的**某个动态资源文件(servlet实现类)**时,来调用OneFilter拦截

/请求资源别名  注意:此处的请求资源别名指的是我们在web.xml所设置的访问我们某个servlet实现类时候的请求别名。

当我们在网站中输入      http://localhost:8080/网站名/想要拦截的资源文件/    这个路径的时候便会先进行拦截,然后再去访问我们的资源文件。

五.代码实现

======

代码逻辑:当用户在前台进行登录的时候,会输入自己的姓名密码,点击提交后,此时需要一个Filter接口实现类来验证我们输入的姓名密码是否与我们之前注册的账号和密码相同,如果相同的话,此时再继续访问我们点击提交后想要访问的地址,假设此时点击提交后浏览器的访问地址为http://localhost:8080/myweb/one

1:首先我们先编写一个前端页面:里面需要放入我们的登录页面的代码,在action中指定提交后我们想要访问的地址。

登陆界面

用户名称:

用户密码:

提交按钮:

2:然后再写我们的Filter接口实现类:假设此时之前我们注册的姓名为王五,密码为123

public class OneFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

servletRequest.setCharacterEncoding(“utf-8”);

String name=servletRequest.getParameter(“username”);

String password=servletRequest.getParameter(“password”);

if(name.equals(“王五”)&&password.equals(“123”)){

//将拦截请求对象和响应对象交还给Tomcat,由Tomcat继续调用资源文件

filterChain.doFilter(servletRequest,servletResponse);

}else{

servletResponse.setContentType(“text/html;charset=utf-8”);

PrintWriter printWriter=servletResponse.getWriter();

printWriter.print(“请重新输入”);

}

}

@Override

public void destroy() {

}

}

注意事项:当if语句中我们校验成功后,需要将我们的拦截请求对象和响应对象交还给Tomcat,由Tomcat继续调用资源文件,所以此时需要我们的过滤器链条对象filterChain调用doFilter方法将拦截请求对象和响应对象交还给Tomcat,注意filterChain所调用的doFilter方法是它自己的,并不是Filter接口类中的doFilter方法,如下图所示:

我们一般将这个交还的动作称为放行。

如果前台用户输入的姓名和密码有误的话,就提醒用户重新输入,此时我们的过滤器代替Http服务器拒绝本次请求

3:编写完我们的过滤器接口实现类OneFilter后,再编写我们的OneServlet接口实现类,此类是当用户校验成功后,继续访问的动态资源文件。

public class OneServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String name=req.getParameter(“username”);

resp.setContentType(“text/html;charset=utf-8”);

PrintWriter printWriter=resp.getWriter();

printWriter.print(“用户的姓名为”+name);

System.out.println();

printWriter.print(“用户的密码输入正确”);

printWriter.flush();

}

}

此处就假设当用户通过校验后,显示姓名和密码正确即可。

4:最后在web.xml文件中进行我们的配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns=“http://xmlns.jcp.org/xml/ns/javaee”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd”

version=“4.0”>

onefilter

com.bjpowernode.Filter.OneFilter

onefilter

/one

OneServlet

com.bjpowernode.controller.OneServlet

OneServlet
/one

注意事项:中的处填写的应该是我们想要拦截的资源路径,因为我们是想在访问OneServlet的时候进行一个校验,所以此处就填写我们的请求别名/one即可。

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-a0R4nVrT-1719524395756)]

[外链图片转存中…(img-QFIFRtq0-1719524395757)]

[外链图片转存中…(img-FvoJA6vJ-1719524395758)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值