我正在將一個專案從 Websphere 服務器遷移到 OpenLiberty-21.0.0.1 以及其他技術堆疊。在運行應用程式時,在其中一個 JSP 頁面中,它給了我運行時錯誤,如下所示:
Only a type can be imported. com.ibm.ws.webcontainer.webapp.WebAppErrorReport resolves to a package
.jsp 頁面中存在此類的匯入,如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@page import="com.ibm.ws.webcontainer.webapp.WebAppErrorReport"%>
<html>
<head>
我懷疑這個錯誤是因為我的服務器中不存在所需的 jar,所以我嘗試搜索一個名稱類似于我com.ibm.ws.webcontainer.webapp的/libOpenliberty 安裝目錄的 jar,但我找不到。我嘗試搜索是否有任何 maven 依賴項可用于相同,但我無法找到 .
任何幫助都將不勝感激。
或以下代碼的任何解決方法也可以:
WebAppErrorReport errorReport = (WebAppErrorReport)request.getAttribute("ErrorReport");
Throwable cause = errorReport.getCause();
uj5u.com熱心網友回復:
該com.ibm.ws.*包包含不供應用程式使用的應用程式服務器內部 API。這些類在傳統 WebSphere 中可見,但在 Liberty 中不可見。
在使用此類的地方添加您的 jsp 片段,以便建議解決方法。
您還可以在此處檢查 WebAppErrorReport 的來源https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.webcontainer/src/com/ibm/ws/webcontainer/webapp/WebAppErrorReport .java自己撰寫解決方法。
此類通常用于錯誤處理/格式化,因此替換它應該不是很困難(取決于它在您的應用程式中的使用方式)。
更新:
簡單、干凈的 Java EE 方法是:
- 將您的 jsp 定義為錯誤頁面
web.xml:
<error-page>
<location>/error.jsp</location>
</error-page>
isErrorPage="true"通過在頂部添加將您的頁面定義為“錯誤頁面” 。這會將隱式exception物件添加到頁面。
<%@ page language="java" isErrorPage="true"%>
- 使用
exception物件。所以而不是:
WebAppErrorReport errorReport = (WebAppErrorReport)request.getAttribute("ErrorReport");
Throwable cause = errorReport.getCause();
你只需使用exception例如:
out.println("Exception: " exception.getMessage());
這exception是cause您代碼中的物件。
如果您想了解有關錯誤頁面中可用屬性的更多詳細資訊,請檢查以下內容:How to get the message in a custom error page
如果你真的必須使用WebAppErrorReport,我強烈反對,你可以使用丑陋的反射技巧:
Object myReport = request.getAttribute("ErrorReport");
Class myClass = myReport.getClass();
Method myMethod = myClass.getMethod("getCause", (Class[])null);
Throwable cause = (Throwable)myMethod.invoke(myReport, (Object[])null);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/449194.html
