2013-12-16 2 views
0

Итак, у меня есть сайт книжного магазина. Соответствующий код выглядит следующим образом:Сервлет не подключается к базе данных

index.jsp (у меня есть несколько блоков див, где Foo это ключевое слово для книги)

<form action="bookServlet" method="post"> 

      <div id='foo' style="float: left; width:25%"> 
       <img src ="${pageContext.request.contextPath}/images/foo.jpg" width ='200' height ='310' id ="foo" /> <br /> 
       Title of a Book <br /> 
       $7.99 <br /> 
       <input type= 'text' name= 'foo' size = 1 /> 
       <input type ='submit' name ='fooBtn' value ='Buy' onclick = 'this.disabled = true; return true;'/> <br /> <br /> 
      </div> 

bookServlet.java (у меня есть несколько блоки, если заявление, опять-таки один для каждой книги)

public class bookServlet extends HttpServlet { 

    public Statement statement; 
    static boolean flag[] = {false, false, false, false, false, false, false, 
     false, false, false, false, false, false, false, false, false}; 


    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException, ClassNotFoundException, SQLException { 

     try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      Connection connection = DriverManager.getConnection 
       ("url exactly as my professor gave me", "username", "password"); 
      System.out.print("Connected"); 
      statement = connection.createStatement(); 
     } 
     catch (Exception e){ 
      System.out.print("Could not connect"); 
     } 
     if (request.getParameter("fooBtn") != null) { 
     flag[0] = true; 
     String queryString = "select stock from Inventory where title = 'foo'"; 
     ResultSet result = statement.executeQuery(queryString); 
     int quantity = Integer.parseInt(request.getParameter("foo")); 
     int stock = result.getInt(1); 
     stock -= quantity; 
     String insertString = "insert into Cart(title, items, price) values('foo', 1, 7.99)"; 
     statement.executeUpdate(insertString); 
     String updateString = "update Inventory set stock = " + stock + " where title = 'foo'"; 
     statement.executeUpdate(updateString); 
     } 
    } 
} 

когда я исполняю index.jsp, он правильно отображает, но когда я пытаюсь купить одну из книг, он не подключается к базе данных, гораздо меньше, обновите его или установите флаг в true. Я не понимаю, что я сделал неправильно.

Edit: web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
     <servlet-name>bookServlet</servlet-name> 
     <servlet-class>books.bookServlet</servlet-class> 
    </servlet> 
    <servlet> 
     <servlet-name>checkoutServlet</servlet-name> 
     <servlet-class>books.checkoutServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>bookServlet</servlet-name> 
     <url-pattern>/bookServlet</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>checkoutServlet</servlet-name> 
     <url-pattern>/checkoutServlet</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
</web-app> 
+5

Добавить 'e.printStackTrace()' к вашему блоку 'catch'. Никогда не игнорируйте исключение. –

+0

Вы получаете выход «Не удалось подключиться»? –

+0

У меня нет выхода. Он даже не пытается подключиться. – user2302019

ответ

1

Попробуйте изменить processRequest к service.

Servlet имеет 3 состояния:

  1. сервлет инициализируется вызовом метода init(). Это называется только один раз.
  2. Затем сервлет вызывает метод service() для обработки запроса клиента.
  3. Сервлет завершается путем вызова метода destroy().

Если код, которым вы поделились, является полным. Тогда вам не нужен метод service(). Вы можете обрабатывать запрос клиента, используя doPost() и doGet() проверить их.

Я использовал базу данных Oracle и я получаю объект подключения с помощью этого:

Connection conn = DriverManager.getConnection 
    ("jdbc:oracle:thin:@myhost:1521:orcl", "scott", "tiger"); 

Проверьте свой адрес.

+2

'service()' наследуется от 'HttpServlet'. –

+0

@SotiriosDelimanolis: Спасибо .. Я пропустил упоминание об этом .. :) – NewUser

+0

Когда я меняю его, он говорит мне, что он не может переопределить Service() в HTTPServlet. – user2302019

-1

если вы использовали сервис/doPost или doGet метод для вызова processRequest метод в сервлете, это хорошо & хорошо. Но если вы не имеете, только это & создающих службы вызова метода ProcessRequest, чтобы получить DB Connection

0

Вы можете написать свой код в любой из этих функций три переназначения

@Override 
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) 
     throws ServletException, IOException { 
    //your processRequest code 
} 

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    //your processRequest code 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    //your processRequest code 
} 
Смежные вопросы