过滤器在Servlet2.3中规范的,能够对Servlet容器传给当前web组件的ServletRequest和ServletResponse对象进行检查和修改,即“过滤”处理的功能。
和过滤器相关的接口和类,一共有三个接口,分别是Javax.Servlet.Filter、Javax.Servlet.FilterChain、Javax.Servlet.FilterConfig 三个接口;
创建自定义的过滤器需要实现Javax.Servlet.Filter 接口,该接口定义了三个方法,接口源码如下:
package javax.servlet;
import java.io.IOException;
public interface Filter {
public void init(FilterConfig filterConfig) throws ServletException;
public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException;
public void destroy();
}
Javax.servlet.FilterChain接口:
package javax.servlet;
import java.io.IOException;
public interface FilterChain {
public void doFilter ( ServletRequest request, ServletResponse response ) throws IOException, ServletException;
}
Javax.servlet.FilterConfig 接口:
package javax.servlet;
import java.util.Enumeration;
public interface FilterConfig {
//获取过滤器的名字
public String getFilterName();
//获取当前应用上下文
public ServletContext getServletContext();
//获取在web.xml文件中指定name的参数值
public String getInitParameter(String name);
//获取所有的参数名
public Enumeration getInitParameterNames();
}
自定义的过滤器的类只需要实现Filter接口即可。
如下的代码将请求中的编码设置为GBK中文编码,在web.xml中已经设定参数为:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.longweir.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
针对所有的web请求,该过滤器都有效,过滤器将读取在文件中设置的encoding参数的值设定请求的编码为“GBK”。所以在文件中不再使用request.setCharacterEncoding("GBK")了。
过滤器的类EncodingFilter 如下:
package com.longweir;
//此过滤器对传递的参数实行过滤
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.HttpSession;
public class EncodingFilter implements Filter {
private String encode="ISO8859-1";
private FilterConfig config=null;
public void destroy() {
config=null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encode);
//获取过滤器名并保存在application属性中
String filtername=this.config.getFilterName(); //获取过滤器名
if (filtername!=null){
this.config.getServletContext().setAttribute("filtername",filtername);
}
chain.doFilter(request,response);
}
public void init(FilterConfig config) throws ServletException {
this.config=config;
String s=this.config.getInitParameter("encoding");
if (s!=null){
this.encode=s;
}else{
this.encode="GBK"; // 如果没有获取到参数 则自动校正为GBK
}
}
}
则在当前应用中,所有的web请求都自动将设置编码为GBK了。
可以写一个jsp来验证一下即可。
分享到:
相关推荐
在标题"Servlet过滤器的简单使用源码+文档"中,我们可以理解为这个压缩包包含了一个关于Servlet过滤器的基础应用示例,以及相关的源代码和文档资料。描述中提到的"实现一个登陆界面",表明了过滤器可能被用作验证...
通过这个简单的登录demo,初学者可以学习到如何使用Servlet过滤器进行权限控制,以及session和cookie在用户管理中的应用。这有助于理解Web应用程序中的身份验证和会话管理机制,为更复杂的Web应用开发打下基础。
9. **过滤器(Filter)**:Servlet API也提供了Filter接口,允许我们在请求到达Servlet之前和离开Servlet之后进行拦截处理,例如进行权限检查、数据转换等。 10. **会话管理**:Servlet可以通过`HttpSession`接口来...
过滤器是Servlet规范的一部分,它定义了一种机制,可以在请求到达目标Servlet之前和离开目标Servlet之后进行拦截。过滤器可以用于执行诸如数据校验、身份验证、字符编码转换、日志记录等多种任务,提高了代码的可...
这些源代码对于理解Servlet工作原理、学习如何编写自定义Servlet和过滤器以及调试与Servlet相关的代码非常有帮助。以下是 javax.servlet 包中一些关键组件的详细介绍: 1. **Servlet接口**:这是所有Servlet类的...
它定义了一组接口和类,让开发者能够构建服务器端应用程序,特别是Web应用程序。在本文中,我们将深入探讨Servlet API的源码,理解其核心概念、设计模式以及在...深入学习Servlet API,有助于构建高效、灵活的Web服务。
开发者可以从中了解Servlet生命周期、过滤器、会话管理、请求和响应对象的使用等核心概念。中文版的文档使得中国开发者能更方便地理解和应用这些知识。 在“压缩包子文件的文件名称列表”中,"Servlet+API[China]....
Servlet是Java Web应用程序的核心组件,用于处理...同时,对于自定义Servlet或Filter,源码提供了很好的参考和学习素材。在实际开发中,结合Servlet规范和实际的源代码,能帮助我们编写出高效、可靠的Java Web应用。
通过分析和学习Servlet源码,可以深入了解HTTP请求的处理流程,以及如何利用Servlet API构建动态Web应用。同时,对于Java Web开发的深入理解和优化具有重要意义。在实际项目中,了解Servlet的工作原理有助于更好地...
- `servlet过滤器Filter入门.doc`文档可能包含了过滤器的基本使用教程,包括创建过滤器类、配置过滤器以及在过滤器中实现业务逻辑。 - `登陆的过滤器.txt`文件可能是关于登录过滤器的详细代码示例,展示如何检查...
2. **Filter**:Filter是Java Web中的过滤器,它允许开发者在请求到达Servlet之前和Servlet响应返回给客户端之后进行拦截和处理。Filter可以用于数据验证、字符编码转换、日志记录等多种用途。在这个例子中,可能会...
四、过滤器(Filter)与监听器(Listener) Filter接口允许开发者在请求到达Servlet之前和离开Servlet之后进行拦截操作,例如认证、日志记录、编码转换等。监听器如`ServletContextListener`, `...
- Servlet 2.5引入了注解,使得无需在web.xml中配置Servlet和过滤器,可以直接在类上使用@WebServlet和@WebFilter注解进行声明。 4. **过滤器**: - 过滤器(Filter)允许在请求到达Servlet之前或响应离开Servlet...
Servlet是Java平台上的一个核心组件,...通过深入学习这些源码,开发者可以更好地理解Servlet的工作原理,优化性能,解决并发问题,以及自定义Servlet行为。这不仅有助于提升开发技能,也是理解Java EE架构的关键步骤。
过滤器在Servlet容器中拦截请求和响应,可以进行预处理和后处理,比如登录验证、字符编码转换等。监听器则监听特定事件,如会话创建、销毁,ServletContext的改变等,实现相应的逻辑。 7. **部署和运行**: JSP和...
7. **过滤器(Filter)和监听器(Listener)**:这两种组件在Servlet容器中的作用,如何使用它们增强应用的功能,比如日志记录、会话管理等。 8. **Servlet配置**:web.xml文件的使用,以及在现代应用中采用注解...
通过分析`CompressionFilter`和`beerV2_strutsV1.3`的源码,读者不仅可以了解到Servlet过滤器和Struts框架的工作原理,还可以学习到如何在实际项目中实现这些功能,提升自己的Java Web开发技能。同时,这也有助于...
7. **源码分析**: 拥有源码意味着可以直接查看这些类的实现细节,理解它们如何协同工作,这对于深入学习Servlet原理,优化代码性能,甚至开发自己的Servlet框架都非常有益。 通过深入研究`javax.servlet`和`javax....
过滤器链的处理在Servlet3中得到了优化,现在可以动态添加和删除过滤器,同时还可以在过滤器中决定是否继续执行下一个过滤器或者直接终止链。 9. **MIME类型匹配** Servlet3提供了更灵活的MIME类型匹配规则,...
3. 相关配置文件:如web.xml,用于配置Servlet和过滤器,以及应用部署的元数据。 4. 示例应用:可能包含了一些演示如何使用Servlet和JSP开发Web应用的示例代码。 学习这些源码有助于提升开发者对JavaEE框架的理解,...