欢迎您的访问
专注架构,Java,数据结构算法,Python技术分享

Spring 异常处理例子

Spring 异常处理例子

下面的例子说明了如何使用 Spring MVC 框架来编写一个简单的基于 web 的应用程序,它可以处理它的内置控制器产生的一个或多个异常。为了开始使用它,让我们在恰当的位置使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 Web 框架来开发一个动态的基于表单的 Web 应用程序:

步骤 描述
1 创建一个名称为HelloWeb的动态Web项目,并且在已创建的项目的src文件夹中创建一个包com.tutorialspoint。
2 将上面提到的Spring和其他库拖拽到文件夹WebContent/WEB-INF/lib中。
3 在com.tutorialspoint包下创建一个Java类Student,StudentController和SpringException。
4 在WebContent/WEB-INF文件夹下创建Spring的配置文件Web.xml和HelloWeb-servlet.xml。
5 在WebContent/WEB-INF文件夹下创建名称为jsp的子文件夹。在这个子文件夹下创建视图文件student.jsp,result.jsp,error.jsp和ExceptionPage.jsp。
6 最后一步是创建所有的源代码和配置文件的内容,并导出该应用程序,正如下面解释的一样。

这里是 Student.java 文件的内容:

    package com.tutorialspoint;
    public class Student {
       private Integer age;
       private String name;
       private Integer id;
       public void setAge(Integer age) {
          this.age = age;
       }
       public Integer getAge() {
          return age;
       }
       public void setName(String name) {
          this.name = name;
       }
       public String getName() {
          return name;
       }
       public void setId(Integer id) {
          this.id = id;
       }
       public Integer getId() {
          return id;
       }
    }

下面是 SpringException.java 文件的内容:

    package com.tutorialspoint;
    public class SpringException extends RuntimeException{
       private String exceptionMsg;   
       public SpringException(String exceptionMsg) {
          this.exceptionMsg = exceptionMsg;
       }   
       public String getExceptionMsg(){
          return this.exceptionMsg;
       }   
       public void setExceptionMsg(String exceptionMsg) {
          this.exceptionMsg = exceptionMsg;
       }
    }

下面是 StudentController.java 文件的内容。这里,你需要使用 @ExceptionHandler 注解一个 service 方法,你可以指定要处理的一个或多个异常。如果你要指定一个以上的异常,那么你可以使用逗号分隔这些值。

    package com.tutorialspoint;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.ui.ModelMap;
    @Controller
    public class StudentController {
       @RequestMapping(value = "/student", method = RequestMethod.GET)
       public ModelAndView student() {
          return new ModelAndView("student", "command", new Student());
       }
       @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
       @ExceptionHandler({SpringException.class})
       public String addStudent( @ModelAttribute("HelloWeb")Student student, 
          ModelMap model) {
          if(student.getName().length() < 5 ){
             throw new SpringException("Given name is too short");
          }else{
           model.addAttribute("name", student.getName());
          }     
          if( student.getAge() < 10 ){
             throw new SpringException("Given age is too low");
          }else{
           model.addAttribute("age", student.getAge());
          }
          model.addAttribute("id", student.getId());
          return "result";
       }
    }

下面是 Spring Web 配置文件 web.xml 的内容

    <web-app id="WebApp_ID" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

        <display-name>Spring Exception Handling</display-name>

        <servlet>
            <servlet-name>HelloWeb</servlet-name>
            <servlet-class>
               org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>HelloWeb</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    </web-app>

下面是另一个 Spring Web 配置文件 HelloWeb-servlet.xml 的内容

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.tutorialspoint" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/WEB-INF/jsp/" />
       <property name="suffix" value=".jsp" />
    </bean>

    <bean class="org.springframework.web.servlet.handler.
          SimpleMappingExceptionResolver">
       <property name="exceptionMappings">
          <props>
             <prop key="com.tutorialspoint.SpringException">
                ExceptionPage
             </prop>
          </props>
       </property>
       <property name="defaultErrorView" value="error"/>
    </bean>

    </beans>

在这里,你指定 ExceptionPage 作为一个异常视图,以便 SpringException 发生,如果有任何其他类型的异常发生,那么一个通用的视图 error 会发生。

下面是 Spring 视图文件 student.jsp 的内容:

    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <html>
    <head>
        <title>Spring MVC Exception Handling</title>
    </head>
    <body>

    <h2>Student Information</h2>
    <form:form method="POST" action="/HelloWeb/addStudent">
       | Name||
| :-----: | :-----: | 
| Name |  | 
| Age |  | 
| id |  | 
|  | 

    </form:form>
    </body>
    </html>

下面是 Spring 视图文件 error.jsp 的内容:

    <html>
    <head>
        <title>Spring Error Page</title>
    </head>
    <body>

    <p>An error occured, please contact webmaster.</p>

    </body>
    </html>;

下面是 Spring 视图文件 ExceptionPage.jsp 的内容。在这里,你将通过 ${exception} 访问异常实例。

    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <html>
    <head>
        <title>Spring MVC Exception Handling</title>
    </head>
    <body>

    <h2>Spring MVC Exception Handling</h2>

    <h3>${exception.exceptionMsg}</h3>

    </body>
    </html>

下面是 Spring 视图文件 result.jsp 的内容:

    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <html>
    <head>
        <title>Spring MVC Form Handling</title>
    </head>
    <body>

    <h2>Submitted Student Information</h2>
       | Name|${name}|
| :-----: | :-----: | 
| Name | ${name} | 
| Age | ${age} | 
| ID | ${id} | 

    </body>
    </html>

最后,下面是包含在你的 web 应用程序中的 Spring 和其他库的列表。你仅仅需要将这些文件拖拽到 WebContent/WEB-INF/lib 文件夹中。

  • commons-logging-x.y.z.jar
  • org.springframework.asm-x.y.z.jar
  • org.springframework.beans-x.y.z.jar
  • org.springframework.context-x.y.z.jar
  • org.springframework.core-x.y.z.jar
  • org.springframework.expression-x.y.z.jar
  • org.springframework.web.servlet-x.y.z.jar
  • org.springframework.web-x.y.z.jar
  • spring-web.jar

一旦你完成了创建源代码和配置文件后,导出你的应用程序。右键单击你的应用程序,并且使用 Export > WAR File 选项,并且在 Tomcat 的 webapps 文件夹中保存你的 HelloWeb.war 文件。

现在启动你的 Tomcat 服务器,并且确保你能够使用标准的浏览器访问 webapps 文件夹中的其他 web 页面。现在尝试访问该 URL http://localhost:8080/SpringWeb/student。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

输入如上图所示的值,然后单击提交按钮。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

作者:w3cschool | 来源:https://www.w3cschool.cn

赞(0) 打赏
版权归原创作者所有,任何形式转载请联系作者;码农code之路 » Spring 异常处理例子

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏