Servlet无法连接到数据库

时间:2013-12-16 02:39:01

标签: java jsp servlets

所以我有一个书店网站。相关代码如下:

index.jsp(我有几个div的块,其中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(我有几个if语句块,每本书一个)

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。我不明白我做错了什么。

编辑: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>

3 个答案:

答案 0 :(得分:1)

尝试将processRequest更改为service

Servlet有3种状态:

  1. 通过调用init()方法初始化servlet。这只召唤一次。
  2. 然后,servlet调用service()方法来处理客户端的请求。
  3. 通过调用destroy()方法终止servlet。
  4. 如果您共享的代码是完整的。那你就错过了service()方法。您可以使用doPost()doGet()来检查客户请求。

    我使用了Oracle数据库,并使用它来获取连接对象:

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

    检查你的网址。

答案 1 :(得分: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
}

答案 2 :(得分:-1)

如果您使用service / doPost或doGet方法在servlet中调用processRequest方法,那么它很好&amp;好。但如果你没有,只需创造它&amp;调用服务processRequest方法获取数据库连接