SpringMVC的异常处理和REST风格的实例应用(十三)上

简介: SpringMVC的异常处理和REST风格的实例应用(十三)上

一. SpringMVC的异常处理


异常,在开发中很常见,有编译时期的异常和运行时期的异常。 异常,可以存在于 dao,service,action 各个层里面, 在方法中可以抛出异常,依次抛出, dao里面抛出的异常,由service进行处理,service里面抛出的异常,由action进行处理。 但一般,不在dao里面抛出异常,dao里面的异常是数据库层面的异常,由数据库进行抛出,如 select语句错误,插入时主键重复,查询出多行用一行接收 等。 service抛出的是业务的异常,是业务逻辑的错误。 action中的异常,主要是接收处理service中抛出的异常,或者是对前端传入的数据进行验证的异常。 常见的,是把所有的异常都放置在action中。


springmvc的异常处理,常见的有三种方式, 一种是 org.springframework.web.servlet.handler.SimpleMappingExceptionResolver 进行配置, 另外一种是实现 org.springframework.web.servlet.HandlerExceptionResolver 接口,还有一种是注解的形式。 注解的形式,不常用,老蝴蝶这里就不讲了。 可以学习 JS_HCX 前辈的文章: springmvc异常处理


老蝴蝶写这篇文章的时候,也参考了该文章,为了评论,还特意注册了简书。 哈哈。


二. SimpleMappingExceptionResolver 实现异常处理


自定义的异常,需要继承 java.lang.Exception 类, 常见的异常有很多,这里以 员工 User 类为例,自定义两个异常类,一个是 InputException, 对输入数据的异常处理, DataException 对数据的异常处理。


二.一 自定义的 InputException 类


package com.yjl.exception;
public class InputException extends Exception{
  private static final long serialVersionUID = 1L;
  private String message;
  public InputException(){
  }
  public InputException(String message) {
    this.message = message;
  }
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
}


二.二 自定义的 DataException 类


package com.yjl.exception;
public class DataException extends Exception{
  private static final long serialVersionUID = 1L;
  private String message;
  public DataException(){
  }
  public DataException(String message) {
    this.message = message;
  }
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
}


二.三 前端登录页面 login.jsp


<body>
  <h2>两个蝴蝶飞,异常处理使用</h2>
  <form:form commandName="user" action="login.action" type="post">
    <form:label path="name">姓名:</form:label>
    <form:input path="name"/> <br/><br/>
    <form:label path="password">密码:</form:label>
    <form:input path="password"/> <br/><br/>
    <form:button>提交</form:button>
  </form:form>
</body>


二.四 后端 UserAction 验证处理


//转到登录的页面
  @RequestMapping(value="toLogin")
  public String toLogin(Model model){
    model.addAttribute("user",new User());
    return "user/login";
  }
  //绑定到user对象。
  @RequestMapping(value="login") 
  public String login(User user,Model model,HttpServletRequest request)
  throws Exception{
    model.addAttribute("user",user);
    if(user.getName()==null||"".equals(user.getName())){
      throw new InputException("用户名不能为空");
    }
    if(user.getPassword()==null||"".equals(user.getPassword())){
      throw new InputException("密码不能为空");
    }
    if(!("两个蝴蝶飞".equals(user.getName())&&"1234".equals(user.getPassword()))){
      throw new DataException("用户名或者是密码不正确");
    }
    return "user/list";
  }


根据前台传入的不同的值,进行抛出不同的异常信息。


二.五 springmvc.xml 配置文件中配置 SimpleMappingExceptionResolver


<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置异常 -->
  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
       <props>
        <!-- 每个异常类,对应一个jsp -->
              <prop key="com.yjl.exception.InputException">errors/inputError</prop>
              <prop key="com.yjl.exception.DataException">errors/dataError</prop>
        <!-- 可继续添加多个 ,如StudentException -->
      </props>
    </property>
    <!-- 默认的异常页面 -->
    <property name="defaultErrorView" value="errors/default"></property>
    <!-- 默认的异常代码 -->
    <property name="defaultStatusCode" value="500"></property>
    <!-- 异常属性设置,用于在jsp中进行接收异常的信息 -->
    <property name="exceptionAttribute" value="ex"></property>
  </bean>


二.六 创建errors文件夹,里面创建不同的异常.jsp


不要忘记 在jsp 里面设置 isErrorPage=true.


1 .errors/default.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>默认异常接收</title>
</head>
<body>
  ${ex.message}
</body>
</html>


2 .errors/inputError.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>输入数据异常</title>
</head>
<body>
  ${ex.message}, 用户输入的错误
</body>
</html>


3 . errors/dataError.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>数据异常</title>
</head>
<body>
  ${ex.message},数据用户不存在的错误
</body>
</html>


二.七 重启服务器,进行验证


正常的界面:


微信图片_20211228234356.png


没有输入用户名时:


微信图片_20211228234426.png


用户名输入为两个蝴蝶飞, 密码不输入时


微信图片_20211228234446.png


用户名输入为两个蝴蝶飞,密码输入 12时,


微信图片_20211228234505.png


用户名输入为两个蝴蝶飞,密码输入为1234,正确的数据时,


微信图片_20211228234525.png


可以进行异常的抛出,然而,这个只能进行抛出异常,根据不同的异常,来跳转到不同的页面进行显示,却无法对异常进行相应的处理,所以会选择实现 HandlerExceptionResolver 接口的方式。

相关文章
|
XML 前端开发 JavaScript
Spring MVC应用的开发步骤
Spring MVC应用的开发步骤
126 0
|
22天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
53 2
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
67 0
|
7月前
|
前端开发 Java Spring
参数解密:揭示Spring MVC请求参数处理的实际应用指南
参数解密:揭示Spring MVC请求参数处理的实际应用指南
58 1
|
7月前
|
前端开发 Java 数据库
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
|
Java 数据库 数据安全/隐私保护
SpringMVC中@ModelAttribute应用实践
SpringMVC中@ModelAttribute应用实践
80 2
|
存储 JSON Java
SpringMVC应用
SpringMVC应用
62 0
|
Java Apache Maven
Tiles与SpringMVC整合应用实践
Tiles与SpringMVC整合应用实践
109 0
|
自然语言处理 前端开发 Java
SpringMVC中form标签与数据绑定应用实践
SpringMVC中form标签与数据绑定应用实践
102 0
|
Java 数据库连接 Maven
SpringMvc 之crud增删改查应用
SpringMvc 之crud增删改查应用
62 0