前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC-Interceptor

SpringMVC-Interceptor

作者头像
Java开发者之家
发布2021-06-17 16:47:59
2860
发布2021-06-17 16:47:59
举报
文章被收录于专栏:Java开发者之家

# SpringMVC配置

代码语言:javascript
复制
<!-- 配置 SpringMVC 的 DispatcherServlet -->
    <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Map all requests to the DispatcherServlet for handling -->
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 配置 HiddenHttpMethodFilter: 把 POST 请求转为 DELETE、PUT 请求 -->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

# 拦截器执行顺序

代码语言:javascript
复制
package top.finen.springmvc.interceptors;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstInterceptor implements HandlerInterceptor {

    /**
     * 该方法在目标方法之前被调用
     * 若返回值为true,则继续调用后续的拦截器和目标方法
     * 若返回值是false,则不会继续调用后续的拦截器和目标方法
     *
     * 可以考虑做权限,日志,事物等
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("[FirstInterceptor] preHandle");
        return true;
    }

    /**
     * 在调用目标方法之后,但渲染视图之前
     * 可以对清秋浴中的属性或视图做出修改
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("[FirstInterceptor] postHandle");
    }

    /**
     * 在渲染视图之后被调用。释放资源的
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param e
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("[FirstInterceptor] afterCompletion");
    }
}
代码语言:javascript
复制
	<mvc:interceptors>
		<!-- 配置自定义的拦截器 -->
		<bean class="top.finen.springmvc.interceptors.FirstInterceptor"></bean>

		<!-- 配置拦截器(不)作用的路径 -->
		<mvc:interceptor>
			<mvc:mapping path="/emps"/>
			<bean class="top.finen.springmvc.interceptors.SecondInterceptor"></bean>
		</mvc:interceptor>

		<!-- 配置 LocaleChanceInterceptor -->
		<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"</bean>
	</mvc:interceptors>

# ExceptionHandlerExceptionResolver

代码语言:javascript
复制
 	/**
     * 1.在@ExceptionHandler方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象
     * 2.在@ExceptionHandler方法的入参中不能传入Map,若希望把异常信息传到页面上,需要使用ModelAndView作为返回值
     * 3.@ExceptionHandler方法标记的异常有优先级的问题
     * 4.@ControllerAdvice:如果在当前handler中招不到@ExceptionHandler方法方法来处理当前方法出现的异常。
     * 则将去@ControllerAdvice标记的类周宁查找@ExceptionHandler标记方法来处理异常。
     * @param e
     * @return
     */
    @ExceptionHandler({ArithmeticException.class})
    public ModelAndView handleArithmeticException(Exception e) {
        System.out.println("出异常了:" + e);
        ModelAndView mv = new ModelAndView(("error"));
        mv.addObject("exception", e);
        return mv;
    }

    @ExceptionHandler({RuntimeException.class})
    public ModelAndView handleArithmeticException2(Exception e) {
        System.out.println("出异常了:" + e);
        ModelAndView mv = new ModelAndView(("error"));
        mv.addObject("exception", e);
        return mv;
    }


    @RequestMapping("/testExceptionHandlerExceptionResolver")
    public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
        System.out.println("result: " + (10/i));

        return "success";
    }

# ResponseStatusExceptionResolver

代码语言:javascript
复制
	@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "测试")
    @RequestMapping("testResponseStatusExceptionResolver")
    public String testResponseStatusExceptionResolver(@RequestParam("i") int i) {
        if (i == 13) {
            throw new UserNameNotMatchPasswordExceptionHandler();
        }
        System.out.println("testResponseStatusExceptionResolver...");

        return "success";

    }

# SimpleMappingExceptionResolver

代码语言:javascript
复制
	<!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 -->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionAttribute" value="ex"></property>
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
			</props>
		</property>
	</bean>
代码语言:javascript
复制
	@RequestMapping("/testSimpleMappingExceptionResolver")
    public String testSimpleMappingExceptionResolver(@RequestParam("i") int i) {
        String[] values = new String[10];
        System.out.println(values[i]);
        System.out.println("testSimpleMappingExceptionResolver");
        return "success";
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # SpringMVC配置
  • # 拦截器执行顺序
  • # ExceptionHandlerExceptionResolver
  • # ResponseStatusExceptionResolver
  • # SimpleMappingExceptionResolver
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档