Wednesday 5 December 2018

Spring mvc: Exception handling using configurations

This is continuation to my previous post. In my previous post, I explained how to handle exceptions at application level using @ControllerAdvice annotation.

@ControllerAdvice
public class GlobalExceptionHandler {

         @ExceptionHandler(RuntimeException.class)
         public String handleRuntimeException() {
                  return "runtimeException";
         }
}

You can even achieve the same by adding below configurations in dispatcher servlet file.

         <bean id="globalExcpetionHandlingResolver"
         class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

                  <!-- Map each exception with correspondent jsp view -->
                  <property name="exceptionMappings">
                           <map>
                                    <entry key="RuntimeException" value="runtimeException" />
                           </map>
                  </property>

                  <!-- Set the name of the default error view. This view will be returned
                           if no specific mapping was found. -->
                  <property name="defaultErrorView" value="Exception" />

                  <!-- Set the log category for warn logging. The name will be passed to
                           the underlying logger implementation through Commons Logging, getting interpreted
                           as a log category according to the logger's configuration. -->

                  <property name="warnLogCategory" value="MVCLogger" />

         </bean>

Find the below working application.

HelloWorldController.java
package com.sample.myApp.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {

 @RequestMapping("/welcome")
 public String getHelloMessage() {
  boolean flag = true;

  if (flag) {
   throw new RuntimeException("Throwning blindly");
  }

  return "welcome";
 }

}

Create welcome.jsp, runtimeException.jsp files under WEB-INF/jsp folder.

welcome.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Hello World Spring Web MVC</title>
</head>
<body>
 <h1>
  Hello, Good Morning
 </h1>
</body>
</html>

runtimeException.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
 <h1>Run time exception occured. Please contact the Administrator.
 </h1>
</body>
</html>

Create web.xml, HelloWorld-servlet.xml files under WEB-INF folder.


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 MVC Hello WorldApplication</display-name>

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

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

</web-app>

HelloWorld-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

 <mvc:annotation-driven />

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

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

 <bean id="globalExcpetionHandlingResolver"
  class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

  <!-- Map each exception with correspondent jsp view -->
  <property name="exceptionMappings">
   <map>
    <entry key="RuntimeException" value="runtimeException" />
   </map>
  </property>

  <!-- Set the name of the default error view. This view will be returned 
   if no specific mapping was found. -->
  <property name="defaultErrorView" value="Exception" />

  <!-- Set the log category for warn logging. The name will be passed to 
   the underlying logger implementation through Commons Logging, getting interpreted 
   as a log category according to the logger's configuration. -->

  <property name="warnLogCategory" value="MVCLogger" />

 </bean>


</beans>


Create index.jsp file under webapp folder.


index.jsp
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>Welcome Page</title>
</head>

<body>
 <h2>Click on below button to get welcome page</h2>
 <form method="post" action="/springdemo/welcome"
  id="form1">

  <input type="submit" value="getWelcomeMessage"
   style="font-size: 18px;" />
 </form>

</body>
</html>

Project structure looks like below.

Run the application on server.

Click on button ‘getWelcomeMessage’, you will be redirected to runtimeException.jsp


Previous                                                 Next                                                 Home

No comments:

Post a Comment