2015-01-08 6 views
-1

У меня есть сервлет, который должен удалить запись из моей базы данных. Я получаю выбранную строку с страницы jsp с кнопкой удаления, и я использую javascript. Проблема заключается в том, что tomcat показывает HTTP Status 405 - HTTP-метод GET не поддерживается этим URL-адресом, на странице: http://localhost:8084/DeleteRecord?i=35 (35 - выбранная строка для удаления).Servlet Не удается удалить запись из базы данных

Вот мой сервлет:

package package_ergasia; 

import java.sql.*; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.ArrayList; 

public class DeleteRecord extends HttpServlet 
{ 
    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
    response.setContentType("text/html");  
    Connection connection= null;  
    String url = "jdbc:mysql://localhost:3306/"; 
    String dbName = "ergasia";  
    String user = "root"; 
    String password = "password"; 
    PreparedStatement deleteProtein = null; 
    ResultSet resultSet = null; 
    ArrayList al = null; 
    PrintWriter out = response.getWriter(); 
    int i; 

     try { 
      connection = DriverManager.getConnection(url + dbName, user, password); 
      i = Integer.parseInt(request.getParameter("i"));   
      deleteProtein = connection.prepareStatement("DELETE FROM protein WHERE i = '"+i+"'");    
      resultSet = deleteProtein.executeQuery(); 

      RequestDispatcher view = request.getRequestDispatcher("http://localhost:8084/secured/all_proteins.jsp"); 
      view.forward(request, response);   

     } 
     catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println("Error!"); 
     } 

    } 

    @Override 
    public String getServletInfo() { 
     return "info"; 
    } 
} 

и all_proteins.jsp, где пользователь выбирает запись для удаления:

<%@ page language="java" import="java.sql.*,java.util.* "%> 


<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <link rel="stylesheet" type="text/css" href="../CSS/mystyle.css"> 
     <title>Database management</title>  
    </head> 
    <body class="menu"> 
      <h1>Welcome to KSPO Database, the Database of Porins with known 3D Structure</h1>   
      <script type="text/javascript"> 
       function deleteRecord(i){ 
        url = "DeleteRecord"; 
        window.location.href = "http://localhost:8084/"+url+"?i="+i; 
       } 
       function editRecord(i){ 
        url = "EditRecord"; 
        window.location.href = "http://localhost:8084/"+url+"?i="+i; 
       } 
      </script> 

     <table border="1">    
<% 


       int count = 0;  
       int i=-1; 
       if (request.getAttribute("protein_data") != null) { 
        ArrayList al1 = (ArrayList) request.getAttribute("protein_data"); 
        request.getAttribute("protein_data"); 


        Iterator itr = al1.iterator(); 

        while (itr.hasNext()) { 
         count++; 
         i++; 
         ArrayList pList = (ArrayList) itr.next(); 
%>     


    <tr> 
       <td><%=pList.get(0)%></td> 
       <td><%=pList.get(1)%></td> 
       <td><%=pList.get(2)%></td> 
       <td><%=pList.get(3)%></td> 
       <td><input type="submit" value="Edit" name="edit" onclick="editRecord(<%=pList.get(4)%>);"></td> 
       <td><input type="submit" value="Delete" name="delete" onclick="deleteRecord(<%=pList.get(4)%>);"></td> 
    </tr> 
<% 
        } 
       } 
%> 
</table> 
</body>   
</html> 

Есть идеи?

+0

http://www.unixwiz.net/techtips/sql-injection.html – BalusC

ответ

0

Fixed это сервлет необходимо этот код:

statement = connection.createStatement(); 
deleteProtein = "DELETE FROM protein WHERE i = '"+i+"'";    
int j = statement.executeUpdate(deleteProtein); 
+0

Вы можете принять свой собственный ответ, нажав на зеленый галочку .... –

0

Как я вижу, вы вызова сервлета с запросом GET (window.location.href = "http://localhost:8084/"+url+"?i="+i;). Поэтому, чтобы заставить его работать, вы должны реализовать метод doGet() в своем сервлете.

Смотрите эту doGet and doPost in Servlets, как doGet и doPost используются в сервлетах

Также проверить эту https://stackoverflow.com/tags/servlets/info для получения дополнительной информации о сервлет и правильном использовании.