2010-12-08 7 views
0

저는 레스토랑에 대한 온라인 예약 응용 프로그램을 만들려고합니다. html 파일은 서블릿을 호출합니다. 이 서블릿은 MSSQL 데이터베이스를 사용하여 예약을 추적합니다. 문제는 서블릿이 데이터베이스에 연결하려고 할 때 예외를 throw한다는 것입니다 (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); 
    } 
} 

추신 : 여기

는 servlet`s 코드 나는 Windows XP에서 아파치 톰캣 서버를 사용하고

답변

0

의 getMessage() 메소드는이 반환 : "com.microsoft.jdbc.sqlserver.SQLServerDriver"모든

먼저 만이 인쇄되지 않습니다 예외 메시지. 전체 예외 및 추적을 서버 로그에도 인쇄하십시오. 이것은 더 가치있는 정보를 제공합니다. 단지 전체 지정된 클래스를 포함

e.printStackTrace(); 

예외 메시지는 ClassNotFoundException위한 그러나 일반적입니다. 이것은 JDBC 드라이버가 클래스 경로에 없다는 것을 의미합니다. webapp의 /WEB-INF/lib 폴더에 JAR 파일을 넣어야합니다. 이 폴더는 webapp의 런타임 클래스 경로의 일부입니다.


서블릿은 HTML을 출력하기에 적합한 장소가 아닙니다. 거기 JSP가 있습니다. 실제로 DB 연결 코드를 직접 작성하는 것이 적절하지는 않지만, 전체 내용은 다음과 같습니다.

+0

먼저 답장을 보내 주셔서 감사합니다. lib에 JAR 파일을 넣었으니 이제는 잘 작동합니다! 두 번째로, 우리는 방금 대학에서 서블릿을 배우기 시작했기 때문에 JSP가 아닌 서블릿 만 사용해야했습니다. JSP로이 작업을 수행하는 더 좋은 방법이있을 것이라고 확신하지만,이 작업을 수행하도록 지정되었습니다. :) 그러나 우리는 그것에 대해서도 이해할 것입니다. 다시 한 번 감사드립니다! e.printStackTrace()를 출력하는 방법을 알려주시겠습니까? 간단한 자바에서하는 방법을 알고 있지만 출력을 HTML로 보내고 싶다면? 나는 시도했다.하지만 void를 리턴하는 메소드는 printWriter를 통해 html로 보내질 수 없다고 말하면서, – Liviu

+0

대신'e.printStackTrace (out);'를 사용하자. 그러나 이것은 올바른 접근법이 아닙니다. ** 예외를 던져야합니다. '새로운 ServletException을 던지십시오 ("예외가 발생했습니다", e);'당신이 이미 그 HTML *을 그 시점 이전에 모두 작성하지 않았는지 확인하십시오. JSP에서 HTML이 모두 포함됩니다. 서블릿 태그 정보 페이지가 유용하다는 것을 알 수 있습니다 : http://stackoverflow.com/tags/servlets/info – BalusC

관련 문제