Create a custom exception handler class as follows:
package com.pkm.maven.exception;
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;
}
}
Add following lines of code to your XXX-servlet.xml under WEB-INF
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="com.pkm.maven.exception.SpringException">ExceptionPage</prop>
</props>
</property>
<property name="defaultErrorView" value="error"/>
</bean>
Create a jsp page named 'ExceptionPage.jsp' defined in previous XXX-servlet.xml file under WEB-INF folder.
<h3 class="error">${exception.exceptionMsg}</h3>
Also create a file named 'error.jsp' under WEB-INF/jsp/ folder
<h3>General Error Page</h3>
Now time to throw custom exception
From method1 & method2 i am throwing my custom error so rendering my custom error page 'ErrorPage.jsp' & in method4, I am not throwing any exception but when invoking the line 'nullString.length()', it automatically throwing general exception, so rendering 'error.jsp' as defined in XXX-servlet.xml.
package com.pkm.maven.controller;
import com.pkm.maven.exception.SpringException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
/**
* Controller action would be like this
* public (ModelAndView | Map | String | void) actionName(HttpServletRequest, HttpServletResponse [,HttpSession] [,CommandObject]);
* @author Pritom K Mondal
*/
public class CustomerController extends MultiActionController {
public ModelAndView method1(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
throw new SpringException("Error from customer controller and method1() action.");
//return new ModelAndView("CustomerPage", "msg", "method1() method");
}
public ModelAndView method2(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
throw new Exception("Error from customer controller and method2() action.");
//return new ModelAndView("CustomerPage", "msg", "method2() method");
}
public ModelAndView method3(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView("CustomerPage", "msg", "method3() method");
}
public ModelAndView method4(HttpServletRequest request, HttpServletResponse response) throws Exception {
String nullString = null;
Integer length = nullString.length();
return new ModelAndView("CustomerPage", "msg", "method4() method");
}
}
Output would be like this in browser if you browse 'customer/method1' or 'customer/method2':
Output would be like this in browser if you browse 'customer/method4':