Upload
melyssa-jennings
View
73
Download
16
Embed Size (px)
DESCRIPTION
8 . Обработка на грешки в J2EE. Лекционен курс “ Езици и среди за програмиране в Интернет ”. доц. д-р Станимир Стоянов катедра “ Компютърни системи ”. Съдържание. 8.1. Въведение 8.2. Изключения 8.3. Обработка на изключения в сървлети. 8 .1 . Въведение. При сървърното програмиране - PowerPoint PPT Presentation
Citation preview
8. Обработка на грешки в J2EE
доц. д-р Станимир Стояновкатедра “Компютърни системи”
Лекционен курс “Езици и среди за програмиране в Интернет”
Съдържание
8.1. Въведение8.2. Изключения8.3. Обработка на изключения в сървлети
8.1. Въведение
При сървърното програмиране ● Особено важно да се осигурят приложенията ● Ефективна обработка на всички възникнали изключения
Съвременните Web базирани приложения работят:● 24 часа● 7 дена в седмицата
Това налага бързо идентифициране и локализиране на възникналите грешки и тяхното отстраняване
8.2. Изключения Основни типове грешки:
● Compile-time: грешки в структурата на програмата откриваеми от компилатора често се наричат синтактически грешки
● Run-time неоткриваеми за компилатора наричат се още логически (семантични) грешки откриват се посредством тестове
Изключения (execptions) – механизъм посредством който Java може да обработва грешки, които възникват по време на изпълнението на програмите
За да разберем механизма на изключенията трябва да разбираме концепцията на call stack:
● В един определен момент от изпълнението на една програма call stack съдържа последователността на активираните методи● При нормално завършване обработката на един метод – той се премахва от стека, а обработката на програмата продължава в извикващия метод● Ако се активира нов метод – той се записва на въха на стека и изпълнението на програмата продължава в този метод
● Ако в един момент някой метод открие ситуация, която той не може да реши – тогава е необходимо да се спре изпълнението и да се предизвика изключение● Изключението се предава на следващия метод в стека, където то може да бъде:
обработено от този метод или предадено нататък в стека
● За предпочитане – веднага обработка на изключенията.
Method AMethod A Method BMethod B Method CMethod C
Method call
Method call Method execution
failsException
thrown
Exception handled
Execution continues
Method return
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
Обработка на изключения в програмния код:● Използване на exception-causing код в try catch блокове, като:
кодът, който може да предизвика изключения се записва в try-блока кодът, който ще обработва изключенията се задава в catch- блока
try{ … // код, който може да предизвика някакъв вид грешка // включително NumberFormatException …}
catch (NumberFormatException e){ // код за обработване на NumberFormatException}
catch (Exception e){ // код за обработване на някакъв тип грешки}
8.3. Обработка на грешки в сървлети
Обработката на грешки в сървлети ще демонстрираме с примера “Loan Calculator”, където: ● задаваме три параметъра:
главница лихва месечна вноска
● искаме да разберем броя на месеците за изплащане на кредита
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>
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>
Please enter the following information
Principal: Interest: Monthly payment:
Calculate
LoanTools (page1)
EE557: Server-Side Development
public static float stringToFloat(String inputString) throws NumberFormatException { Float f = new Float(inputString); return f.floatValue() ; }
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; }
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(); }
Кодът може да предизвика изклэчения
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); }
Обработка на изключения
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; }
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(); }
Loan Calculator results
Principal amount: 2000.00Interest: 0.09Payment: 50.00Months until payoff: 45
Error: 400
Check that the values entered are numeric