2012-01-06 8 views
1

<%にコードを書き込むとjavax.namingを使用できますが、<%!にコードを書き込むと、javax.namingが存在しないというエラーが表示されます。JSP javaコードでは、<%!で使用すると "javax.naming"は存在しません。

いくつかの例:

<% Javax.naming.InitialContext ic = new Javax.naming.InitialContext(); %> fine 
<%! void foo() { Javax.naming.InitialContext ic2 = new Javax.naming.InitialContext(); } %> error 

正確なエラー:

rptCountsRecon_jsp.java:22: package Javax.naming does not exist 
    Javax.naming.Context init = new Javax.naming.InitialContext(); 

私は、Javaにsortof新しいですし、JSPに非常に新しいです。

EDIT:2番目の例にfooメソッドを追加しました。これは、私の問題を理解する助けになる可能性があるためです。 Tomcatからの正確なエラーも追加されました。 EDIT 2:接頭辞をContextに追加しようとしましたが、同様のエラーが発生しました。

EDIT 3:すべてのこのタイプのコードの

try 
    { 
     javax.naming.Context init = new javax.naming.InitialContext(); 
     Context ctx = (Context) init.lookup("java:comp/env"); 
     String jndiName = getServletContext().getInitParameter("jndiName"); 
     DataSource ds = (DataSource) ctx.lookup(jndiName); 
     Connection dbConn = ds.getConnection(); 
     PreparedStatement pstmnt = dbConn.prepareStatement(sql); 
     for(int i=0; i!=binds.size(); ++i) 
      pstmnt.setString(i+1, binds.elementAt(i)); //binds index starts at 1 -_- 

     return pstmnt.executeQuery(); 
    } catch (Exception e) { 
     //out.println("A naming exception occured... I don't know how to get the info of it."); 
     return null; 
    } 

rptCountsRecon_jsp.java:28: unreported exception java.sql.SQLException; must be caught or declared to be thrown 
     Connection dbConn = ds.getConnection(); 
+3

例外メッセージを投稿してください。 –

+0

私は、正確な問題は、一連の修正によって解決されましたが、現在は新しい例外が発生しています。 –

+0

新たな問題は新しい質問になるはずです。あなたの最初の問題は解決されました(パッケージルートとして 'javax'の代わりに' Javax'を使って編集中に自分自身を悪化させたとしても)。 – BalusC

答えて

4

まずサーブレットではなくJSPでなければなりません:横の質問...現在のコードは次のようなエラーが与えます。

宣言<%!):

<%! 
    javax.naming.InitialContext ic2 = new javax.naming.InitialContext(); 
%> 

ic2は、メンバ変数です。そして、コンストラクタがjavax.naming.NamingExceptionをスローするので、ic2 = new javax.naming.InitialContext();を実行できない理由があります。

public class JspServlet { 
    //there is no way to handle that exception here 
    javax.naming.InitialContext ic2 = new javax.naming.InitialContext(); 
    //... 

スクリプトレット<%):次のように

何かを想像スクリプトレットのすべてが行くので

<% 
    javax.naming.InitialContext ic = new javax.naming.InitialContext(); 
%> 

そして、それが(スクリプトレット内)が行うことができるという理由があります生成されたJSPサービスメソッドのブロックtry内にあります。次のように

何かを想像してみて:

public class JspServlet { 

    public void _jspService(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, java.io.IOException {    
     try { 
      javax.naming.InitialContext ic = new javax.naming.InitialContext(); 
     } catch (Exception e) { 
      //... 
     } 

私はあなたがJSPのライフサイクルに関する詳細を読めば、それはより多くの意味をなさないと思います。

+0

@BalusC:今はもっと意味があります。どうもありがとう。 –

+0

ああ、それは少し明るいですが、私は私の問題に関してより具体的にする必要があると思います。私はそれに応じて私の質問を編集します。 –

+0

あなたは私の問題の一つを解決しました;)。もし私ができるなら、私はそれらを両方とも正しいものにマーキングするつもりです。私は現在、リックからの追加の助けを待っています。誰かがそれを喜んで提供しています。 –

2

私はBheshが投稿したものに同意します。しかし、次のことができます。

<%! 
    public void jspInit(){ 
    try{ 
     javax.naming.InitialContext ic2 = new javax.naming.InitialContext(); 
    } catch (javax.naming.NamingException ne){ 
              // do something when exception occurs 
              } 
    } 
%> 

JSPコンテナは、ページをロードするときにjspInitメソッドを呼び出します。

+0

私は例外を取得していません。私は "名前は存在しない"というエラーが出ています。 –

+0

スペルミスがあります。 Javaは大文字と小文字を区別 – rickz

+0

ハハ、あなたは正しいです、そして、私は命名例外を取得し、元の解決策はおそらく= Pを解決します。 –

関連する問題