Java+Vaadin+tomcat 使用 web.xml 处理异常
Java+Vaadin+tomcat Handling Exception using web.xml
要求:
当我们在服务器控制台中遇到任何异常(即 NullPointer、IndexOutofBoundsException 等)时,我想显示一个错误页面。
系统要求:
我们正在使用 apache tomcat 7.0.61,maven 3.2.3,Spring 和 Vaadin 7(对于 UI 框架)。
我们的 WEB.XML 文件:
<context-param>
..............
</context-param>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
.....
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>Vaadin Application Servlet</servlet-name>
<servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
<init-param>
<description>Vaadin UI to display</description>
<param-name>UI</param-name>
<param-value>com.lone.ui.LoneUI</param-value>
</init-param>
<init-param>
<description>Application widgetset</description>
<param-name>widgetset</param-name>
<param-value>com.lone.ui.AppWidgetSet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
所以我浏览并尝试了一些场景:
场景 1)
首先我配置了
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error</location>
</error-page>
(or)
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error</location>
</error-page>
在 web.xml 文件中,然后我在方法级别使用 @RequestMapping("/error") 编写了控制器 class,但这种情况不起作用。
场景二)
与上面的 web.xml 文件相同,我将 Servlet class 编写为
@WebServlet(value = {"/error"},asyncSupported = true)
public class ExceptionHandling extends VaadinServlet{
@Override
protected VaadinServletService getService() {
System.out.println("First if i display the sout message then i can Navigate to the Error Page....");
return super.getService();
}
}
但这也不起作用。
场景三)
与上面的web.xml文件相同我已经通过扩展HTTPServlet编写了Servletclass但是仍然无法显示sout消息。
场景 4)
我尝试使用 Spring @ControllerAdvice 和 @Exception 处理程序注释仍然无法显示错误页面
主要要求:
我需要在 Web.xml 文件中配置异常,这样当我们在服务器控制台中遇到任何异常时,它应该命中 web.xml 文件并导航到错误页面。
你能建议我完成这个要求吗,因为过去 2 天我一直在处理这个要求。
提前致谢。
Vaadin 7 允许您创建额外的错误处理程序。因此,如果您在 UI 上获得任何 error/exception,Vaadin 将调用 ErrorHandler。如果你的idea在任何错误的情况下重定向到错误页面,你可以执行下一步:
UI.getCurrent().setErrorHandler(new ErrorHandler() {
@Override
public void error(com.vaadin.server.ErrorEvent event) {
Page.getCurrent().setLocation("error");
// Do the default error handling (optional)
DefaultErrorHandler.doDefault(event);
}
});
您也可以使用任何其他错误处理程序方法扩展它。
要求:
当我们在服务器控制台中遇到任何异常(即 NullPointer、IndexOutofBoundsException 等)时,我想显示一个错误页面。
系统要求:
我们正在使用 apache tomcat 7.0.61,maven 3.2.3,Spring 和 Vaadin 7(对于 UI 框架)。
我们的 WEB.XML 文件:
<context-param>
..............
</context-param>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
.....
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>Vaadin Application Servlet</servlet-name>
<servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
<init-param>
<description>Vaadin UI to display</description>
<param-name>UI</param-name>
<param-value>com.lone.ui.LoneUI</param-value>
</init-param>
<init-param>
<description>Application widgetset</description>
<param-name>widgetset</param-name>
<param-value>com.lone.ui.AppWidgetSet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
所以我浏览并尝试了一些场景:
场景 1)
首先我配置了
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error</location>
</error-page>
(or)
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error</location>
</error-page>
在 web.xml 文件中,然后我在方法级别使用 @RequestMapping("/error") 编写了控制器 class,但这种情况不起作用。
场景二)
与上面的 web.xml 文件相同,我将 Servlet class 编写为
@WebServlet(value = {"/error"},asyncSupported = true)
public class ExceptionHandling extends VaadinServlet{
@Override
protected VaadinServletService getService() {
System.out.println("First if i display the sout message then i can Navigate to the Error Page....");
return super.getService();
}
}
但这也不起作用。
场景三)
与上面的web.xml文件相同我已经通过扩展HTTPServlet编写了Servletclass但是仍然无法显示sout消息。
场景 4) 我尝试使用 Spring @ControllerAdvice 和 @Exception 处理程序注释仍然无法显示错误页面
主要要求:
我需要在 Web.xml 文件中配置异常,这样当我们在服务器控制台中遇到任何异常时,它应该命中 web.xml 文件并导航到错误页面。
你能建议我完成这个要求吗,因为过去 2 天我一直在处理这个要求。
提前致谢。
Vaadin 7 允许您创建额外的错误处理程序。因此,如果您在 UI 上获得任何 error/exception,Vaadin 将调用 ErrorHandler。如果你的idea在任何错误的情况下重定向到错误页面,你可以执行下一步:
UI.getCurrent().setErrorHandler(new ErrorHandler() {
@Override
public void error(com.vaadin.server.ErrorEvent event) {
Page.getCurrent().setLocation("error");
// Do the default error handling (optional)
DefaultErrorHandler.doDefault(event);
}
});
您也可以使用任何其他错误处理程序方法扩展它。