所以我有一个书店网站。相关代码如下:
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>
答案 0 :(得分:1)
尝试将processRequest
更改为service
。
Servlet
有3种状态:
init()
方法初始化servlet。这只召唤一次。service()
方法来处理客户端的请求。destroy()
方法终止servlet。如果您共享的代码是完整的。那你就错过了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方法获取数据库连接