请问有人可以比较详细的说一下过滤器(Filter)的作用吗?最好带上一个小例子,谢谢

romanitc 2011-04-19 05:53:02
请问有人可以比较详细的说一下过滤器(Filter)的作用吗?最好带上一个小例子,谢谢
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
romanitc 2011-04-20
  • 打赏
  • 举报
回复
请问有登录过滤session和.jsp的例子吗?
JavaMan_KA 2011-04-19
  • 打赏
  • 举报
回复
Filter过滤器就是一个“检查部门”,你给他一个条件,然后他就会对在他监控范围内的信息进行“检查”。
一般我们用于字符码的转换
代码:

import javax.servlet.*;
import java.io.IOException;

/**
* 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题
*/
public class CharacterEncodingFilter
implements Filter
{
protected FilterConfig filterConfig = null;
protected String encoding = "";

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
if(encoding != null)
servletRequest.setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest, servletResponse);
}

public void destroy()
{
filterConfig = null;
encoding = null;
}

public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");

}
}


配置:
<filter>

<filter-name>EncodingAndCacheflush</filter-name>
<filter-class>EncodingAndCacheflush</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingAndCacheflush</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
要传递参数的时候最好使用form进行传参,如果使用链接的话当中文字符的时候过滤器转码是不会起作用的,还有就是页面上

form的method也要设置为post,不然过滤器也起不了作用。
ZZZ5512536 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 romantic_pk 的回复:]
引用 1 楼 x19881216 的回复:
Java code
public class EncodingFilter implements Filter {

private String encoding = "ISO-8859-1";
private final Logger log = Logger.getLogger(this.getClass());

public vo……
[/Quote]
就在doFilter里用session来判断吧。网上可以找到代码
romanitc 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 x19881216 的回复:]
Java code
public class EncodingFilter implements Filter {

private String encoding = "ISO-8859-1";
private final Logger log = Logger.getLogger(this.getClass());

public void init(Fil……
[/Quote]

请问有过虑是否登录的Filter吗?
amos1989 2011-04-19
  • 打赏
  • 举报
回复
有点类似于AOP

相当于一个门。。你可以指定这个门对那些房间管用
小绵羊 2011-04-19
  • 打赏
  • 举报
回复
public class EncodingFilter implements Filter {

private String encoding = "ISO-8859-1";
private final Logger log = Logger.getLogger(this.getClass());

public void init(FilterConfig config) throws ServletException {
String tmp = config.getInitParameter("encoding");
if (tmp != null) {
encoding = tmp;
}
log.info("初始化編碼過濾器,編碼格式:" + encoding);
}

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;

request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);

arg2.doFilter(arg0, arg1);
}

public void destroy() {

}
}

这是一个编码过滤器的源代码
	<filter>
<filter-name>encoding</filter-name>
<filter-class>com.shaw.web.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


用来解决乱码问题

filter可以做很多事的,楼主可以找专门的文章看看

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧