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)


相关推荐

  • java工程师薪资待遇_java软件工程师一个月挣多少钱

    java工程师薪资待遇_java软件工程师一个月挣多少钱Java软件工程师工资待遇详解时间:2018-08-16来源:未知Java软件工程师工资待遇情况怎么样?Java软件工程师的工资水平与哪些因素有关呢?今天小编从这两方面和大家来进行分析一下Java工程师工资待遇。Java软件工程师工资待遇情况据有关数据显示,目前,我国对软件人才的需求已达20万,并且以每年20%左右的速度增长。在未来5年内,合格软件人才的需求将远大于供给。2016年的时候…

  • Shell循环执行某命令n次

    Shell循环执行某命令n次如下脚本是打印’helloword!‘500次#!/bin/bashi=0times=500while[$i-le$times]doecho’helloword!’done

  • centos7重启apache、nginx、mysql、php-fpm命令

    centos7重启apache、nginx、mysql、php-fpm命令

    2021年10月27日
  • java中sqrt函数的详解[通俗易懂]

    java中sqrt函数的详解[通俗易懂]一、原理:牛顿迭代法具体解释:牛顿迭代法求平方根那我们怎么用牛顿迭代法呢?首先要明白,牛顿迭代法求的是函数和X轴的交点的横坐标,也就是我们说的根1)那么第一步就是构建曲线了。假设有一个数c,我们求它的平方根x,那么有一个等式,x^2=c;挪到一边就是求f= x^2-c的根x2)带入上面的公式也就是 3)既然是个迭代,那么

  • java启动命令参数_centos配置java环境变量

    java启动命令参数_centos配置java环境变量问题说明为了分析和定位一个Java线上系统问题,我们需要查看JVM启动时的一些参数设置,例如:垃圾回收算法、堆大小等等。这些参数可能在启动脚本中明确指明,也可能采用默认值。在系统运行过程中其他人也许动态调整了系统参数。问题解决通过jps命令找对对应的进程号[root@swk-207~]#jps-lm|grepxk17743/xxx/server/skynet/lib/skynet-cl…

  • select top 1 * from tablename[通俗易懂]

    select top 1 * from tablename[通俗易懂]今天在网上查找selecttop1*fromDepartMent的信息时,找到的信息答案不是很准确所以现在把自己的答案张贴出来。希望对大家有所帮助。selecttop1*fromtablename这段SQL语句的意思是:读取一个表中的第一条记录。如果是selecttop 5*fromtablename这样的话呢就是读取表中记录的前5条记录。  

发表回复

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

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