1、filter 过滤器的概述

filter过滤器:是面向切面编程的一种实现策略,在不影响原来的程序流程的前提下,将一些业务逻辑切入流程中,在请求达到目标之前进行处理,一般用于编码过滤、权限过滤、....

2、filter 过滤器的创建步骤

1、创建一个普通的java类实现filter接口
  2、实现接口中的三个方法(init,doFilter,destory)
  3、配置过滤器(web.xml)

3、实例_编码过滤器

 package com.shore.a_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 CharsetEncoding implements Filter{
private String encoding;
public void init(FilterConfig config) throws ServletException {//过滤器初始化
encoding = config.getInitParameter("encoding");//获取web.xml配置文件中的参数
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);//放行
} public void destroy() {//过滤器被销毁(服务器停止,才会被销毁) }
}

web.xml 配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 编码过滤 -->
<filter>
<!-- 类名 -->
<filter-name>CharsetEncoding</filter-name>
<!-- 类路径 -->
<filter-class>com.shore.a_filter.CharsetEncoding</filter-class>
<init-param>
<!-- 参数名 -->
<param-name>encoding</param-name>
<!-- 编码 -->
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<!-- 类名 -->
<filter-name>CharsetEncoding</filter-name>
<!-- /* 表示过滤(拦截)所有页面(请求) *.xxx 表示拦截该指定后缀结尾的页面(请求) -->
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

附录

 过滤器

 package com.shore.b_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.HttpServletResponse; public class LoginFilter implements Filter{
private String[] passlist;
public void init(FilterConfig Config) throws ServletException {
passlist=Config.getInitParameter("passList").split(",");
System.out.println("第一步");
} public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
//会重复执行一次
System.out.println("第二步");
//获取request对象
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
//获取客户端的资源路径
String uri = request.getRequestURI();
//获取请求资源路径
int index = uri.lastIndexOf("/");//获取路径中的最后一个斜杠的下标
String source = uri.substring(index+1);//截取斜杠后面的所有字符串
System.out.println(source);
boolean flag = false;//定义标记
for(String s:passlist){//遍历
if(s.trim().equals(source)){
flag = true;
}
}
if(flag){//如果flag=true则放行
chain.doFilter(request, response);
}else{
//获取session的内容
Object obj = request.getSession().getAttribute("user");
if(obj == null){
//未登录
request.setAttribute("msg","请先登录");
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
System.out.println("第五步");
chain.doFilter(request, response);//放行
}
}
} public void destroy() { }
}

web.xml 配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置过滤器-->
<filter>
<!-- 类名 -->
<filter-name>LoginFilter</filter-name>
<!-- 类路径 -->
<filter-class>com.shore.b_filter.LoginFilter</filter-class>
<init-param>
<!-- 参数名 -->
<param-name>passList</param-name>
<!-- passList参数的值(放行index和reg页面,即:不用登陆也可直接访问这两个页面) -->
<param-value>index.jsp,reg.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 类名 -->
<filter-name>LoginFilter</filter-name>
<!-- 拦截所有jsp页面 -->
<url-pattern>*.jsp</url-pattern>
</filter-mapping> <!-- 编码过滤 -->
<filter>
<filter-name>CharsetEncoding</filter-name>
<filter-class>com.shore.a_filter.CharsetEncoding</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncoding</filter-name>
<!-- /* 表示过滤(拦截)所有页面(请求) *.xxx 表示拦截该指定后缀结尾的页面(请求) -->
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.shore.b_servlets.LoginServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.shore.b_servlets.RegisterServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

servlet

 package com.shore.b_servlets;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("uname");
String pass=request.getParameter("upass");
System.out.println("第四步");
if(!"".equals(name.trim())){
//将当前登录的用户存储到session中
request.getSession().setAttribute("user",name);
//跳转到主页
response.sendRedirect("main.jsp"); }else{
request.setAttribute("msg","请输入账号和密码");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
}

登录页面

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
System.out.println("第三步");
%>
<form action="LoginServlet1" method="post">
<input type="text" name="uname"/>
<input type="password" name="upass"/>
<input type="submit" value="登录"/>
<span>没有账号?<a href="reg.jsp">立即注册</a></span>
</form>
<hr>
<span style="color: red;">${requestScope.msg}</span>
</body>
</html>

注册页面

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'reg.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<form action="RegisterServlet">
<input type="text" name="uname" placeholder="请输入账号"/>
<input type="password" name="upass" placeholder="请输入密码"/>
<input type="password" name="upass" placeholder="请输入重复密码"/>
<input type="submit" value="注册"/>
</form>
</body>
</html>

主页面

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'main.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
欢迎来到主页
</body>
</html>

Struts2下的拦截器(interceptor)和 过滤器(Filter)

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/10703859.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

Java基础95 过滤器 Filter的更多相关文章

  1. java中的过滤器 --Filter

    package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...

  2. 【java web】过滤器filter

    一.过滤器简介 过滤器filter依赖于servlet容器 所谓过滤器顾名思义是用来过滤的,Java的过滤器能够为我们提供系统级别的过滤,也就是说,能过滤所有的web请求, 这一点,是拦截器无法做到的 ...

  3. JAVA入门[15]-过滤器filter

    一.过滤器 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 参考:http:/ ...

  4. Java Web(四) 过滤器Filter

    Filter概述 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改.Filter提出了过滤链的概念.一个FilterChain包括多个Filter. ...

  5. Java 中的过滤器Filter 和拦截器 Interceptor

    1.先说拦截器 Interceptor 本项目以springboot为例: 新建 InterceptorConfig package com.opendev.mystudy.MyInterceptor ...

  6. 使用java的自定义过滤器Filter 处理请求request 并响应response

    package com.enation.eop; import java.io.BufferedReader; import java.io.IOException; import java.io.I ...

  7. java之过滤器Filter

    Java三大器之过滤器(Filter)的工作原理和代码演示   一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对w ...

  8. java过滤器Filter笔记

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...

  9. Java三大器之过滤器(Filter)的工作原理和代码演示

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...

随机推荐

  1. Zookeeper客户端Curator---Getting Started

    先说个小插曲,前几天有个网站转载我的文章没有署名作者,我有点不开心就给他们留言了,然后今天一看他们把文章删了.其实我的意思并不是你允许转载,我想表达的是我的付出需要被尊重.也不知道是谁的错~ ==== ...

  2. 发送邮件时Unable to relay错误的解决方法 转

    使用python的smtplib发送邮件,使用新浪的smtp服务,在本地测试正常.但把程序部署到服务器后,却连不上新浪的smtp服务器,可以ping通,但telnet 25端口失败,导致程序无法正常运 ...

  3. read from /dev/urandom 返回值异常

    #include<stdio.h> #include<iostream> #include <fcntl.h> #include <sys/mman.h> ...

  4. python3 操作MYSQL实例及异常信息处理--用traceback模块

    # 用traceback模块查看异常import traceback import pymysql db = pymysql.connect(host='localhost', user='root' ...

  5. 设计模式---组件协作模式之模板方法模式(Tempalte Method)

    前提:组件协作模式 现代软件专业分工之后的第一个结构是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常见的模式. 我们常常使用框架来写自己的 ...

  6. Kafka记录-常用命令选项说明

    1.kafka-topics  主题 如:kafka-topics --create --zookeeper 10.0.4.142:2181/kafka --replication-factor 1 ...

  7. C#设计模式(15)——迭代器模式

    1.迭代器模式介绍 迭代器模式主要用于遍历聚合对象,将聚合对象的遍历行为分离出来,抽象为一个迭代器来负责.迭代器模式用的十分普遍,C#/JAVA等高级语言都对迭代器进行了封装用于遍历数组,集合,列表等 ...

  8. ruby导出exl方式

    class Demo print "hello world" require "spreadsheet" #设置表格的编码为utf-8 Spreadsheet. ...

  9. 3 快速创建SpringBoot项目

    一.Intellij IDEA 创建Spring Boot项目 1.创建工程  2.选择Spring Initializr 3.设置Maven版本管理参数  4.选择引用模块  5.命名工程名 6.选 ...

  10. Java——java错误(The Struts dispatcher cannot be found)

    这通常是由于使用了struts标签,而没有配置相关联的filter.struts标签只有在http请求通过标签的servlet filter过滤器之后才可用,这些过滤器用来为这些标签初始化struts ...