1 / 22

8 . Обработка на грешки в J2EE

8 . Обработка на грешки в J2EE. Лекционен курс “ Езици и среди за програмиране в Интернет ”. доц. д-р Станимир Стоянов катедра “ Компютърни системи ”. Съдържание. 8.1. Въведение 8.2. Изключения 8.3. Обработка на изключения в сървлети. 8 .1 . Въведение. При сървърното програмиране

Download Presentation

8 . Обработка на грешки в J2EE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8. Обработка на грешки в J2EE Лекционен курс “Езици и среди за програмиране в Интернет” доц. д-р Станимир Стоянов катедра “Компютърни системи”

  2. Съдържание 8.1. Въведение 8.2. Изключения 8.3. Обработка на изключения в сървлети

  3. 8.1. Въведение • При сървърното програмиране • Особено важно да се осигурят приложенията • Ефективна обработка на всички възникнали изключения • Съвременните Web базирани приложения работят: • 24 часа • 7 дена в седмицата • Това налага бързо идентифициране и локализиране на възникналите грешки и тяхното отстраняване

  4. 8.2. Изключения Основни типове грешки: • Compile-time: • грешки в структурата на програмата • откриваеми от компилатора • често се наричат синтактически грешки • Run-time • неоткриваеми за компилатора • наричат се още логически (семантични) грешки • откриват се посредством тестове

  5. Изключения (execptions) – механизъм посредством който Java може да обработва грешки, които възникват по време на изпълнението на програмите • За да разберем механизма на изключенията трябва да разбираме концепцията на call stack: • В един определен момент от изпълнението на една програма call stack съдържа последователността на активираните методи • При нормално завършване обработката на един метод – той се премахва от стека, а обработката на програмата продължава в извикващия метод • Ако се активира нов метод – той се записва на въха на стека и изпълнението на програмата продължава в този метод

  6. Ако в един момент някой метод открие ситуация, която той не може да реши – тогава е необходимо да се спре изпълнението и да се предизвика изключение • Изключението се предава на следващия метод в стека, където то може да бъде: • обработено от този метод или • предадено нататък в стека • За предпочитане – веднага обработка на изключенията.

  7. Method A Method B Method C Method call Method call Method execution fails Exception handled Exception thrown Execution continues Method return

  8. Method A Method B Method C Method call Method call Method execution fails Exception not handled Exception thrown Exception handled Exception thrown Execution continues

  9. Обработка на изключения в програмния код: • Използване на exception-causing код в try catch блокове, като: • кодът, който може да предизвика изключения се записва в try-блока • кодът, който ще обработва изключенията се задава в catch- блока

  10. try { … // код, който може да предизвика някакъв вид грешка // включително NumberFormatException … } catch (NumberFormatException e) { // код за обработване на NumberFormatException } catch (Exception e) { // код за обработване на някакъв тип грешки }

  11. 8.3. Обработка на грешки в сървлети Обработката на грешки в сървлети ще демонстрираме с примера “Loan Calculator”, където: • задаваме три параметъра: • главница • лихва • месечна вноска • искаме да разберем броя на месеците за изплащане на кредита

  12. EE557: Server-Side Development Loan Calculator (page 1) • <html> • <head> • <title>Loan Calculator Example</title> • </head> • <body> • <CENTER><H1>Please enter the following information:</H1></CENTER> • <HR> • <FORM METHOD=“POST" ACTION="http://localhost/servlets/LoanCalculator"> • <TABLE CELLSPACING=“2” CELLPADDING=“2” BORDER=“0”> • <TR> • <TD ALIGN=“right”><B>Principal: </B></TD> • <TD ALIGN=“left”><INPUT TYPE=“text” NAME=“principal” SIZE=“10”></INPUT></TD> • </TR> • <TR> • <TD ALIGN=“right”><B>Interest: </B></TD> • <TD ALIGN=“left”><INPUT TYPE=“text” NAME=“interest” SIZE=“10”></INPUT></TD> • </TR>

  13. EE557: Server-Side Development Loan Calculator (page 2) • <TR> • <TD ALIGN=“right”><B>Monthly Payment: </B></TD> • <TD ALIGN=“left”><INPUT TYPE=“text” NAME=“payment” SIZE=“10”></INPUT></TD> • </TR> • <TR> • <TD COLSPAN=“2” ALIGN=“center”><INPUT TYPE=“submit“ • NAME=“cmdSubmit” VALUE=“Calculate> </TD> • </TR> • </TABLE> • </FORM> • </CENTER> • </body> • </html>

  14. Please enter the following information Principal: Interest: Monthly payment: Calculate

  15. EE557: Server-Side Development LoanTools (page1) public static float stringToFloat(String inputString) throws NumberFormatException { Float f = new Float(inputString); return f.floatValue() ; }

  16. EE557: Server-Side Development LoanTools (page2) public static int CalculateLoanPeriod( float principal, float interest, float payment) throws IllegalArgumetException { int months = 0; float balance = principal; while (balance > 0) { balance += ((balance * interest) / 12); balance -= payment; months += 1; if (balance > principal) { throw new IllegalargumentException(“The values entered will not “ + “evet allow the loan to be paid off”); } return months; }

  17. EE557: Server-Side Development handleError.java private void handleError(Exception e, HttpServletResponse res) { res.setContentType("text/html"); PrintWriter out = res.getWriter(); HTML h = new HTML(“Loan Calculator: Error”); h.add(HTML.HEADING, “An error has occurred …”, false); h.add(HTML.LINE, “ ”, false); h.add(HTML.NORMAL, e.getMessage(), false); out.println(h.getPage()); out.close(); }

  18. Кодът може да предизвика изклэчения EE557: Server-Side Development Loan Calculator.java (page1) public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // retrieve parameter values as strings String pricipalAsString = req.getparameter(“principal”); String pricipalAsString = req.getparameter(“interest”); String pricipalAsString = req.getparameter(“payment”); // variables to hold floating point values float principal, interest, payment; // variable to hold the loan repayment period int months; try { pricipal = LoanTools.stringToFloat(pricipalAsString); interest = LoanTools.stringToFloat(interestAsString); payment = LoanTools.stringToFloat(paymentAsString); months = LoanTools.calculateloanPeriod(principal, interest, payment); }

  19. Обработка на изключения EE557: Server-Side Development LoanCalculator.java (page2) catch (NumberFormatException e) { handleError(new NumberFormatException (“Check thatthe values entered are numeric”), res); return; } catch (Exception e) { handleError( e, res); return; }

  20. EE557: Server-Side Development LoanCalculator.java (page 3) res.setContentType("text/html"); PrintWriter out = res.getWriter(); HTML h = new HTML(“Loan Calculator Results”); h.add(HTML.HEADING, “Loan calculator results”, false); h.add(HTML.LINE, “ ”, false); h.add(HTML.NORMAL, “Principal Amount: , false); h.add(HTML.NORMAL, Float.toString(principal) , true); h.add(HTML.NORMAL, “Interest : , false); h.add(HTML.NORMAL, Float.toString(interest) , true); h.add(HTML.NORMAL, “Payment : , false); h.add(HTML.NORMAL, Float.toString(payment) , true); h.add(HTML.NORMAL, “Months until Payoff: , false); h.add(HTML.NORMAL, Integer.toString(months) , true); out.println(h.getPage()); out.close(); }

  21. Loan Calculator results Principal amount: 2000.00 Interest: 0.09 Payment: 50.00 Months until payoff: 45

  22. Error: 400 Check that the values entered are numeric

More Related