Filter的部署、运行

Filter 简介:

Filter是过滤器,是javaWeb的三大组件(Servlet, Filter, Listener)之一。

Filter的功能是当用户访问某个servlet时,先执行Filter,放行后才能执行servlet,

通俗讲就是可以拦截一些请求。

Filter可以有多级,执行的先后顺序按照web.xml中的排列顺序执行。

目录

  •  Filter配置
  •  Filter编写结构

1、Filter的配置

<filter>

         /* MyFilter01是创建过滤器的名字,filter.MyFilter01是具体类 */

    <filter-name>MyFilter01</filter-name>
    <filter-class>filter.MyFilter01</filter-class>
  </filter>

         /*  * /MyServlet 表示过滤器将对访问Myservlet这个servlet的请求进行过滤  
             * 可以使用通配符/* 表示对本服务器下所有servlet进行过滤
                                                                      */

  <filter-mapping>
    <filter-name>MyFilter01</filter-name>
    <url-pattern>/MyServlet</url-pattern>
  </filter-mapping>
 

2、filter编写结构

例子:

public class MyFilter01 implements Filter {
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// 过滤器也可以给出响应,但不是处理业务,它只是准备的需要
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		// 让客户端也可以看到过滤效果,相当于是把核心内容包装成了一个HTML页【HTML标签首】
		out.write("<html>"
				+ "<head><title>Filter and Servlet</title></head>"
				+ "<body>");
		out.write("这里是过滤器01工作中开始...模拟的是一号过滤器<br />");
		
		
		// 但核心业务仍然得放行,交给相应的Servlet去处理,项目中,职责要清晰
		chain.doFilter(request, response);
		
		
		// 【HTML标签尾】
		out.write("<br />这里是过滤器01工作中结束...<br />");
		out.write("</body></html>");
	}
}

第二个Filter:

public class MyFilter02 implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// 过滤器在这里做的工作,与之前对比,仅只是想在客户端,即浏览器中也可以看到它的存在
		PrintWriter out = response.getWriter();
		out.write("这里是过滤器02工作中开始...模拟的是二号过滤器<br />");
		// 放行后,核心业务仍然走Servlet处理
		chain.doFilter(request, response);
		out.write("<br />这里是过滤器02工作中结束...<br />");
	}
}

编写号web.xml后运行如下servlet:

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 用servlet来模拟核心业务动作
 */
public class MyServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// 1这里不用再设置编码和处理中文乱码问题,因为过滤器已经预设过了
		// 2这里只需要处理核心业务 
		PrintWriter out = response.getWriter();
		out.write("这里是Servlet的输出,Servlet工作中...模拟的是核心业务");
	
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值