栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将异常从servlet转发到jsp页面的好方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将异常从servlet转发到jsp页面的好方法是什么?

几个请求属性 已经
提供了有关异常的信息。你可以找到所有这些属性的名称中

RequestDispatcher
的javadoc:

  • ERROR_EXCEPTION
    --
    javax.servlet.error.exeption
  • ERROR_EXCEPTION_TYPE
    --
    javax.servlet.error.exception_type
  • ERROR_MESSAGE
    --
    javax.servlet.error.message
  • ERROR_REQUEST_URI
    --
    javax.servlet.error.request_uri
  • ERROR_SERVLET_NAME
    --
    javax.servlet.error.servlet_name
  • ERROR_STATUS_CODE
    --
    javax.servlet.error.status_pre

因此,简而言之,此JSP示例应显示所有可能的异常详细信息:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>...<ul>    <li>Exception: <c:out value="${requestScope['javax.servlet.error.exception']}" /></li>    <li>Exception type: <c:out value="${requestScope['javax.servlet.error.exception_type']}" /></li>    <li>Exception message: <c:out value="${requestScope['javax.servlet.error.message']}" /></li>    <li>Request URI: <c:out value="${requestScope['javax.servlet.error.request_uri']}" /></li>    <li>Servlet name: <c:out value="${requestScope['javax.servlet.error.servlet_name']}" /></li>    <li>Status pre: <c:out value="${requestScope['javax.servlet.error.status_pre']}" /></li></ul>

此外,您还可以显示以下有用信息:

<%@ 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"  />...<ul>    <li>Timestamp: <fmt:formatDate value="${date}" type="both" dateStyle="long" timeStyle="long" /></li>    <li>User agent: <c:out value="${header['user-agent']}" /></li></ul>

Exception
只有
${exception}
将页面标记为错误页面时,具体实例本身才在JSP中可用:

<%@ page isErrorPage="true" %>...${exception}

仅当使用EL 2.2或更高版本时,才可以按以下方式打印其堆栈跟踪:

<%@ page isErrorPage="true" %>...<pre>${pageContext.out.flush()}${exception.printStackTrace(pageContext.response.writer)}</pre>

或者,如果您尚未使用EL2.2,则可以为此创建一个自定义EL函数:

public final class Functions {    private Functions() {}    public static String printStackTrace(Throwable exception) {        StringWriter stringWriter = new StringWriter();        exception.printStackTrace(new PrintWriter(stringWriter, true));        return stringWriter.toString();    }}

/WEB-INF/functions.tld
以下位置注册的:

<?xml version="1.0" encoding="UTF-8" ?><taglib     xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"    version="2.1">    <display-name>Custom Functions</display-name>        <tlib-version>1.0</tlib-version>    <uri>http://example.com/functions</uri>    <function>        <name>printStackTrace</name>        <function-class>com.example.Functions</function-class>        <function-signature>java.lang.String printStackTrace(java.lang.Throwable)</function-signature>    </function></taglib>

并且可以用作

<%@ taglib prefix="my" uri="http://example.com/functions" %>...<pre>${my:printStackTrace(exception)}</pre>

关于异常的记录,最简单的地方是一个过滤器,该过滤器映射到的URL模式上

/*
,并且基本上执行以下操作:

try {    chain.doFilter(request, response);} catch (ServletException e) {    log(e.getRootCause());    throw e;} catch (IOException e) { // If necessary? Usually not thrown by business pre.    log(e);    throw e;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号