簡體   English   中英

在javascript中處理servlet自定義異常並在jsp中顯示錯誤頁面

[英]handle servlet custom exception in javascript and showing error page in jsp

我從我的 servlet 拋出異常,並且在eclipse控制台中,只要發生異常,它就會打印異常日志。 但是我試圖在沒有得到的 JSP 頁面中顯示該異常。

請在下面找到我的代碼。

傳遞請求的代碼:

function sendRequest( functionCallback, servletLocation, queryString)
{
    var asyncRequest = newXMLRequest();

    // Set the handler function to receive callback notifications from the request object
    var handleResponse = getReadyStateHandler(asyncRequest, functionCallback);
    asyncRequest.onreadystatechange = handleResponse;
    
    // Send a POST to servlet for information.  Third parameter specifies request is asynchronous.
    asyncRequest.open("POST", servletLocation, true);

    asyncRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    asyncRequest.send(queryString);
    
    if ( document.getElementById("filterMessage") != null )
    {
        document.getElementById("filterMessage").innerHTML = "<span class = 'red'>Filtering...Please Wait</span>";  
    }
}

處理響應的代碼:

function getReadyStateHandler(req, responseXmlHandler) 
{

    // Return an anonymous function that listens to the 
    // XMLHttpRequest instance
    return function () 
    {
        // If the request's status is "complete"
        if (req.readyState == 4)
        {           
            // Check that a successful server response was received
            if (req.status == 200) 
            {
                // Pass the XML payload of the response to the 
                // handler function
                responseXmlHandler(req.responseXML);
            }
            else 
            {
                // An HTTP problem has occurred
                alert("HTTP error: " + req.status);
            }
        }
    }
}



function reloadPage() {
    window.location.reload(true);
}

從下面的代碼調用 servlet 調用。

function updateProgramVersion(e) {
    var washoutIdStr = (e.target || e.srcElement ).parentNode.parentNode.parentNode.children.sparWashoutId.children.washoutItem.value;
    var programVersionStr = (e.target || e.srcElement ).parentNode.parentNode.parentNode.children.programVersionModify.children.programVersion.value;
    var sparNumber = (e.target || e.srcElement ).parentNode.parentNode.parentNode.children.sparNumber.children.sparNumber.value
    
    if( (e.target || e.srcElement ).id == 'programVersionUpdatebtn') {
        query = 'actionId=updateProgramVersion&washoutIdStr='+washoutIdStr+"&programVersion="+ programVersionStr+"&sparNumber="+sparNumber;
        servlet = "<%=UrlBuilder.getServletRoot() + ApplicationConstants.SERVLET_REPORT_SPAR%>"; method="POST";
        sendRequest(reloadPage, servlet, query);   // servlet call
        (e.target || e.srcElement ).parentNode.parentNode.parentNode.children.programVersion.style.display = 'none';
        (e.target || e.srcElement ).parentNode.parentNode.parentNode.children.programVersionTD.style.display = 'block';
    }
    
}

請找到我下面的servlet代碼:

    else if(actionId.equals("updateProgramVersion")) {
        updateProgramVersion(washoutId, sparNumber,  programVersion);
        //nextPage = mappings.findForward("display");
    }

private void updateProgramVersion(String washoutId, String sparNumber,  String programVersion) throws ApplicationException{
    
    boolean isExist = sparwashoutService.getProgramVersion(washoutId, sparNumber, programVersion);
    
    if(isExist) {
        sparwashoutService.updateProgramVersion(washoutId, sparNumber, programVersion);
    } else {
        throw new InvalidInputException("Version number is not valid","Version number is not valid",this.getClass().toString().substring( getClass().toString().lastIndexOf(".") + 1 ) + ".performTask()");
    }
    
}

您需要發送,你需要在JSP中通過servlet的顯示使用背自定義消息response.getWriter().write()..你也可以設置status ,這樣就不會進入里面if (req.status == 200) {.. 這是根據您的要求使用try-catch塊修改以下代碼的示例。

服務程序代碼

  try
  {
    //check some condition
    response.setContentType ("text/xml");
    response.setCharacterEncoding ("UTF-8");
    response.setStatus(200);    //set status
    response.getWriter().write(yourxmldata);    //send message
  }
  //handling the exception  
  catch (Exception e)
  {
    response.setContentType ("text/plain");//set contenttype to text
    response.setCharacterEncoding ("UTF-8");
    response.setStatus(406);    //set status
    response.getWriter().write (e.getMessage () + "I AM IN EXECPETION");    //get your execption message

  }

Ajax 中只需檢查狀態代碼:

if (req.status == 200)  {
        responseXmlHandler(req.responseXML);//xml return
 } else if(req.status == 406){
       alert(req.responseText);//text return
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM