Servlet-过滤器Filter
来源:互联网 发布:国内最好数据恢复公司 编辑:程序博客网 时间:2024/05/18 03:57
Servlet-过滤器Filter
sf2gis@163.com
2015年9月17日
1 目标:在Servlet的处理前后进行过滤。
2 原理:一种特殊的Servlet,只进行过滤操作。将过滤-处理-过滤形成一种处理链。
3 处理前过滤请求,将请求转发到指定Servlet,接收处理结果,并在处理后过滤结果。
4 流程:配置过滤器,过滤请求,转发请求,接收响应,过滤结果。
5 方法:xml配置过滤器
5.1 配置过滤器:与Servlet相似。将请求交由过滤器servlet处理。
<filter>
<filter-name>log</filter-name>
<filter-class>lee.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.1.1请求与过滤映射:<filter-mapping>
名称:filter-name,url模式:url-pattern
5.1.2过滤器与实现类映射:<filter>
名称:filter-name,实现类:filter-class
5.2 过滤请求:所有指定的url都将过滤。request代表请求。
5.3 转发请求:chain.doFilter()
5.4 过滤结果:处理response。
5.5 示例:xml配置文件配置过滤器
//web.xml
<?xmlversion="1.0" encoding="ISO-8859-1"?>
<!--
Licensed to the Apache Software Foundation(ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional informationregarding copyright ownership.
The ASF licenses this file to You under the ApacheLicense, Version 2.0
(the "License"); you may not usethis file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreedto in writing, software
distributed under the License is distributedon an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied.
See the License for the specific languagegoverning permissions and
limitations under the License.
-->
<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<filter>
<filter-name>log</filter-name>
<filter-class>lee.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
//LogFilter.java
package lee;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
import javax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.annotation.WebFilter;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
* Servlet Filter implementation classLogFilter
*/
@WebFilter("/LogFilter")
public class LogFilterimplements Filter {
/**
* Default constructor.
*/
public LogFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODOAuto-generated method stub
}
/**
* @seeFilter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
System.out.println("startfilter..."+new Date().toString());
HttpServletRequesthreq=(HttpServletRequest)request;
System.out.println("request="+hreq.getServletPath());
// pass the request alongthe filter chain
chain.doFilter(request,response);
HttpServletResponsehresp=(HttpServletResponse)response;
System.out.println("finishedfilter..."+new Date().toString());
System.out.println("URI="+hreq.getRequestURI());
System.out.println("response="+hresp.getStatus());
}
/**
* @seeFilter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException{
// TODO Auto-generated method stub
}
}
//catalina.out
start filter...Mon Sep 1416:43:16 CST 2015
request=/a.jsp
finished filter...Mon Sep 1416:43:16 CST 2015
URI=/webDemo/a.jsp
response=200
start filter...Mon Sep 1416:43:43 CST 2015
request=/c.jsp
finished filter...Mon Sep 1416:43:43 CST 2015
URI=/webDemo/c.jsp
response=404
6 方法:annotation配置过滤器:@WebFilter
6.1 目标:直接在类中设置过滤器属性,减少web.xml的配置,方便配置。
6.2 原理:容器识别注记。
6.3 流程:在web.xml中启用注记。生成处理类。在处理类中设置注记@WebFilter。
6.4 方法:
设置过滤器的URL模式:urlPatterns。
设置过滤器的初始化参数:initParam=(@WebInitParam(name=xx,value=xx)…)
参考:http://www.2cto.com/kf/201210/162383.html
6.5 示例:过滤所有请求,并获取初始化参数
//处理类:LogFilter.java
package lee;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
import javax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.annotation.WebFilter;
importjavax.servlet.annotation.WebInitParam;
importjavax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet Filter implementation classLogFilter
*/
@WebFilter(urlPatterns="/*",
initParams={@WebInitParam(name="init1",value="i111"),
@WebInitParam(name="init2",value="i222")})
public class LogFilter implementsFilter {
/**
* Default constructor.
*/
public LogFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @seeFilter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
System.out.println("start filter..."+newDate().toString());
HttpServletRequest hreq=(HttpServletRequest)request;
System.out.println("request="+hreq.getServletPath());
// pass the request along the filter chain
chain.doFilter(request, response);
HttpServletResponse hresp=(HttpServletResponse)response;
System.out.println("finished filter..."+newDate().toString());
System.out.println("URI="+hreq.getRequestURI());
System.out.println("response="+hresp.getStatus());
}
/**
* @seeFilter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException{
// TODO Auto-generated method stub
System.out.println("init="+fConfig.getInitParameter("init1"));
}
}
//结果
//a.jsp请求
- servlet过滤器Filter入门
- servlet Filter 过滤器
- Servlet的Filter过滤器
- servlet - Filter过滤器入门
- Servlet的Filter过滤器
- Servlet-----filter 过滤器
- Servlet过滤器Filter使用
- Servlet过滤器(Filter)
- 【servlet】初学过滤器Filter
- Servlet Filter(过滤器)
- Servlet Filter(过滤器)
- Servlet Filter(过滤器)
- Servlet Filter过滤器(1)
- Servlet Filter(过滤器)
- Servlet Filter(过滤器) 二
- Servlet Filter(过滤器2)
- Servlet Filter(过滤器)
- Servlet过滤器(Filter)
- 代码洁癖症的表现
- 软工视频和文档大杂烩(二)
- 程序员转型产品经理真的明智吗?
- 机器学习温和指南
- 搜索引擎原理
- Servlet-过滤器Filter
- 工作周报060
- 关于高德等集成的打包keystore与联调keystore
- 产品经理必须陪程序员加班吗?
- 2568:前进
- Canny边缘检测原理
- Servlet-监听器Listener
- 集成项目经理在工作中的常见改进点
- spring data jpa使用二级缓存