jsp/servlet之过滤器

1,什么是过滤器(filter)?

   它是以一种组件的形式绑定到web应用程序当中的,与其他的Web应用程序组件不同的是:过滤器是采用“链”的方式进行处理(当需要限制用户访问某些资源或者处理请求时时提前处理某些资源时);当用户发出请求到web服务器,web服务器并没有直接去找到那个相应的web资源,而是交给了过滤器,所有的请求由过滤器去处理,然后在访问相应的web资源;这样可以达到对某些资源的访问限制;

2,实现过滤器!

   如果要定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口;此接口定义了3个操作方法:

 

No方法类型描述
1public void init(FilterConfig filterConfig) throws ServletException 普通过滤器初始化(容器启动时调用),可以通过FilterConfig配置的初始化参数
2public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException普通完成具体的过滤操作,然后通过FilterChain让请求继续向下传递
3public void destory()普通过滤器销毁时使用

上面的doFilter()方法中定义了ServletRequest,ServletResponse和FilterChain3个参数,都是ServletRequest/ServletResponse说明过滤器可以完成对任意协议的操作。FilterChain接口的主要作用是将用户的请求向下传递给其他的过滤器或者Servlet,此接口的方法如下:

No方法类型描述
1public void doFilter(ServletRequest request,ServletResponse response)throws IOException,ServletException普通将请求向下继续传递

在FilterChain接口中依然定义了一个同样的doFilter()方法,这样是因为一个过滤器后面可能存在另外一个过滤器,也可能是请求的最终目标(Servlet),这样就通过FilterChain形成一个"过滤链"的操作;

3,看一个简单的过滤器!

SimpleFilter:

package com.keith.filter;

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;

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 req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("-------执行doFilter()之前---------------");
		chain.doFilter(req, resp);
		System.out.println("-------执行doFilter()之后---------------");
	}

	public void destroy() {
		System.out.println("-------filter销毁--------");
	}

}

 在web.xml中配置:

  <filter>
  	<filter-name>simple</filter-name>
  	<filter-class>com.keith.filter.SimpleFilter</filter-class>
  	<init-param>
  		<param-name>ref</param-name>
  		<param-value>Hello Filter</param-value>
  	</init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>simple</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>
  

 当服务器(tomcat)启动的时候:会输出:过滤器被初始化,初始参数:Hello Filter

当我们在浏览器访问目录的时候:会在控制台上:

-------执行doFilter()之前---------------


-------执行doFilter()之后---------------


 过滤器(Filter)和servlet的配置很相似,其中的<url-pattern>标签中,是拦截的内容,/*将对所有访问进行拦截,而如果我们只想对某些目录进行拦截可以这样:

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


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

4,过滤器的应用:

过滤器(Filter)属于是以一个组件的形式加入到应用程序中,

  • 编码过滤

如果我们在每一个jsp或者servlet中都写一个request.setCharsetEncoding("UTF-8");这样的工作太无趣和累赘,这个时候,我们就可以用到Filter:

EncodingFilter:

package com.keith.filter;

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;

public class EncodingFilter implements Filter {
	// 设置字符编码
	private String charSet;

	public void init(FilterConfig filterConfig) throws ServletException {
		// 取得初始化参数
		this.charSet = filterConfig.getInitParameter("charSet");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 设置统一编码
		request.setCharacterEncoding(this.charSet);
	}

	public void destroy() {

	}

}

 在web.xml里:

  <filter>
  	<filter-name>encoding</filter-name>
  	<filter-class>com.keith.filter.EncodingFilter</filter-class>
  	<init-param>
  		<param-name>charset</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>encoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  •  登陆验证:验证登陆是Web开发中不可缺少的一部分,以前都是通过验证session的方式完成,如果每个页面都这样做的话,会造成大量的冗余代码,这时候就可以通过Filter轻松的完成;

LoginFilter:

package com.keith.filter;

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;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpSession session = req.getSession();
		if (session.getAttribute("user") != null) {
			chain.doFilter(request, response);
		}else{
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	}

	public void destroy() {

	}

}
 

以上2个过滤器只是个演示,在实际开发中,并不是这么简单!

 

 

 

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式) 目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav... 阅读详情

相关推荐

Shader之——花草动画shader

今天 ,接到了个需求,花草的动画。谈到花草动画,立马就想到顶点动画,让顶点动起来就可以实现了。但是有个问题,所有的草都往一个方向运动,这个就麻烦了。因为在shader里没有随机这种概念,提到最多的是用一张噪声图来模拟。在网上搜索了一下,发现有更好的办法,就是用每个顶点到一个点的距离来控制动画的开始,毕竟每个顶点到同一个点的距离很少是一样的。 float dis = distance ...

baicaishisan的博客 2184

[Servlet&JSP] 过滤器的使用

过滤器介于Servlet之前,可拦截过滤浏览器对Servlet的请求,也可以改变Servlet对浏览器的响应。 过滤器的概念 像性能测量、用户验证、字符替换、压缩等需求,应该设计为独立的组件,随时可以添加到应用程序之中,也可以随时移除,而不用修改原有的程序。Servlet/JSP提供了过滤器机制以实现这些组件服务,可视需求抽换过...

weixin_34146986的博客 233

Windows Server 2016上,手把手教你搭建MDT 8456自动化部署环境(含ADK 2004与WDS配置)

本文详细指导在Windows Server 2016上搭建MDT 8456自动化部署环境,涵盖ADK 2004与WDS配置全流程。通过标准化操作系统部署、应用程序静默安装和驱动程序注入,实现企业级自动化部署解决方案,显著提升IT运维效率。特别针对兼容性问题和权限陷阱提供实战解决方案。

weixin_29876033的博客 387

jsp过滤器解决乱码

(1)前言: 解决web程序的国际化问题,必须在任何地方使用UTF-8对字符进行编码。(包括:数据库设置为:UTF-8,web页面也要设置为:UTF-8) 这样做的好处在于可以解决在web上不止中文字符编码问题,所有的字符编码都统一使用UTF-8,实现了语言的国际化。同时在保

zhuhuidong的地盘! 895

海康威视GigE工业相机的python调用demo

默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。

xulibo5828的博客 2108

Nano Banana 2哪里使用?Nano Banana 2提示词合集和使用教程

收集最强的Nano Banana 2提示词合集,以及Nano Banana 2哪里使用的教程,并且有10个免费使用渠道。

qq_42927225的博客 1988

JSP之Servlet过滤器Filter

1、Servlet过滤器 Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求,可以改变请求中的内容来满足实际开发的需要。在服务器的响应发送回客户端之前,处理这些响应。 2、Filter配置 Filter在Web.xml中配置,示例代码如下: LogFilter com

微微撒的博客 450

AutoGenTestCase - AI大模型生成测试用例

AI技术助力高效软件测试:AutoGenTestCase工具介绍 传统手工测试存在效率低、覆盖不全等痛点。AutoGenTestCase工具集成DeepSeek、通义千问等AI大模型,能快速解析需求并自动生成标准化测试用例,将数小时工作缩短至分钟级。该工具部署简单,仅需配置APIKey即可运行,支持多种测试用例类型比例设置,并输出Markdown和Excel格式的测试用例。通过GitHub或网盘下载后,用户可按照教程完成APIKey配置、需求文档上传和用例生成等操作,显著提升测试效率与覆盖完整性。

YIqifeibaQI的博客 348

servlet+jsp实现过滤器,防止用户未登录访问

我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思路: 一种是在jsp页面进行session的判断,如果不存在该用户的session,就跳转到登录页面,否则执行jsp页面代码,但是你会发现这样做逻辑也简单,但是非常麻烦,如果有很多个jsp,那么就要

沉默的鲨鱼的专栏 6万+

5GS 协议栈 — PFCP 协议 — URR 用量上报规则

目录 文章目录目录URR 用量上报规则UEE 的参数Usage Report 的参数示例 URR 用量上报规则 29244 5.2.2 Usage Reporting Rule URR 的作用? 用来告诉 UPF 如何对 PDR 识别的 SDF 或 Application 业务进行使用量统计信息的上报。CP 收到 Report Information 后,可用于计费或者管控(e.g. 超量限速)等用途。 URR 在哪个流程里下发的? N4 会话建立流程。 N4 会话修改流程。 URR 是怎么工作

烟云的计算 4591

CTR-GCN 论文解读

提出了一种信道拓扑优化图卷积,该卷积可以动态有效地对信道拓扑进行建模。共享拓扑是一个参数化的邻接矩阵,作为所有通道的拓扑先验,并提供顶点之间的一般相关性。通过使用特定于通道的相关性细化共享拓扑,CTR-GC 获得了通道拓扑。

一杯水果茶!足矣~ 3088

Servlet 过滤器

1.过滤器介绍 Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。 Servlet 过滤器是可...

weixin_45157597的博客 474

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

servlet/jsp中过滤器的运用

过滤器是一个对象,可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet/JSP之后对其进行后处理。所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文件(web.xml)中把该过滤器与对应的Servlet/JSP联系起来。你可以一个过滤器以作用于一个或一组servlet,零

2589

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

超强过滤器彻底解决JSP/SERVLET中文参数GET/POST传递的问题

超强过滤器彻底解决JSP/SERVLET中文参数GET/POST传递的问题 分类: JAVA相关 2011-12-15 11:01 23人阅读 评论(0) 收藏 举报   一:首先学到的解决方法是在页面中request.setCharacterEncoding(“GB18030”)来设置请求的编码为中文编码,然后就在每个需要接收参数的页面噼里啪啦的写上这么一句,对当时的水

gyflyx的专栏 3254

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jsp/servlet中的过滤器Filter配置总结

 在Java web开发中常会使用到功能强大的过滤器,他毕竟能给我们带来很大的方便,但是针对过滤的资源我们需要详细的了解他们在web.xml中的配置信息。这个根据几种常用的不同情况进行了总结: 1.如果要映射过滤应用程序中所有资源:    loggerfilter    myfilter.LoggerFilter    loggerfilter    /* 2.过滤指定的类

ygj26's blog 961

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jsp/servlet过滤器--Filter

Filter可以担任浏览器与JSP/Servlet之间的一个中介处理者,一些request的前置处理动作及一些response的后置处理,都可以交由这个中介处理者来完成,当然Filter可以达到的功能,您也可以直接撰写在JSP/Servlet中,但如果有很多JSP/Servlet都需要相同的处理,例如某些网页都需要统一的身份验证方式时,与其在每一个网页中都撰写验证的程序码,不如直接撰写Filter...

weixin_44121239的博客 252

JSP/Servlet过滤器(filter)

Filter概述或许,servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可...

hahaball的专栏 218

servlet和JSP过滤器Filter-JSP教程,Jsp/Servlet-JSP编程 (转)

或许,servlet api的2.3版本中最重要的一个新功能就是能够为servlet和jsp页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。 过滤器是个程式,他先于和之相关的servlet或jsp页面运行在服务器上。过滤器可附加到一个或多个servlet或jsp页面上,并且能够检查进入这些资源的请求信息。在这之后,过滤器能够作如下

711

java过滤器派发请求_JSP/Servlet面试问题及详细答案详解

1.JSP的内置对象及方法Request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。Response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)out对象是javax.jsp.JspWriter的一个实例...

weixin_33417371的博客 215

jsp/servlet过滤器和struts2拦截器的有什么区别

jsp/servlet过滤器和struts2拦截器的有什么区别 542430725 | 浏览 3715 次  问题未开放回答 |举报 推荐于2016-11-14 01:43:29 最佳答案 过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 ac

evilcry2012的专栏 392

JSP/Servlet中的Filter过滤器的用法小结

1、为什么要使用Filter? 2、Filter如何运行的?

‘Sword 898

使用过滤器(Filter)解决JSP/Servlet中的中文(编码)问题

时间: 2007-12-18 仅仅对于中文问题,我们可以在获取参数的时候指明: String myparam = new String(request.getParameter("myparam").getBytes("ISO8859_1"),"GB2312"); 如果一个应用里有多个地方要获得参数并且每个地方都要用这样的方式来解决编码问题,那肯定会很有意思;如果以后不仅仅是中文问...

JavaNoob的博客 313

JSP-SERVLET_知识点汇总

JSP-SERVLET知识点 一、 JSP基础概念 1. 软件架构 B/S架构:Browser/Server,浏览器-服务器            最大的优点就是:一次部署,处处访问。 C/S架构:Client/Server,客户端-服务器            功能、事件丰富,可以完整的使用计算机的一系列资源。但是升级维护不方便。 2. B/S架构工作原理 采用请求+相应

wxy_kk的博客 437
上一篇: MVC之实例操作---MVC设计模式应用
下一篇: jsp/servlet之监听器
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值