0

我从我的 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()");
    }
    
}
4

1 回答 1

1

您需要发回您需要通过 servlet 在 jsp 中显示的自定义消息,您 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
 }
于 2020-10-03T14:05:17.803 回答