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

来源:互联网 发布:java读取log4j日志 编辑:程序博客网 时间:2024/06/03 19:04

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

一.使用方法

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

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

实例:

  <!-- 配置过滤器,后面的init表示自己定义的常量,在代码中可以获取到 -->  <filter>  <filter-name>myFilter</filter-name>  <filter-class>com.test.c_171030.MyFilter</filter-class>  <init-param>  <param-name>data</param-name>  <param-value>a data</param-value>  </init-param>  </filter>  <!-- 配置过滤器需要过滤的url -->  <filter-mapping>  <filter-name>myFilter</filter-name>  <url-pattern>/MyServlet</url-pattern>  </filter-mapping>

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

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,所以浏览器的地址就变化了。

原创粉丝点击