过滤器(filter)和(interceptor)

        首先众所周知,过滤器是与ervlet容器支持的,拦截器是与Spring容器支持的。

先谈谈Servlet(小服务程序)=Service+Applet(小应用程序):

         Servlet是一个供其他Java程序调用的Java类,不能独立运行。Servlet的生命周期是由Servlet容器控制的,分为三个阶段:初始化,运行,销毁。Servlet的生命周期在百科中都有,概括而言就是由web容器调用,客户端发送请求的时候,实例化Servlet对象并初始化,再调用Service()方法离得doPost()或者doGetI()或者其他最后销毁。{需要注意的是Servlet一般只被初始化一次,即再次请求的时候不用init()直接调用service()方法}。

         在eclipse中使用如下:

         见附件,现在用的是4.4版本的好像web.xml就没有以前的servlet-mapping和servlet-name还有url了,说的不对请指出谢谢。

         那Servlet说完了该说正点了Filter(过滤器):

 <filter>
    <filter-name>mainPageFilter</filter-name>
    <filter-class>com.meihf.hjoyblog.filter.MainPageFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>mainPageFilter</filter-name>
    <url-pattern>/main/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

           class对应你项目下的类目录,url-pattern是拦截请求。2.4版本后新增的<dispatcher>标签有REQUEST,FORWARD,INCLUDE,ERROR分别解释为:通过客户端传来的请求,通过forward传来的请求,通过include传来的请求和<error-page>传来的请求,默认是REQUEST。

           

package com.hanyx.hjoyblog.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpUtils;

import org.springframework.web.filter.OncePerRequestFilter;

public class MainPageFilter extends OncePerRequestFilter {

	@Override
	protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain fc)
			throws ServletException, IOException {
		@SuppressWarnings("deprecation")
		CharSequence requestPath = HttpUtils.getRequestURL(request);
		    int start = requestPath.toString().lastIndexOf("main")+4;
			String subPath = (String) requestPath.subSequence(start,requestPath.length());
			request.setAttribute("subPath", "/HJoyBlog/main"+subPath);
			request.getRequestDispatcher("/main").forward(request, response);
		}
	}

 

      你所写的拦截器的类继承OncePerRequestFilter,这是为什么呢?

因为要确保一次 请求只通过一次拦截器不需重复。

 

       再来说说interceptor(拦截器)是利用发射来管理这个类。拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求都起作用。另外在action的生命周期中,拦截器可以多次被调用,而过滤器只在初始化的时候被调用一次。

       拦截器是做一些业务逻辑的操作。具体怎样使用如下代码:

       

      这里先空出来,暂时还没有写这里的代码,配置的话同理写一个拦截器,然后在struts.xml中进行配置,等我写了我会再贴出来。

      后续再补充还有SpringMVC的interceptor也会补充,谢谢。说的不对请大家指出。

 

 


          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
filter过滤器和拦截器是Web开发中常用的两种组件,它们在请求处理过程中起到了类似于"中间件"的作用,用于对请求进行处理和拦截。 Filter过滤器是Servlet规范中定义的一种组件,它可以对请求进行预处理和后处理。Filter可以拦截特定的URL请求,对请求进行处理,并将请求传递给下一个过滤器或Servlet。Filter可以用于对请求进行身份验证、日志记录、编码转换、资源过滤等等操作。一个应用可以配置多个Filter,它们按照配置的顺序依次执行。 拦截器是在Spring框架中使用的一种组件,它也可以对请求进行预处理和后处理。拦截器的使用更加灵活,可以对请求进行更加细粒度的控制。拦截器可以拦截Controller方法的调用,在方法执行前后做一些处理,例如身份验证、日志记录、性能监控等。一个应用可以配置多个拦截器,它们按照配置的顺序依次执行。 在使用上,filterinterceptor有一些区别: - Filter是基于Servlet规范的,而Interceptor是Spring框架提供的; - Filter可以对所有的请求进行拦截,而Interceptor可以对Controller方法进行拦截; - Filter只能通过web.xml或注解进行配置,而Interceptor可以通过Java代码进行配置; - Interceptor可以访问Spring的上下文,而Filter不能。 总结来说,filterinterceptor都可以用于对请求进行处理和拦截,但是它们的具体实现和使用方式有一些差异。在使用时,可以根据具体需求选择适合的组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值