обработка пользовательского исключения сервлета в javascript и отображение страницы ошибки в jsp

#javascript #java #jsp #servlets

#javascript #java #jsp #сервлеты

Вопрос:

Я выбрасываю исключение из своего сервлета и в 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);
}
  

вызов вызова сервлета из приведенного ниже кода.

 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=updateProgramVersionamp;washoutIdStr=' washoutIdStr "amp;programVersion="  programVersionStr "amp;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';
    }
    
}
  

Пожалуйста, найдите мой приведенный ниже код сервлета :

     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()");
    }
    
}
  

Ответ №1:

Вам нужно отправить обратно пользовательское сообщение, которое вам нужно отобразить в 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
 }
  

Комментарии:

1. Большое спасибо. я застрял в этом более чем на 3 дня.. Спасибо за ваше ценное предложение.