2016-02-24 55 views
0

大家好,希望你們有一個美好的一天,因爲我不是xD,我是新來的網絡編程,我已經開始使用JSP和Servelts來做網絡操作,我的問題是當我點擊「刪除」它會觸發servlet,但沒有發生該行不會被刪除,並且值(pw.print(name))不顯示。這些是我的代碼。使用jsp和servlet刪除表格行

DeleteServlet.java

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
public class deleteuser extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    PrintWriter pw=response.getWriter(); 
    try { 

     Connection con=Connecter.obtenirconnexion(); 
     Statement st=con.createStatement(); 
     String name=request.getParameter("id"); 
     String Query="delete from users where name ='"+ name+"'"; 
     st.executeUpdate(Query); 
     pw.print(name); 


    } catch (SQLException ex) { 
     Logger.getLogger(deleteuser.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    request.getRequestDispatcher("users.jsp").forward(request, response); 


} 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 

} 

Users.jsp

<%@page import="java.sql.ResultSet"%> 
<%@page import="java.sql.PreparedStatement"%> 
<%@page import="login.Connecter"%> 
<%@page import="java.sql.Connection"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Users</title> 
    <style> table,td,th 
     { 
      border:1px black solid; 
     } </style> 
</head> 
<body> 
    <h1>Hello World</h1> 
    <% 
     Connection con = Connecter.obtenirconnexion(); 
     String req = "select * from users"; 
     PreparedStatement pst = con.prepareStatement(req); 
     ResultSet cur = pst.executeQuery(); 
     out.println("<table ><tr><th>Name</th> <th>Password </th><th>Rank   </th><th>Delete </th>"); 
     while (cur.next()) { 
      out.println("<tr><td>" + cur.getString(1) + "</td><td>" + cur.getString(2) + "</td><td>" + cur.getString(3) + "</td><td> <a href=deleteuser id='"+cur.getString(1)+"'> delete </a></td></tr>"); 
     } 
     out.println("</table>"); 
     out.close(); 
    %>  
</body> 

+0

您的日誌文件中的任何錯誤? – Jens

+0

不存在什麼:/ –

+0

也許你點擊「刪除」調用post方法?不確定,但如果沒有錯誤出現,這可能是一個問題。 – Thodgnir

回答

1

嘛,鏈接DeleteServlet被打破了。爲了傳遞一個請求參數,它應該是:

<a href=deleteuser?id='"+cur.getString(1)+"'> delete </a> 

(注意?

但是你做的什麼是壞的。

  • 您在JSP中有直接的數據庫訪問。最佳實踐建議在servlet中進行數據訪問,以填充請求屬性並轉發到JSP以顯示所有內容(甚至可以使用可能經過單元測試的圖層:Servlet <→服務<→持久性)
  • 您確實在轉發到JSP之前,servlet內部有一個response.getWriter().print(...)。你打印的東西不在正文部分(甚至在頭部之前!):在這裏,你應該把它放在一個請求屬性中,並使用它在JSP
  • 中使用GET請求來更改數據庫值。 GET請求只能用於只讀操作。刪除應該使用POST請求 - 這最後一部分主要是純粹主義者,如果它是唯一的問題,我甚至不會提到它...
+0

的「?」是不是我以前試過的問題,它給出了相同的結果,不刪除任何東西,考慮到,getwriter我刪除它,因爲我不需要它無論如何,我只是試圖看看我的請求中是否有問題數據庫:) –