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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值