您的位置:首页 > 其它

servlet过滤器简单入门

2018-03-19 16:42 453 查看
一.servlet过滤器能干什么?

    1.在客户端的请求访问后端资源之前,拦截这些请求。
    2.在服务器的响应发送回客户端之前,处理这些响应。

二.使用场景
    1.网站统计

    2.身份验证

    3.数据压缩

    4.数据加密

    5.日志记录

    6.图像转换
    ......

三.如何使用servlet过滤器
    1.编写java类实现filter接口,重写doFilter方法

    2.在web.xml文件中配置过滤器

四.小案例
    1.项目结构如图:



    2.三个类代码如下:public class HelloWorld extends HttpServlet {

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getServletPath();
if("/hello.do".equals(path)){
showView(request,response);
}else{
showError(request,response);
}
}

public void showError(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter pw = response.getWriter();
pw.println("error! 失败!");
pw.flush();
pw.close();

}

public void showView(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter pw = response.getWriter();
pw.println("hello world! 成功!");
pw.flush();
pw.close();
}

}
public class EncodingFilter implements Filter {

public void destroy() {
System.out.println("encodingfilter 执行结束!");

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);

}

public void init(FilterConfig arg0) throws ServletException {
System.out.println("encodingfilter 执行开始...");

}

}

public class LogFilter implements Filter {

public void destroy() {
System.out.println("logfilter 执行结束!");

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);

}

public void init(FilterConfig arg0) throws ServletException {
System.out.println("logfiler 执行开始...");

}

}


    3.web.xml配置如下图:<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>utils.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter>
<filter-name>logFilter</filter-name>
<filter-class>utils.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>web.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

结语:上面代码属于简化代码,重点是过滤器的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息