Servlets Filter 是Servlet 2.3 规范中新增加的(在tomcat/lib/servlet-api.jar),它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时运行的一个类。它操纵来自客户端的请求,在资源还没有初发送到客户端前截取响应,并处理这些还没有发送到客户端的响应。
Filters 有许多的应用场合。Servlet 2.3 规范建议如下的地方可以应用Filter:
authentication filters
logging and auditing filters
image conversion filters
data compression filters
encryption filters
tokenizing filters
filters that trigger resource access events
XSL/T filters that transform XML content
MIME-type chain filters
例:
package jasso.web.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;
/**
*
* @author
*/
public class SetCharacterEncodingFilter implements Filter {
private String encoding;
/**
* Called by the web container to indicate to a filter that it is being
* taken out of service.
*
* @todo Implement this javax.servlet.Filter method
*/
public void destroy() {
}
/**
* The doFilter method of the Filter is called by the
* container each time a request/response pair is passed through the chain
* due to a client request for a resource at the end of the chain.
*
* @param request
* ServletRequest
* @param response
* ServletResponse
* @param chain
* FilterChain
* @throws IOException
* @throws ServletException
* @todo Implement this javax.servlet.Filter method
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
/**
* @see javax.servlet.Filter#init(FilterConfig)
*/
public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("encoding");
}
}
web.xml部分
......
encodingFilter
my.web.filter.SetCharacterEncodingFilter
encoding
Shift_JIS
encodingFilter
action
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/config/struts-config.xml,/WEB-INF/config/struts-config-contents.xml
debug
2
detail
2
1
----------------------------------------------
javax.servlet.filter的用法
如何实现一个过滤器呢?
1.所在的类实现Filter接口
public interface Filter
public void init(FilterConfig filterConfig)throws ServletException
过滤器初始化是在容器启动时自动初始化
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletExcepton
在标准Servlet中的doGet或doPost 方法中,传递参数为:HttpServletRequest、HttpServletResponse
过滤器销毁
public void destroy()
package cn.mldn.lxh.filter
import java.io.*;
import javax.servlet.*;
public class FirstFilter implements Filter
{
public void init(FilterConfig config)throws ServletException
{
System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
{
System.out.println(过滤doFilter);
}
public void destroy()
{
System.out.println(过滤器销毁);
}
}
web.xml文件配置
first
cn.mldn.lxh.filter.FirstFilter
first
与servlet中的url-pattern不一样,此处表示对那个页面进行过滤,如果全部都过滤,则"/*"
/*
如果过滤器要将内容传递到目的地,则需要FilterChain,将请求继续向下转发
过滤器也会执行两次:FilterChain这前执行一次,之后再执行一次
1.过滤非法文字:
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
public class CharFilter implements Filter
{
public void init(FilterConfig filterConfig)throws ServletException
{
//System.out.println("init");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
{
String content=request.getParameter("content");
//如果indexOf返回-1则表示没有查到所要的内容
if(content!=null)
if(content.indexOf("AAA")==-1)
{
chain.doFilter(request,response);
}
esle
{
System.out.println("有非法文字");
//如果需要的话,此处依然可以使用RequestDispatcher进行跳转
}
}
else
{
chain.doFilter(request,response);
}
}
public void destroy()
{
//System.out.println("过滤器销毁");
}
char
cn.mldn.lxh.filter.CharFilter
char
/*
2.对内容进行统一的编码
setCharacterEncoding("GB2312");
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter
{
public void init(FilterConfig filterConfig)throws ServletException
{
//System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
{
try{
request.setCharacterEncoding("GB2312");
}
catch(Exception e)
{}
chain.doFilter(request,response);
}
public void destroy()
{
//System.out.println("销毁");
}
}
encoding
encoding
/*
3.登陆验证
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LoginFilter implements Filter
{
public void init(FilterCoinfig filterConfig)throws ServletException
{
//System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
{
//Session属于http范畴,把以ServletRequest对象需要先转换成HttpServletRequest对象
HttpServletRequest req=(HttpServletRequest)request;
HttpSession session =req.getSession();
//如果session不为空,则可以浏览其它页面
if(session.getAttribute("uname")!=null)
{
chain.doFilter(request,response);
}
else
{
//通过requestDispatcher跳转到登陆面
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
public void destroy()
{
//System,out.println("销毁");
}
}
login
cn.mldn.lxh.filter.LoginFilter
参数名称
参数值
login
/*
读取web.xml中的参数的方法:
public void init(FilterConfig arg0) throws ServletException {
String 参数值= arg0.getInitParameter("参数名称");
}
分享到:
相关推荐
javax.servlet的jar包,解决找不到javax.servlet.*等问题的!欢迎下载!!
javax.servlet.Filter.class javax.servlet.FilterConfig.class javax.servlet.ServletRequestAttributeListener.class javax.servlet.ServletRequestAttributeEvent.class javax.servlet.GenericServlet.class ...
本文主要介绍解决cannot be cast to javax.servlet.Filter 报错的问题,这里提供解决办法,有编程的朋友遇到此错误可以参考下
javax.servlet.Filter javax.servlet.Servlet javax.servlet.FilterChain javax.servlet.http.Cookie javax.servlet.FilterConfig javax.servlet.ServletConfig javax.servlet.GenericServlet javax.servlet....
doFilter(ServletRequest, ServletResponse, FilterChain) - Method in interface javax.servlet.Filter The doFilter method of the Filter is called by the container each time a request/response pair is ...
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet....
< filter>< filter>LoggingFilter</ filter>< filter>javax.servlet.filter.logging.LoggingFilter</ filter></ filter>< filter>< filter>LoggingFilter</ filter>< url>/*</ url></ filter> 或javax.servlet.
javaweb项目新建servlet会报错,提示没有HTTPServlet类,这是由于 ...并且import javax.servlet.annotation.WebFilter 不能引入,找不到类,是由于这个类只有在servlet-api 3.0之后的包才有。tomcat对应的版本要7.0以上
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet....
import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; /** * Created by GuoFeng on 2016/2/21. TODO 登陆验证拦截类 拦截所有html请求 进行登陆验证 */ public class LoginFilter...
创建第一个 Filter,将其命名为 Filter01,扩展 javax.servlet.Filter 类并实现 doFilter() 方法。在此方法中,您可以编写逻辑,例如打印 "Filter01 before",并在处理完请求后打印 "Filter01 after"。 创建第二个 ...
06 import javax.servlet.Filter; 07 import javax.servlet.FilterChain; 08 import javax.servlet.FilterConfig; 09 import javax.servlet.ServletException; 10 import javax.servlet.ServletRequest; ...
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) at javax.servlet.http.HttpServlet.service...
本文实例为大家分享了jsp实现登录验证的过滤器,供大家参考,具体内容如下 1.新建一个Dynamic Web Project项目,里面新建1...import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.Fi
1、Filter接口:所有的Servlet过滤器类都必须实现javax.servlet.Filter接口 a、init(FilterConfig): 这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取...
JSP 开发中过滤器filter设置编码格式的实现方法 我们知道为了避免提交数据的乱码问题,需要在每次使用请求之前...import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig;
<filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。 <filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面...
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) at javax.servlet.http.HttpServlet.service...
分析: 因为需要使用request方法中的getRequestURI()获取资源请求路径,Filter里的request是ServletRequest类型的而getRequsetURI()方法是...import javax.servlet.annotation.WebFilter; import javax