Dam*_*lls 12 java jsp servlets
你如何正确处理servlet中遇到的错误?现在,我继承了应用程序(只使用纯JSP/Servlet的),有一个叫做超Controller
延伸HttpServlet
和所有其他servlet的延伸.在Controller
该类中是一个try和catch块,如下所示:
try {
// execute doPost or doGet here
} catch (Exception e) {
// show a generic error page
}
Run Code Online (Sandbox Code Playgroud)
这是正确的做法吗?它似乎很笨重,似乎并不总是奏效.我只是一名实习生,所以我对此没有太多经验.有什么建议?我正在努力使应用程序变得强大..
Don*_*rem 17
或者您可以使用servlet拦截所有异常:
<!-- WEB-INF/web.xml -->
<servlet>
<servlet-name>ErrorServlet</servlet-name>
<servlet-class>com.domain.MyErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ErrorServlet</servlet-name>
<url-pattern>/error</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
然后在servlet中你可以像这样处理异常
public class MyErrorServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response){
Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
// You can log the exception, send to email, etc
}
}
Run Code Online (Sandbox Code Playgroud)
Asa*_*aph 16
做标准的事情是有你的servlet的doXxx()
方法(例如doGet()
,doPost()
等)抛出一个ServletException
和允许容器捕捉和处理.您可以WEB-INF/web.xml
使用<error-page>
标记指定要显示的自定义错误页面:
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
如果你最终捕捉到一个Exception
你无法优雅地处理,只需将它包装成ServletException
如下:
try {
// code that throws an Exception
} catch (Exception e) {
throw new ServletException(e);
}
Run Code Online (Sandbox Code Playgroud)