java filter重定向_Java Filter(过滤器)——重定向

什么是过滤器

简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

功能在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。

在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

实现 Filter 接口

Java Servlet 提供了过滤器接口:javax.servlet.Filter,过滤器需要实现 Filter,并重写三个抽象方法。1

2

3void (FilterConfig var1);

void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3); // 具体业务逻辑

void destroy(); // 销毁(初始化的内容)

init() 及 destroy() 仅执行一次,init() 在容器(web 容器)启动时执行,容器按照 web.xml 中 Filter(所有的) 注册的顺序执行 init(),destory() 在容器停止时执行。

创建过滤器

使用过滤器实现一个页面重定向功能。原本应该访问的页面由于已经销毁或者其他原因,导致不能访问,现在需要让该页面重定向至其他页面,我们约定原来的页面为 target,而重定向的页面为 replacement。

创建页面

两个页面,/pages/first.jsp 为target,/pages/second.jsp 为 replacement。first.jsp1

2

3

4

5

6

7

8

9

First

This is the first page.

second.jsp1

2

3

4

5

6

7

8

9

Second

This is the second page.

配置 web.xml1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

rendirectFilter

com.zhoupq.springmvcpro.filter.RedirectFilter

target

/pages/first.jsp

replacement

/pages/second.jsp

rendirectFilter

/*

创建 filter-class1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56package com.zhoupq.springmvcpro.filter;

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

/**

* Author zhoupq

* Date 2017/10/12.

*/

public class RedirectFilter implements Filter

{

private String target = "";

private String replacement = "";

public void (FilterConfig filterConfig)

throws ServletException

{

this.target = filterConfig.getInitParameter("target");

this.replacement = filterConfig.getInitParameter("replacement");

}

public void doFilter(ServletRequest servletRequest,

ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException

{

//转换

HttpServletRequest request = (HttpServletRequest) servletRequest;

HttpServletResponse response = (HttpServletResponse) servletResponse;

/*

省略登录、权限判断

*/

// 当前访问的URL符合条件

if (this.target.equals(request.getRequestURI()))

{

// 重定向

response.sendRedirect(this.replacement);

}

// 进入 Filter 链(下一个Filter),最终web服务器就会调用web资源的service方法,即web资源就会被访问

filterChain.doFilter(request, response);

}

public void destroy()

{

this.target = null;

this.replacement = null;

}

}

启动Tomcat,浏览器访问 localhost:8080/first.jsp,浏览器重定向至 localhost:8080/second.jsp

感谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值