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"/>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse 加html注释快捷键

    eclipse 加html注释快捷键1.单行注释:先写下注释,然后光标放到这一行上,接着按下ctrl+shitf+C快捷键,eclipse会自动注释掉这一行。2.多行注释,拖动鼠标选中你要注释的内容,然后再按下ctrl+shitf+c

    2022年6月14日
    64
  • 蓝鲸自动化运维平台

    蓝鲸自动化运维平台蓝鲸自动化运维平台1.蓝鲸简介官网:https://bk.tencent.com/docs/腾讯蓝鲸智云,简称蓝鲸,是腾讯互动娱乐事业群(InteractiveEntertainmentGroup,简称IEG)自研自用的一套用于构建企业研发运营一体化体系的PaaS开发框架,提供了aPaaS(DevOps流水线、运行环境托管、前后台框架)和iPaaS(持续集成、CMDB、作业平台、容器管理、数据平台、AI等原子平台)等模块,帮助企业技术人员快速构建基础运营PaaS。2.蓝鲸部署2

    2022年5月17日
    46
  • linux+tar怎样解压zip文件内容,linux tar压缩解压文件[通俗易懂]

    linux+tar怎样解压zip文件内容,linux tar压缩解压文件[通俗易懂]时间:2016-08-30作者:admin阅读:次-c:建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。下面的参数-f是必须的-f:使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。#tar-cf…

    2022年5月9日
    109
  • ZDH大数据采集平台-采集mysql数据到hdfs

    ZDH大数据采集平台-采集mysql数据到hdfs目录项目源码创建mysql数据源创建本地hdfs数据源配置采集任务配置调度点击执行记录查看具体日志高级使用项目源码数据采集平台管理端https://github.com/zhaoyachao/zdh_web数据采集平台服务https://github.com/zhaoyachao/zdh_serverweb端在线查看http://zycblog.cn:8081/login用户名:zyc密码:123456界面只是为了参考功能,底层的数据.

    2022年6月10日
    90
  • 记录关于我与SCOM的事情

    记录关于我与SCOM的事情

    2022年3月13日
    38
  • java入参必传_post传参方式

    java入参必传_post传参方式最近在学习citrix的xenserver6.2的源代码,发现多处用到System.Threading命名空间下的ThreadPool.QueueUserWorkItem方法:publicstaticboolQueueUserWorkItem(WaitCallbackcallBack,objectstate);publicstaticboolQueueUserWo…

    2022年9月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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