JavaWeb从入门到放弃(8)-servlet拦截器Fliter的使用(重定向和转发)

Filter位于javax.servlet.Filter,作用是在请求到达Servlet之前和服务端返回从Servlet返回之后对消息进行拦截处理。

一.使用方法

     1.实现Filter接口,重新init、destroy和doFilter方法,前两个方法一个是初始化一个是销毁,最后一个方法表示拦截的逻辑处理。

      2.web.xml配置,配置和servlet配置相似,根据class配置别名,然后给这个别名配置需要拦截的servlet,*依然表示匹配所有。

实例:

  
  
  myFilter
  com.test.c_171030.MyFilter
  
  data
  a data
  
  
  
  
  myFilter
  /MyServlet
  

在这个例子中我们定义了一个常量,这个常量在代码的读取方法如下:

	data=filterConfig.getInitParameter("data");
	System.out.println("获取web.xml中存储的数值为:"+data);

二.使用举例

   因为在doFilter方法中传入了Request和Respone对象,所以可以对请求头等部分信息进行修改。

比如:客户端请求了url+/MyServlet,现在由于需求变更,需要去请求url+/myServlet,那就需要使用如下:

1.请求转发:

HttpServletRequest request = (HttpServletRequest) servletRequest; 


// 请求重定向,把之前请求/MyServelt重定向为到/myServrlt去
		// request.getRequestDispatcher("/myServelt").forward(request, servletResponse);

filterChain.doFilter(request, servletResponse);

这样调用doFilter之后,收到这个请求的servlet将是/myServlet对于的servlet了


2.重定向


  HttpServletResponse httpServletResponse=(HttpServletResponse) servletResponse;
		// 直接拦截请求,重定向到百度或者报信息
		//httpServletResponse.sendRedirect("http://www.baidu.com");
		httpServletResponse.sendError(505,"服务端出线未知异常");


如果是转发,浏览器显示的地址不会改变还是原地址,如果是重定向,浏览器的地址将会是新的地址

举例:

客户端找servlet借钱,转发相当于这个servlet没有钱,它去找同项目下的其他servlet借,借到后给了客户端,客户端并不知道到底是谁的钱,所以地址栏一直显示的是servlet;

而重定向相当于servlet没有钱,它告诉客户端你去找别人吧,这个别人可以是这个项目下的其他servlet也可以是其他任意一个servlet(不管在哪,任何地方,不同工程,不同服务器都可以),然后客户端就去找这个servlet了,由于是客户端自己找这个servlet,所以浏览器的地址就变化了。

你可能感兴趣的:(JavaWeb从入门到放弃(8)-servlet拦截器Fliter的使用(重定向和转发))