07 拦截器 (springmvc)

1、拦截器实现方式

 

  1.1 实现HandlerInterceptor(官方推荐);

 

public class MyHandlerInterceptor implements HandlerInterceptor {

   private static final Logger logger = LogManager.getLogger();

   public MyHandlerInterceptor(){

      logger.info("正在创建MyHandlerInterceptor。");

   }

   @Override
   public boolean preHandle(HttpServletRequest request,
                      HttpServletResponse response,
                      Object handler) throws Exception {

      logger.info("正在执行MyHandlerInterceptor.preHandle(...)。");

      logger.info("handler:" + handler);


      boolean  result  =  false;

      if (    1+1  > 3 ){

         result  =  true;

      }

      /**
       * 知识点:知识点2
       * 返回值为true表示放行该请求。
       */
      return result;
   }

   @Override
   public void postHandle(HttpServletRequest request,
                     HttpServletResponse response, Object handler,
                     ModelAndView modelAndView) throws Exception {

      logger.info("正在执行MyHandlerInterceptor.postHandle(...)。");

      logger.info("handler:" + handler);

      /**
       * 知识点:知识点2
       * 如果有必要,可以操作modelAndView参数,比如更改逻辑视图或者对模型进行操作。
       */
      logger.info("modelAndView:" + modelAndView);

   }

   @Override
   public void afterCompletion(HttpServletRequest request,
                        HttpServletResponse response,
                        Object handler,
                        Exception exception) throws Exception {

      logger.info("正在执行MyHandlerInterceptor.afterCompletion(...)。");

      logger.info("handler:" + handler);

      logger.info("exception:" + exception);

   }
}

  1.2继承HandlerInterceptorAdapter类;

public class MyHandlerInterceptorAdapter extends HandlerInterceptorAdapter {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		return false;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

	}
}

  1.3 实现WebRequestInterceptor;

public class MyWebRequestInterceptor implements WebRequestInterceptor {
	@Override
	public void preHandle(WebRequest request) throws Exception {

	}

	@Override
	public void postHandle(WebRequest request, ModelMap model) throws Exception {

	}

	@Override
	public void afterCompletion(WebRequest request, Exception ex) throws Exception {

	}
}

2.XML配置

   2.1纯xml,不需要扫描器。。

       控制类不需要注解

public class HelloJspController extends AbstractController {

	private static final Logger logger = LogManager.getLogger();

	public HelloJspController() {

		logger.info("正在创建HelloJspController");

	}

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

		ModelAndView mav = new ModelAndView("hello-jsp");

		logger.info("正在执行HelloJspController.handleRequestInternal(..)。");

		return mav;
	}
}
<!-- 1、配置映射器 -->
<!-- ==================================================================================================== -->

<bean id="simpleUrlHandlerMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">//这里是架包的类
    <property name="mappings">
        <props>
            <prop key="/hello-jsp">helloJspController</prop>
        </props>
    </property>
 <!-- 注入拦截器 -->

        <property name="interceptors">
            <list>
              <!-- 这里是自己创建的一个拦截器类-->
                <bean class="com.wdzl.interceptor.MyHandlerInterceptor"></bean>
            </list>
        </property>

        <property name="order" value="1"></property>
    </bean>

需要配置控制器

<!-- 2、配置控制器 -->
<!-- ==================================================================================================== -->
<!-- 配置自定义控制器 -->
<bean id="helloJspController"
      class="com.company.project.controller.HelloJspController">
</bean>

视图解析器都是必须的

 <!-- 3、配置视图解析器 -->
    <!-- ==================================================================================================== -->
    <bean id="internalResourceViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

   2.2  XML+注解配置

控制类添加注解;

@Controller
@RequestMapping("/hello-jsp")
public class HelloJspController  {

	private static final Logger logger = LogManager.getLogger();

	public HelloJspController() {

		logger.info("正在创建HelloJspController");

	}

	@RequestMapping("")
	protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

		ModelAndView mav = new ModelAndView("hello-jsp");

		logger.info("正在执行HelloJspController.handleRequestInternal(..)。");

		return mav;
	}
}

   

然后更改配置文件

  • sao描控制器上的注解,把他们加入springmvc容器
  • <mvc:annotataion-driven/>启用默认的HandlerMapping,HandlerAdator,
  • <mvc:interceptors>配置拦截器
  • 配置视图解析器,这个功能更常用
 <!--扫描-->
    <context:component-scan base-package="com.wdzl"></context:component-scan>
    <mvc:annotation-driven/>

    <!-- 独立拦截配置 -->
    <!-- ==================================================================================================== -->
    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

        </bean>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/admin/**"/>
            <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/>
        </mvc:interceptor>
        
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <bean class="com.wdzl.interceptor.MyHandlerInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>



    <!-- ==================================================================================================== -->


    <!-- 3、配置视图解析器 -->
    <!-- ==================================================================================================== -->
    <bean id="internalResourceViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

最好web.xml文件 

  这些都是必须滴;;;

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <display-name>Archetype Created Web Application</display-name>


  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <!--部署applicationContext.xml文件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>


  <!--配置文件加载监听器-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>



  <!-- 配置DispatchServlet 的核心控制器 -->
 <!-- DispatchServlet是HTTP请求的中央调度处理器,
  它将web请求转发给controller层处理,
  它提供了敏捷的映射和异常处理机制。-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
<!--日志-->
  <context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classpath:log4j2.xml</param-value>
  </context-param>

</web-app>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值