SpringMVC笔记(3)

SpringMVC笔记(3)

一、SpringMVC 拦截器

1.1 快速入门

步骤

  1. 创建拦截器类实现HandlerInterceptor接口

    public class MyInterceptor01 implements HandlerInterceptor {
    
        /**
         * 在目标方法执行之前
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle...");
    
            //true则放行
            return true;
        }
    
        /**
         * 在目标方法执行之后,视图对象返回之前
         * @param request
         * @param response
         * @param handler
         * @param modelAndView
         * @throws Exception
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle..");
        }
    
        /**
         * 在流程都执行完毕后执行
         * @param request
         * @param response
         * @param handler
         * @param ex
         * @throws Exception
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCom...");
        }
    }
    
  2. 配置拦截器

    <!--    拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
    <!--            拦截路径-->
                <mvc:mapping path="/**"/>
    <!--            拦截器的依赖注入-->
                <bean class="interceptor.MyInterceptor01"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
    
  3. 测试拦截器的拦截效果

    preHandle…
    目标函数执行。。
    postHandle..
    afterCom…

1.2 用户登录权限控制

步骤

  1. 编写登录验证拦截器

    /**
     * 登录拦截
     * @author 郜宇博
     */
    public class PrivilegeInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            //判断用户是否登录
            // 判断session中是否存在user对象
            HttpSession session = request.getSession();
            //获取user对象
            User user = (User) session.getAttribute("user");
            //判断是否存在
            if(user == null){
                //无用户
                //重定向到登录界面
                response.sendRedirect(request.getContextPath()+"/login.jsp");
                return false;
            }
            //放行
            return true;
        }
    }
    
  2. 配置拦截器(spring-mvc.xml中)

    <!--    配置登录权限拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--           拦截目标-->
                <mvc:mapping path="/**"/>
                <!--            放行目标-->
                <mvc:exclude-mapping path="/user/login"/>
                <bean class="springTest.interceptor.PrivilegeInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    </beans>
    

二、SpringMVC异常处理

2.1 异常处理的思路

系统中异常包括两类:预期异常运行时异常****RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。

系统的DaoServiceController出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,如下图:

<span>SpringMVC笔记(3)</span>

2.2 异常处理的两种方式

2.2.1简单异常处理器:

使用SpringMVC提供的SimpleMappingExceptionResolver

1. 配置异常处理器
2. 编写异常页面
<!--    配置简单异常处理器-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--        默认错误视图-->
        <property name="defaultErrorView" value="error.jsp"></property>
<!--        单独异常配置-->
        <property name="exceptionMappings">
            <map>
<!--                类转换异常-->
                <entry key="java.lang.ClassCastException" value="error1.jsp"></entry>
                
            </map>
        </property>
    </bean>

2.2.2异常处理接口:

实现Spring的HandelerExceptionResolver

  1. 实现异常处理接口
public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView modelAndView = new ModelAndView();

        //e异常是否是ClassCastException的实例
        if(e instanceof ClassCastException){
            //设置模型和视图
            modelAndView.addObject("error","类转换异常");
        }
        else if (e instanceof DataAccessException){
            //设置模型和视图
            modelAndView.addObject("error","数据访问异常");
        }
            modelAndView.setViewName("error.jsp");
        return modelAndView;
    }
}
  1. 配置
<!--    配置自定义异常-->
    <bean class="springTest.ExceptionTest.MyExceptionResolver"/>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115192.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 贵金属黄金投资基础知识及技术交易篇「建议收藏」

    贵金属黄金投资基础知识及技术交易篇「建议收藏」贵金属黄金投资基础知识及技术交易篇  一、影响贵金属价格波动的因素  我们通常所说的贵金属主要指黄金和白银,由于它们的属性有很多共同点,所以价格走势基本相同,影响价格的因素也大同小异,皇玛hmcfds贵金属交易平台小编讲讲贵金属交易的基础知识:  1、供需关系:任何商品价格的波动本质因素都是供需关系的变化,贵金属也不例外。如果产量大幅增加就可能导致贵金属价格的下跌,如果投资交易、实物首…

  • 亲手撸了一个SpringBoot+Vue的企业级项目(附源码)

    简介 SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少…

  • 基尼系数直接计算法_基尼系数简单的计算方法

    基尼系数直接计算法_基尼系数简单的计算方法使用两种方法,通过python计算基尼系数。在sql中如何计算基尼系数,可以查看我的另一篇文章。两篇文章取数相同,可以结合去看。文章中方法1的代码来自于:(加入了一些注释,方便理解)。为精确计算。如果对于基尼系数概念不太清楚,可以看原文的第一部分。http://www.cnblogs.com/longwind09/p/8047539.html方法2和3借鉴资料:方法2和3…

    2022年10月13日
  • teleport怎么用_telelist怎么用

    teleport怎么用_telelist怎么用teleport使用说明浏览器下载网页:只能浏览主页和少数网页,其它不能浏览,容量几百kbteleport下载项目一能完全离线看网页,7328多文件9个JPG文件,大小134Mteleport下载项目二部分网页采集内容和项目一基本一致,但大几兆部分网页需要项目二(复制站点)才能浏览,项目一看不到图片项目二比项目一耗时多,但要全面视频教程https…

  • Java8中Date转换LocalDate、LocalDate转换Date、Date转换LocalDateTime

    Java8中Date转换LocalDate、LocalDate转换Date、Date转换LocalDateTime@TestpublicvoidtimeTest(){Datedate=newDate();//date转换为localDateTimeLocalDateTimelocalDateTime=LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault());System.out.println(“localDateTime=”+l…

  • pycharm使用技巧及常用快捷键_wps自定义快捷键设置

    pycharm使用技巧及常用快捷键_wps自定义快捷键设置PyCharm自身提供了大量实用的快捷键,但是由于自己之前其他软件的快捷键使用习惯与此不同,这就需要在PyCharm量身DIY属于自己的快捷键了。快来按照下面的流程操作吧!!!1、File—&gt;Settings【Settings的快捷键大家看到了嘛!!!Ctrl+Alt+S】2、Keymap—&gt;齿轮状设置—&gt;Duplicate建议在设置快捷键之前…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号