• SpringMVC(四、异常处理和综合练习)


    异常处理机制

    异常类有两个主要的子类:IOException 类和 RuntimeException 类。
    在这里插入图片描述

    异常处理的思路

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

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

    在这里插入图片描述

    异常处理两种方式

    • 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver

      ​ SpringMVC已经定义好了该类型转换器,在使用时可以根据项目情况进行相应异常与视图的映射配置

      
         
              <!––>
              
                  
                      
                      
                  
              
          
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器

    ① 创建异常处理器类实现HandlerExceptionResolver

    public class MyExceptionResolver implements HandlerExceptionResolver {
    	@Override
    	public ModelAndView resolveException(HttpServletRequest request, 
    		HttpServletResponse response, Object handler, Exception ex) {
    		//处理异常的代码实现
    		//创建ModelAndView对象
    		ModelAndView modelAndView = new ModelAndView();
    		modelAndView.setViewName("exceptionPage");
    		return modelAndView;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ② 配置异常处理器

    
    
    • 1

    ③ 编写异常页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    	
    		Title
    	
    
    	这是一个最终异常的显示页面
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ④ 测试异常跳转

    @RequestMapping("/quick22")
    @ResponseBody
    public void quickMethod22() throws IOException, ParseException {
    	SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    	simpleDateFormat.parse("abcde");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Spring练习Demo

    1、Spring练习环境搭建

    ① 创建工程(Project&Module)

    在这里插入图片描述

    ② 导入静态页面

    放到文章最后,主要学习Spring,没有注重前端页面的编写。

    ③ 导入需要坐标

    
    
        4.0.0
    
        org.example
        xmp
        1.0-SNAPSHOT
    
        
            8
            8
        
    
    
        
            
                mysql
                mysql-connector-java
                5.1.32
            
            
                c3p0
                c3p0
                0.9.1.2
            
            
                com.alibaba
                druid
                1.1.10
            
            
                junit
                junit
                4.12
                test
            
            
                org.springframework
                spring-context
                5.0.5.RELEASE
            
            
                org.springframework
                spring-test
                5.0.5.RELEASE
            
            
                org.springframework
                spring-web
                5.0.5.RELEASE
            
            
                org.springframework
                spring-webmvc
                5.0.5.RELEASE
            
            
                javax.servlet
                javax.servlet-api
                3.0.1
                provided
            
            
                javax.servlet.jsp
                javax.servlet.jsp-api
                2.2.1
                provided
            
            
                com.fasterxml.jackson.core
                jackson-core
                2.9.0
            
            
                com.fasterxml.jackson.core
                jackson-databind
                2.9.0
            
            
                com.fasterxml.jackson.core
                jackson-annotations
                2.9.0
            
            
                commons-fileupload
                commons-fileupload
                1.3.1
            
            
                commons-io
                commons-io
                2.3
            
            
                commons-logging
                commons-logging
                1.2
            
            
                org.slf4j
                slf4j-log4j12
                1.7.7
            
            
                log4j
                log4j
                1.2.17
            
            
                org.springframework
                spring-jdbc
                5.0.5.RELEASE
            
            
                org.springframework
                spring-tx
                5.0.5.RELEASE
            
            
                jstl
                jstl
                1.2
            
    
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129

    ④ 创建包结构(controller、service、dao、domain、utils等)

    在这里插入图片描述

    ⑤ 导入数据库脚本

    sql文件在文末
    在这里插入图片描述

    ⑥ 创建POJO类

    package com.xmp.pojo;
    
    import java.util.List;
    
    public class User {
    
        private Long id;
        private String username;
        private String email;
        private String password;
        private String phoneNum;
    
        //当前用户具备哪些角色
        private List roles;
    
        public List getRoles() {
            return roles;
        }
    
        public void setRoles(List roles) {
            this.roles = roles;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getPhoneNum() {
            return phoneNum;
        }
    
        public void setPhoneNum(String phoneNum) {
            this.phoneNum = phoneNum;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", email='" + email + '\'' +
                    ", passwords='" + passwords + '\'' +
                    ", phoneNum='" + phoneNum + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    package com.xmp.pojo;
    
    public class Role {
    
        private Long id;
        private String roleName;
        private String roleDesc;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getRoleName() {
            return roleName;
        }
    
        public void setRoleName(String roleName) {
            this.roleName = roleName;
        }
    
        public String getRoleDesc() {
            return roleDesc;
        }
    
        public void setRoleDesc(String roleDesc) {
            this.roleDesc = roleDesc;
        }
    
        @Override
        public String toString() {
            return "Role{" +
                    "id=" + id +
                    ", roleName='" + roleName + '\'' +
                    ", roleDesc='" + roleDesc + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    ⑦ 创建配置文件(applicationContext.xml、spring-mvc.xml、jdbc.properties、log4j.properties)

    jdbc.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/test
    jdbc.username=root
    jdbc.password=your_password
    
    • 1
    • 2
    • 3
    • 4

    log4j.properties

    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### direct messages to file myLog.log ###
    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=F:/myLog.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### set log levels - for more verbose logging change 'info' to 'debug' ###
    
    log4j.rootLogger=info, stdout
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    spring-mvc.xml

    
    
    
        
        
    
        
        
            
            
        
    
        
        
    
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    
    
    
    
        
        
    
        
        
            
            
            
            
        
    
        
        
            
        
    
        
        
            
        
    
        
        
            
        
    
        
        
            
            
        
    
        
        
            
        
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    2、用户和角色的关系

    在这里插入图片描述

    3、角色列表的展示和添加操作

    • 角色列表的展示步骤分析

    ① 点击角色管理菜单发送请求到服务器端(修改角色管理菜单的url地址)

    ② 创建RoleController和showList()方法

    ③ 创建RoleService和showList()方法

    ④ 创建RoleDao和findAll()方法

    ⑤ 使用JdbcTemplate完成查询操作

    ⑥ 将查询数据存储到Model中

    ⑦ 转发到role-list.jsp页面进行展示

    • 角色添加的步骤分析

    ① 点击列表页面新建按钮跳转到角色添加页面

    ② 输入角色信息,点击保存按钮,表单数据提交服务器

    ③ 编写RoleController的save()方法

    ④ 编写RoleService的save()方法

    ⑤ 编写RoleDao的save()方法

    ⑥ 使用JdbcTemplate保存Role数据到sys_role

    ⑦ 跳转回角色列表页面

    4、用户列表的展示和添加操作

    • 用户列表的展示步骤分析

    ① 点击用户管理菜单发送请求到服务器端(修改用户管理菜单的url地址)

    ② 创建RoleController和showList()方法

    ③ 创建RoleService和showList()方法

    ④ 创建RoleDao和findAll()方法

    ⑤ 使用JdbcTemplate完成查询操作

    ⑥ 将查询数据存储到Model中

    ⑦ 转发到user-list.jsp页面进行展示

    • 用户列表的添加步骤分析

    ① 点击列表页面新建按钮跳转到角色添加页面

    ② 输入角色信息,点击保存按钮,表单数据提交服务器

    ③ 编写RoleController的save()方法

    ④ 编写RoleService的save()方法

    ⑤ 编写RoleDao的save()方法

    ⑥ 使用JdbcTemplate保存Role数据到sys_role

    ⑦ 跳转回角色列表页面

    5、删除用户操作

    ① 点击用户列表的删除按钮,发送请求到服务器端

    ② 编写UserController的deleteById()方法

    ③ 编写UserService的deleteById()方法

    ④ 编写UserDao的deleteById()方法

    ⑤ 编写UserDao的deleteRelByUid()方法

    ⑥ 跳回当前用户列表页面

  • 相关阅读:
    基于Springboot的超市管理系统毕业设计-附源码231443
    基于TMS320F28377D开发板的DSP CLA算法案例开发手册
    python贪心算法——以“修理牛棚”题目为例
    MybatisPlus 配置多数据源
    苹果怎么互传照片?简单方法总结好了!
    微信公众号消息接入(普通消息+模板消息)
    JS-DOM 元素属性的操作(简单tab栏切换案例)
    (整理未完成)【递推 / 递归】分形
    【OpenCV-Python】教程:3-15 分水岭图像分割
    mysql实现删除某一列的重复数据(只留一行或全部删除)
  • 原文地址:https://blog.csdn.net/qq_53463544/article/details/126134437