2010-12-08 9 views
0

私はレストランのオンライン予約アプリケーションを作成しようとしています。 htmlファイルはサーブレットを呼び出します。このサーブレットは、MSSQLデータベースを使用して予約を追跡します。問題は、サーブレットがデータベースに接続しようとすると例外をスローすることです(getMessage()メソッドはこれを返します: "com.microsoft.jdbc.sqlserver.SQLServerDriver")。 jdbcドライバにmsbase.jar、mssqlserver.jar、msutil.jarを追加しました。私はMSSQLを使用するたびにこの方法を行いました。それはいつも働いていました MSSQLに接続するためにサーブレットを取得するために何か必要なことはありますか?サーブレットのcu mssqlデータベースに接続できません

public class AddReservation extends HttpServlet{ 
    public void doGet(HttpServletRequest cerere, HttpServletResponse raspuns) 
       throws ServletException, IOException{ 
    PrintWriter out = raspuns.getWriter(); 
    String nume,zi,luna,an,data,ora,minute; 
    //get parameters from html 
    raspuns.setContentType("text/html"); 
    out.println("<HTML><HEAD></HEAD><BODY>"); 
    if(nume.equals("")||zi.equals("")||luna.equals("")||an.equals("")||ora.equals("")||minute.equals("")){ 
     out.println("<H3>NU S-AU COMPLETAT TOATE CAMPURILE</H3>"); 
    } 
    else{ 
     try{ 
     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
     Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://LAPTOP-TITI;DatabaseName=Restaurant_Servlet","sa","pass313307"); 
     Statement st = con.createStatement(); 
     data = zi+"/"+luna+"/"+an; 
     ora = ora +":"+minute; 
     ResultSet rs; 
     rs = st.executeQuery("select count(*) from Rezervari where Data ='"+data+"' and Ora ='"+ora+"'"); 
     rs.next(); 
     int n = rs.getInt(1); 
     if(n==2){ 
      out.println("<H3>NU EXISTA LOCURI LIBERE</H3>"); 
     } 
     else{//add to db 
      st.executeUpdate("insert into Rezervari(Nume, Data, Ora) values ('"+nume+"','"+data+"','"+ora+"')"); 
      out.println("<H3>REZERVARE ADAUGATA</H3>"); 
     } 
      rs.close(); 
      st.close(); 
      con.close(); 
     } 
     catch(Exception e){ 
      out.println("<H3>NU S-A REALIZAT CONEXIUNE LA BAZA DE DATE<br><br>"+ 
         e.getMessage()+"</H3>"); 

     } 
    } 
    out.println("</BODY></HTML>"); 
    out.close(); 
    } 
    public void doPost(HttpServletRequest cerere, HttpServletResponse raspuns) 
       throws ServletException, IOException{ 
     doGet(cerere,raspuns); 
    } 
} 

P.S.:ここ

はservlet`sコードです私はWindows XP上でApache Tomcatサーバーを使用しています

答えて

0

のgetMessage()メソッドは、この返し: "com.microsoft.jdbc.sqlserver.SQLServerDriver" すべての

まず、だけ印刷されません。例外メッセージ。例外全体とトレースをサーバーログにも出力します。これにより、より貴重な情報が得られます。

e.printStackTrace(); 

のみ完全修飾クラス名が含まれている例外メッセージはClassNotFoundExceptionしかしながら典型的です。これは、JDBCドライバがクラスパスにないことを意味します。 webappの/WEB-INF/libフォルダにJARファイルを置く必要があります。このフォルダは、Webアプリケーションのランタイムクラスパスの一部です。


サーブレットはHTMLを出力する適切な場所ではありません。そこにJSPがあります。実際には、DB接続コードをまっすぐに書くのは適切な場所ではありませんが、それは別の話です。

+0

まずはご返信ありがとうございます。私はlibにJARを入れて、今は正常に動作します!次に、大学でサーブレットを学び始めたので、JSPではなくサーブレットだけでサーブレットを行う必要があったのです。私はJSPでこれを行うより良い方法があると確信していますが、これは私が割り当てられたものです:)しかし、私たちもそれに気をつけます。再度、感謝します! e.printStackTrace()を出力する方法を教えてください。私は単純なJavaでそれを行う方法を知っていますが、出力を自分のHTMLに送信したいのですか?私は試しましたが、voidを返すメソッドをprintWriter経由でhtmlに送ることはできません。 – Liviu

+0

代わりに 'e.printStackTrace(out);'を使用してください。しかし、これは正しいアプローチではありません。あなたは**例外を投げるべきです**。 '新しいServletExceptionをスローする(例外が発生した、e);'まだそのHTML *をポイントの前にすべて書き込んでいないことを確認してください。そのHTMLはすべてJSPに属しています。サーブレットのタグ情報ページは便利です:http://stackoverflow.com/tags/servlets/info – BalusC

関連する問題