In
this post, you are going to learn,
a. What is the behaviour of spring
application, when there is no exception handling mechanism.
b. How to customise the exception
handling process.
What is the behaviour of spring application, when there is no exception handling mechanism.
Let’s
try to find out with an example. I written handler method 'getHelloMessage'
like below.
@RequestMapping("/welcome")
public
String getHelloMessage() {
boolean flag = true;
if (flag) {
throw new
RuntimeException("Throwning blindly");
}
return "welcome";
}
As
you see the definition of 'getHelloMessage' method, it throw RuntimeException
in all the cases. Follow below step-by-step procedure and set up the
application first.
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 file under WEB-INF/jsp folder.
<%@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>
Create
web.xml, HelloWorld-servlet.xml files under WEB-INF folder.
<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> </beans>
Create
index.jsp file under webapp folder.
<%@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>
Total
project structure looks like below.
Run
the application on server, you can able to see below kind of screen.
Click
on the button ‘getWelcomeMessage’. You can able to see below kind of screen.
As
you see above image, it is displaying complete stack trace and server that is
used by the application to run. It doesn’t look good and expose security
concerns.
How to customize the
exception handling process?
By
using @ExceptionHandler annotation, we can redirect to some view page on error
cases.
For
example, I added below method in HelloWorldController class.
@ExceptionHandler(RuntimeException.class)
public String handleRuntimeException()
{
return
"runtimeException";
}
Whenever
any run time exception thrown, then runtimeException.jsp file is shown to the
user.
Update
HelloWorldController class like below.
HelloWorldController.java
package com.sample.myApp.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; 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"; } @ExceptionHandler(RuntimeException.class) public String handleRuntimeException() { return "runtimeException"; } }
Create
'runtimeException.jsp' file under WEB-INF/jsp folder.
<%@ 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>
Run
the application on server.
Click
on ‘getWelcomeMessage’ button.
No comments:
Post a Comment