0
点赞
收藏
分享

微信扫一扫

过滤器、监听器、拦截器的介绍以及用法

彪悍的鼹鼠 2022-04-30 阅读 55

三个问题

1、什么是监听器?有什么作用?怎样用的?

监听器(listener)就是application、session、request三个对象创建、销毁 

或者往其中添加修改删除属性时

自动执行代码的功能组件。

用法:

(1)定义一个类去实现ServletContextListener接口

public class BannerListener implements ServletContextListener {

	/*ServletContext对象被创建*/
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		/**
		 * 	创建表示spring容器的对象,ApplicationContext
		 * 	ApplicationContext就是表示Spring容器,通过容器获取对象了
		 * 	ClassPathXmlApplicationContext:表示从类路怪中加载spring的配置文件
		 */
		ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
		IBannerService bannerService = app.getBean(IBannerService.class);
		List<Banner> bannerList = bannerService.findAllShowBanner();

		ServletContext application = arg0.getServletContext();
		application.setAttribute("bannerList", bannerList);
	}

	/*ServletContext对象被销毁*/
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub

	}
}

(2)web.xm里面的配置

<!--监听器-->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>com.phonemarket.listener.BannerListener</listener-class>
	</listener>

2、什么是过滤器?有什么作用?怎样用的?

过滤请求的,对请求进行过滤,有“通行证”则放行,没有就指定它跳到哪个页面。

过滤器用法:

自定义一个类实现Filter接口

/*实现Filter接口*/
public class ManagerFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    /*主要重写这个方法*/
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        Object user = httpServletRequest.getSession().getAttribute("user");
        if (user == null){
            //返回登录页面
            httpServletRequest.getRequestDispatcher("/pages/user/login.jsp").forward(servletRequest, servletResponse);
        }else {
            //放行
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}

web.xml的配置

<!--    管理者页面ManagerFilter的拦截 -->
    <filter>
        <filter-name>ManagerFilter</filter-name>
        <filter-class>com.java.filter.ManagerFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ManagerFilter</filter-name>
        <!-- 拦截路径,拦截orderServlet请求-->
        <url-pattern>/pages/manager/*</url-pattern>
        <url-pattern>/manager/bookServlet</url-pattern>
        <url-pattern>/orderServlet</url-pattern>
    </filter-mapping>

3、什么是拦截器?有什么作用?怎样用的?

拦截器也是过滤请求的,作用感觉和过滤器差不多,但他们还是有区别的,拦截器是spring框架的,过滤器是javaweb的三大组件之一(servlet、listener、filter)

拦截器用法:

三个方法,请求之前执行、controller获取数据后返回视图页面前执行、跳转完页面后执行。

普遍都是重写第一个方法,进行一些身份的验证

(1)定义一个拦截器类实现 HandlerInterceptor 接口


public class AdminLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        Admins admin = (Admins) httpServletRequest.getSession().getAttribute("admin");
        if(admin!=null){
            return true;
        }
        httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/view/admin");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

(2)、这一部分是要写在 springmvc.xml的配置文件里面的,设置 拦截路径+绑定拦截器

<mvc:interceptors>
		<!-- 对特定的请求进行拦截 -->
		<mvc:interceptor>
			<mvc:mapping path="/goods/detail" />
			<mvc:mapping path="/cart/*" />
			<bean id="UserLoginInterceptor" class="com.phonemarket.interceptor.UserLoginInterceptor"></bean>
		</mvc:interceptor>

		<mvc:interceptor>
			<mvc:mapping path="/view/toAdminIndex"/>
			<bean id="AdminLoginInterceptor" class="com.phonemarket.interceptor.AdminLoginInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
举报

相关推荐

0 条评论