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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

доц. д-р Станимир Стояновкатедра “Компютърни системи”

Лекционен курс “Езици и среди за програмиране в Интернет”

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

Съдържание

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

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

8.1. Въведение

При сървърното програмиране ● Особено важно да се осигурят приложенията ● Ефективна обработка на всички възникнали изключения

Съвременните Web базирани приложения работят:● 24 часа● 7 дена в седмицата

Това налага бързо идентифициране и локализиране на възникналите грешки и тяхното отстраняване

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

8.2. Изключения Основни типове грешки:

● Compile-time: грешки в структурата на програмата откриваеми от компилатора често се наричат синтактически грешки

● Run-time неоткриваеми за компилатора наричат се още логически (семантични) грешки откриват се посредством тестове

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

Изключения (execptions) – механизъм посредством който Java може да обработва грешки, които възникват по време на изпълнението на програмите

За да разберем механизма на изключенията трябва да разбираме концепцията на call stack:

● В един определен момент от изпълнението на една програма call stack съдържа последователността на активираните методи● При нормално завършване обработката на един метод – той се премахва от стека, а обработката на програмата продължава в извикващия метод● Ако се активира нов метод – той се записва на въха на стека и изпълнението на програмата продължава в този метод

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

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

обработено от този метод или предадено нататък в стека

● За предпочитане – веднага обработка на изключенията.

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

Method AMethod A Method BMethod B Method CMethod C

Method call

Method call Method execution

failsException

thrown

Exception handled

Execution continues

Method return

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

Method AMethod A Method BMethod B Method CMethod C

Method call

Method call Method execution

failsException

thrown

Exception not handled

Execution continues

Exception handled Exception thrown

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

Обработка на изключения в програмния код:● Използване на exception-causing код в try catch блокове, като:

кодът, който може да предизвика изключения се записва в try-блока кодът, който ще обработва изключенията се задава в catch- блока

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

try{ … // код, който може да предизвика някакъв вид грешка // включително NumberFormatException …}

catch (NumberFormatException e){ // код за обработване на NumberFormatException}

catch (Exception e){ // код за обработване на някакъв тип грешки}

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

8.3. Обработка на грешки в сървлети

Обработката на грешки в сървлети ще демонстрираме с примера “Loan Calculator”, където: ● задаваме три параметъра:

главница лихва месечна вноска

● искаме да разберем броя на месеците за изплащане на кредита

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

Loan Calculator (page 1)

EE557: Server-Side Development

<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>

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

Loan Calculator (page 2)

EE557: Server-Side Development

<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>

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

Please enter the following information

Principal: Interest: Monthly payment:

Calculate

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

LoanTools (page1)

EE557: Server-Side Development

public static float stringToFloat(String inputString) throws NumberFormatException { Float f = new Float(inputString); return f.floatValue() ; }

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

LoanTools (page2)

EE557: Server-Side Development

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; }

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

handleError.java

EE557: Server-Side Development

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

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

Кодът може да предизвика изклэчения

Loan Calculator.java (page1)

EE557: Server-Side Development

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

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

Обработка на изключения

LoanCalculator.java (page2)

EE557: Server-Side Development

catch (NumberFormatException e) { handleError(new NumberFormatException (“Check that the values entered are numeric”), res); return; }

catch (Exception e) { handleError( e, res); return; }

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

LoanCalculator.java (page 3)

EE557: Server-Side Development

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

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

Loan Calculator results

Principal amount: 2000.00Interest: 0.09Payment: 50.00Months until payoff: 45

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

Error: 400

Check that the values entered are numeric