2009-08-26 131 views
4

我想從實現ServletContextLister的類中的方法拋出ServletContext異常。從ServletContextListener中拋出異常

這是我實現它失敗:

public class Initializer implements ServletContextListener { 

    private void checkEncryptedFile() throws ServletException { 

    FileReader fr; 
    try { 
     fr = new FileReader("TestFile"); 
     BufferedReader br = new BufferedReader(fr); 
     String str = br.readLine(); 
     if(!str.equals("aasditya")){ 
     throw new ServletException(); 
     } 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
    catch(ServletException se){ 
     throw new ServletException("kiasku " + se.getMessage(), se); 

    } 
    } 
} 

任何人都可以提出任何替代方法。請在此引導我。 感謝

+0

它是如何失敗的。如果您添加日誌記錄什麼是執行路徑? – Mark 2009-08-26 13:45:11

+1

更重要的是,你爲什麼要拋出這個異常,並且一旦拋出它,你會發生什麼?上下文監聽器並不意味着是一個控制點;把它改爲你的servlet初始化。 – kdgregory 2009-08-26 13:47:57

回答

2

當接口方法拋出一個異常,也應刪除catch塊不

try { 
       //.... 

    } 
    catch(IOException e){ 
      throw new ServletException("kiasku " + e.getMessage(), e); 
    } 

而不是你的異常處理應該工作。

編輯:

你已經實現的ServletContextListener正確的接口方法?他們不在你的代碼示例中。但他們必須在課堂上。

就我所見,interfae方法不會拋出任何類型的異常。當你真的想讓BREAK偵聽器通知時,你必須拋出一個RuntimeException。

EDIT2:

我也會改變

if(!str.equals("aasditya")){ 
throw new ServletException(); 
} 

if(!"aasditya".equals(str)){ 
throw new ServletException(); 
} 
+0

「您是否已經正確實現了ServletContextListener的接口方法?它們不在您的代碼示例中,但它們必須位於該類中。」 - 是的,我添加了它們。我從interface-method中調用上述方法。 – 2009-08-27 11:18:21