gpt4 book ai didi

java - Java EE 应用程序的理想错误页面

转载 作者:行者123 更新时间:2023-11-30 05:59:03 24 4
gpt4 key购买 nike

我在合并申请中的错误时遇到了困难。目前,我的 error.jsp 如下所示(部分):

 <%@ page isErrorPage="true" %>
<%@page contentType="text/html"%>
<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.text.SimpleDateFormat"%>

<html>
<%
String code = null, message = null, type = null, uri = null, time = null;
Object codeObj=null, messageObj=null, typeObj=null;
if (request.getAttribute("javax.servlet.error.status_code") != null)
codeObj = request.getAttribute("javax.servlet.error.status_code");
if (request.getAttribute("javax.servlet.error.message") != null)
messageObj = request.getAttribute("javax.servlet.error.message");
if (request.getAttribute("javax.servlet.error.exception_type")!=null)
typeObj = request.getAttribute("javax.servlet.error.exception_type");

if (codeObj != null) code = codeObj.toString();
if (messageObj != null) message = messageObj.toString();
if (typeObj != null) type = typeObj.toString();
uri = (String) request.getAttribute("javax.servlet.error.request_uri");
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
time = sdf.format(cal.getTime());

String error = "Code:\t\t" + code + "\nType:\t\t" + type + "\nURL:\t\t" + uri + "\nTime:\t\t" + time +"\nMessage:\t" + message;
%>

这在所有情况下都可以正常工作,除了!:有时在我的应用程序中,我使用以下代码捕获 MyException 类中的内置异常:

catch(MyException ex){
log.error(ex.getMessage(), uivex);
String originalURL = "/errorpages/error.jsp?errorcode=" + (ex.getMajor() + ex.getMinor()) + "&errormessage=" + ex.getMessage();
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);
dispatcher.forward(request,response);
}

现在的问题是,当我转发到 error.jsp 页面时...而不是从 MyException 类中看到实际错误...我看到 NullPointerException 因为 javax.servlet.error.status_code 中不存在任何内容,并且该页面被声明为 isErrorPage="true"

这种情况我该怎么办?一种解决方案是创建一个完全不同的 error.jsp(将其命名为 error1.jsp)页面并将异常从 MyException 类转发到该页面。不过,我想把所有东西都集中在一处。

最佳答案

老实说这段代码hurts我的眼睛。这是通用的应该是什么样子的。您可能会发现它很有用。

<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<jsp:useBean id="date" class="java.util.Date" />
<!DOCTYPE html>
<html lang="en">
<head>
<title>Error</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Error</h1>
<p>Unfortunately an unexpected error has occurred. Below you can find the error details.</p>
<h2>Details</h2>
<ul>
<li>Timestamp: <fmt:formatDate value="${date}" type="both" dateStyle="long" timeStyle="long" />
<li>Action: <c:out value="${requestScope['javax.servlet.forward.request_uri']}" />
<li>Exception: <c:out value="${requestScope['javax.servlet.error.exception']}" />
<li>Message: <c:out value="${requestScope['javax.servlet.error.message']}" />
<li>Status code: <c:out value="${requestScope['javax.servlet.error.status_code']}" />
<li>User agent: <c:out value="${header['user-agent']}" />
</ul>
</body>
</html>

顺便说一句,@page isErrorPage 仅在您想要 ${exception} 时有用(即 request.getAttribute("exception") 在 JSP 中可用。在这种特殊情况下,您不需要它。

事实上,根本不要在 catch block 中转发。放手吧。然后由错误页面处理。

} catch (MyException ex) {
log.error(ex.getMessage(), uivex);
throw ex; // Or throw new ServletException(ex.getMessage(), ex);
}

关于java - Java EE 应用程序的理想错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com