JSP Filter的应用方法

Servlet有一个很有意思也很有用的功能,就是Filter。 所谓Filter,就是在用户请求到达 Servlet 之前、或者 Servlet 执行之后, 执行的一段小程序,这段程序可以对用户请求做预处理, 或者对Servlet返回的结果进行一些公用处理。
Filter可以在请求到达 Servlet 之前执行, 甚至即使请求一个静态页面或图片等,Filter也会被优先执行。 这样我们可以通过Filter对应用程序内的所有对象(包括Java程序和静态内容)进行预处理。 (这个功能恐怕PHP程序就无法做到了。)

Filter通常可用于以下几种情况:
•认证
•记录访问日志
•加密解密
•字符编码转换
•数据压缩

如上面最常用的“认证”,可以在Filter中书写认证代码, 这样不仅省却了在Servlet中认证的麻烦,而且还能控制网站中静态内容的访问。
Filter是个接口,位于 javax.servlet.Filter。它与其他接口的关系如下:

我们在书写自己的Filter时,只需写一个类实现 Filter 接口即可。
实现Filter接口需要实现以下几个方法:


代码如下:

void init(FilterConfig filterConfig) throws ServletException

Filter的初始化方法。


代码如下:

void destroy()

Filter结束之前执行的方法。


代码如下:

void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

Filter的执行内容。参数request和response分别为输入和输出参数,而chain则为Filter链对象。
所谓FilterChain,一个应用程序内的Filter可以有多个,它们像链子一样串在一起, 其中的某个Filter执行之后,可以调用chain.doFilter(request, response)将执行权转给下一个Filter, 直到所有的Filter都执行完毕。
这次的示例程序我们修改了上一节的登录程序, 为它增加了一个下载链接(详见SessionTest.java)。 这个下载链接指向 img/sample.jpg。 我们希望能通过一个Filter,在用户试图下载 img/sample.jpg 时验证用户身份, 如果验证失败,则禁止用户下载,并跳转到登录页面。
创建Filter时可惜不能像Servlet那样,直接从右键菜单中选择新建, 而只能先写好源代码然后手工添加到web.xml中。 如下图,在新建类时注意要实现javax.servlet.Filter接口。

写完代码之后,打开web.xml文件,手工添加Filter。与Servlet类似,你需要添加 和 两个标记。这里我们要对 /img/ 下的所有文件进行登录验证, 因此的 url-pattern 处我们填写了 /img/* 。

最后执行,访问 /LearnJSP/img/sample.jpg ,就会跳转到登录页面。 登录之后再次访问上面的链接,才能看到正确的图片。

示例下载:servlet-filter_jb51net.zip

(0)

相关推荐

  • JSP spring boot / cloud 使用filter防止XSS

    JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 二.思路 基于filter拦截,将特殊字符替换为html转意字符 (如

  • 通过过滤器(Filter)解决JSP的Post和Request中文乱码问题

    jsp代码: import javax.servlet.*; import javax.servlet.http.*; public class CharsetFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { try { HttpServletRequest

  • JSP过滤器Filter配置过滤类型全部汇总

    一.配置方法 1 映射过滤应用程序中所有资源 <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pat

  • JSP 开发中过滤器filter设置编码格式的实现方法

    JSP 开发中过滤器filter设置编码格式的实现方法 我们知道为了避免提交数据的乱码问题,需要在每次使用请求之前设置编码格式.在你复制粘贴了无数次request.setCharacterEncoding("gb2312");后,有没有想要一劳永逸的方法呢?能不能一次性修改所有请求的编码呢? 用Filter吧,它的名字是过滤器, 代码如下: import java.io.IOException; import javax.servlet.Filter; import javax.ser

  • JSP Filter的应用方法

    Servlet有一个很有意思也很有用的功能,就是Filter. 所谓Filter,就是在用户请求到达 Servlet 之前.或者 Servlet 执行之后, 执行的一段小程序,这段程序可以对用户请求做预处理, 或者对Servlet返回的结果进行一些公用处理.Filter可以在请求到达 Servlet 之前执行, 甚至即使请求一个静态页面或图片等,Filter也会被优先执行. 这样我们可以通过Filter对应用程序内的所有对象(包括Java程序和静态内容)进行预处理. (这个功能恐怕PHP程序就无

  • Spring boot 跳转到jsp页面的实现方法

    本人正在学习Spring boot,搜索了很多关于Spring boot 跳转到jsp页面的实现方法介绍,下面我来记录一下,有需要了解的朋友可参考.希望此文章对各位有所帮助. @Controller注解 1.application.properties文件中配置 # 配置jsp文件的位置,默认位置为:src/main/webapp spring.mvc.view.prefix=/pages/ # 配置jsp文件的后缀 spring.mvc.view.suffix=.jsp 2.Controlle

  • JSP页面跳转方法小结

     实现JSP页面跳转,有如下几种方式: n        使用href超链接标记              (客户端跳转) n        使用JavaScript                             (客户端跳转) n        提交表单                                      (客户端跳转) n        使用response对象                            (客户端跳转) n        使用for

  • JSP验证码简单生成方法

    本文实例讲述了JSP验证码简单生成方法.分享给大家供大家参考.具体如下: <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc&

  • JSP开发之Spring方法注入之替换方法实现

    JSP开发之Spring方法注入之替换方法实现 Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现.打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把它的实现逻辑改为如果两个整数的值相同则把它们相乘,否则还是把它们相加,在不改变或者是不能改变源码的情况下我们就可以通过Spring提供的替换方法实现机制来实现这一要求. 替换方法实现机制的核心是MethodReplacer接口,其中定义了一个reimplement ()方

  • Jsp自定义标签和方法详解

    Jsp自定义标签和方法详解 首先是要有一个标签处理类,标签处理类可以直接实现Tag接口,也可以继承Java中已经实现了的TagSupport这个类,TagSupport也是继承自Tag接口的,它内部已经对Tag接口进行了实现,一般是继承TagSupport类,之后是重写父类的doStartTag和doEndTag方法, 对于开始标签来说返回值主要有EVAL_BODY_INCLUDE和SKIP_BODY,前者表示执行标签体,后者表示略过标签体: 对于结束标签的返回值主要有两种EVAL_PAGE和S

  • jsp倒计时简单实现方法

    本文实例讲述了jsp倒计时简单实现方法.分享给大家供大家参考,具体如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% //当前时间毫秒数 Long current_time1=System.currentTimeMillis(); //结束时间毫秒数 Long end_time2=1337875200000l; //计算时间差 L

  • jsp中变量及方法的声明与使用

    本文实例讲述了jsp中变量及方法的声明与使用.分享给大家供大家参考,具体如下: <%@ page language="java" import="java.util.*" contentType="text/html;charset=GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://&q

  • jsp filter 过滤器功能与简单用法示例

    本文实例讲述了jsp filter 过滤器功能与简单用法.分享给大家供大家参考,具体如下: 过滤器的作用是什么? 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet.过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面. 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 过滤器的实现要实现 java.servlet.Fil

  • JSP页面跳转方法大全

    先来介绍一下在服务端JSP脚本中跳转页面的几种方法: 1. response.sendRedirct("跳转到页面"); 该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,使浏览器显示重定向网页的内容. request无法传值过去. 执行完该页所有代码,然后再跳转到页面. 跳转地址栏改变. 可以跳转到其他服务器上的页面response.sendRedirct('//www.jb51.net'). 2.response.setHeader(); 该方法和respon

随机推荐