#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 дня.. Спасибо за ваше ценное предложение.