13. Servlet 请求/响应过滤器
来源:互联网 发布:mac cr2转jpg 编辑:程序博客网 时间:2024/06/04 18:34
Servlet 请求/响应过滤器
1、Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息;
可以将一个或多个 Servlet 过滤器附加到一个 Servlet (或一组 Servlet),或者 JSP 、 HTML 页面,调用 Servlet 前调用所有附加的 Servlet 过滤器。
2、Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应。
3、过滤器通过 web.xml 中的 <filter> 标签来声明,然后映射到 web.xml 中的 <servlet> 或 <servlet-mapping> ;
当 Servlet 容器启动 Web 应用程序时,会为 web.xml 声明的每一个过滤器创建一个实例;
Filter 的执行顺序与在 web.xml 配置文件中的配置顺序一致,一般把Filter配置在所有的Servlet之前。
4、Servlet 过滤器的具体实现的 javax.servlet.Filter ,主要的 API 如下:
5、Filter 的 init() 方法中提供了一个 FilterConfig 对象,用于获取 Filter 参数;
如 web.xml 的文件配置如下:
1
<filter>
2
<filter-name>LoginFilter</filter-name>
3
<filter-class>control.LogFilter</filter-class>
4
<init-param>
5
<param-name>Site</param-name>
6
<param-value>真正的粉丝集社</param-value>
7
</init-param>
8
</filter>
在 Filter 中的 init() 方法中使用 FilterConfig 对象获取参数
1
public void init(FilterConfig config) throws ServletException {
2
// 获取初始化参数
3
String site = config.getInitParameter("Site");
4
// 输出初始化参数
5
System.out.println("网站名称: " + site);
6
}
6、一个简单的 Servlet 过滤器实例
这个例子展示在 DemoServlet 接收客户端的请求之前,先由 IPFilter 过滤器处理,检测该改请求的IP如果在IP列表中(ip列表从数据库中获取的方法参数,描述在 web.xml 中),则在向请求范围写入一个标记的属性值;
demoFilter.java
1
public class IPFilter implements Filter{
2
private ArrayList<String> IPtable = null; //IP列表
3
//获取Filter起始参数
4
public void init(FilterConfig config) throws ServletException{
5
String tableName = config.getInitParameter("tableName"); //在web.xml中获取Filter配置参数
6
IPtable = getIPtableFromDataBase(tableName); //从数据库中获取该IP列表,该方法实现省略
7
}
8
//Filter过滤过程
9
public void doFilter(ServletRequest request,ServletRespone response,FilterChain chain) throws ServletException,IOException{
10
String ip = request.getRemoteAddr();
11
if(IPtable.contains(ip))
12
request.setAttribute("ip","unsafe");
13
else
14
request.setAttribute("ip","safe");
15
//将请求传回过滤链,供后续Filter进行过滤(也可以不调用该方法,直接将请求转发给响应的Servlet)
16
chain.doFilter(request,response);
17
}
18
}
web.xml
1
2
<web-app>
3
<filter>
4
<filter-name>IPFilter</filter-name>
5
<filter-class>test.LogFilter</filter-class>
6
<init-param>
7
<param-name>tableName</param-name>
8
<param-value>ip_unSafe</param-value>
9
</init-param>
10
</filter>
11
<filter-mapping>
12
<filter-name>LogFilter</filter-name>
13
<url-pattern>/demo</url-pattern>
14
</filter-mapping>
15
16
<servlet>
17
<servlet-name>DempServlet</servlet-name>
18
<servlet-class>test.DemoServlet</servlet-class>
19
</servlet>
20
<servlet-mapping>
21
<servlet-name>DemoServlet</servlet-name>
22
<url-pattern>/demo</url-pattern>
23
</servlet-mapping>
24
</web-app>
以上的 <filter-mapping>中的<url-pattern> 指定 IPFilter 映射到 "/demo",如果想要将该 Filter 映射到所有 Servlet,只需修改该
<filter-mapping><url-pattern>值为 " /* ";
阅读全文
0 0
- 13. Servlet 请求/响应过滤器
- Servlet-请求与响应
- Servlet请求响应的模式
- Servlet之请求和响应
- Servlet处理请求和响应
- Servlet的请求和响应
- servlet的请求和响应
- Servlet之请求和响应
- Servlet请求、响应及其相关
- servlet中的请求与响应
- jquery的ajax请求servlet与响应
- J2EE请求与响应—Servlet
- 响应客户端请求(servlet与jsp)
- [Servlet]请求封装器、响应封装器
- Servlet容器响应Web客户请求流程
- Servlet一次请求和响应过程
- Jsp之四 servlet请求响应
- Servlet-处理HTTP请求与响应
- 优雅的JavaScript-面向对象
- Spring Boot 整合 Redis 实现缓存操作
- 数组的冒泡排序
- 详解EVENTLOGRECORD结构体遇到的问题
- TCP非堵塞IO的connect连接处理模型
- 13. Servlet 请求/响应过滤器
- DVWA下的SQL Injection(Blind)
- 云服务器不能启动数据库代理服务,启动后报错
- php-fpm调优以及开启nginx和php-fpm的status状态监控
- java 利用输入输出流处理txt文件,并生成新txt文件
- Mac下的安卓模拟器bluestacks安装apk
- C
- mysql5.7主从复制延时过大,stop slave夯住
- /proc/sys/kernel/printk 打印log设置