2015-01-12 111 views
0

我正在嘗試創建一個servlet,它使用類GetTicketInfo從HTML表單讀取數據,並將數據插入到類WriteToDatabase的MySQL數據庫中。 問題是,當我填寫了HTML表單,然後按按鈕,註冊票據,這應該啓動數據插入到數據庫的過程中我在我的瀏覽器中出現此錯誤「HTTP狀態405 - HTTP方法GET不受此URL的支持「。我的index.html,其中包含表單,網址爲http://localhost/IssueHandler/index.html我使用的Apache Tomcat 7.0.34服務器此方法不支持HTTP方法GET,狀態405

控制檯不打印任何錯誤,但兩個警告:

WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:CDM' did not find a matching property. 
jan 12, 2015 5:42:06 EM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:IssueHandler' did not find a matching property. 
jan 12, 2015 5:42:07 EM org.apache.catalina.core.AprLifecycleListener initializeSSL 

我猜測它與表單無法找到servlet有關,但我真的不知道。我已經嘗試將servlet映射標籤等添加到web.xml文件,但它沒有幫助。

GetTicketInfo

package com.issue.handler; 

import java.io.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 

import javax.servlet.*; 
import javax.servlet.annotation.*; 
import javax.servlet.http.*; 

@WebServlet("/issueHandler") 
public class GetTicketInfo extends HttpServlet { 


    String ticketID1, ticketOwner1, ticketTitle1, ticketHandler1, ticketCategory1, ticketDescription1, ticketDate1; 

    public void doGet(HttpServletRequest request, 
      HttpServletResponse response, String tID) { 
     tID=request.getParameter("ticketID"); 
     ticketID1=tID; 

    } 

    public String getTicketID(){ 

     return ticketID1; 

    } 


    public void setTicketOwner(HttpServletRequest request, 
      HttpServletResponse response, String tOW) { 
     tOW=request.getParameter("ticketOwner"); 
     ticketOwner1 = tOW; 

    } 

    public String getTicketOwner(){ 

     return ticketOwner1; 

    } 

    public void setTicketTitle(HttpServletRequest request, 
      HttpServletResponse response, String tTI) { 
     tTI=request.getParameter("ticketTitle"); 
     ticketTitle1 = tTI; 

    } 

    public String getTicketTitle(){ 

     return ticketTitle1; 

    } 

    public void setTicketHandler(HttpServletRequest request, 
      HttpServletResponse response, String tHA) { 
     tHA=request.getParameter("ticketHandler"); 

     ticketHandler1 = tHA; 

    } 

    public String getTicketHandler(){ 

     return ticketHandler1; 

    } 

    public void setTicketCategory(HttpServletRequest request, 
      HttpServletResponse response, String tCA) { 
     tCA=request.getParameter("ticketCategory"); 

     ticketCategory1 = tCA; 

    } 

    public String getTicketCategory(){ 

     return ticketCategory1; 

    } 

    public void setTicketDescription(HttpServletRequest request, 
      HttpServletResponse response, String tDE) { 
     tDE=request.getParameter("ticketDescription"); 

     ticketDescription1 = tDE; 

    } 

    public String getTicketDescription(){ 

     return ticketDescription1; 

    } 

    public void setTicketDate(HttpServletRequest request, 
      HttpServletResponse response, String tDA) { 
     tDA=request.getParameter("ticketDate"); 

     ticketDate1 = tDA; 

    } 

    public String getTicketDate(){ 

     return ticketDate1; 

    } 



}//GetTicketInfo 

WriteToDatabase

package com.issue.handler; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class WriteToDatabase { 



    public void doPost(HttpServletRequest request, 
      HttpServletResponse response) 
        throws ServletException, IOException { 


     GetTicketInfo myGetTicketInfo = new GetTicketInfo(); 






     try( PrintWriter out = response.getWriter()) { 
      String host = "jdbc:derby://localhost:1527/school_server"; 
      String uName = "testuser"; 
      String uPass = "testuser"; 
      Connection con = DriverManager.getConnection(host, uName, uPass); 



      String query = "INSERT INTO issues (ticketID, ticketOwner, ticketTitle, ticketHandler, ticketCategory, ticketDescription, ticketDate)"+ "VALUES(?,?,?,?,?,?,?)"; 

      PreparedStatement preparedStmt = con.prepareStatement (query); 


      preparedStmt.setString(1,myGetTicketInfo.getTicketID()); 
      preparedStmt.setString(2,myGetTicketInfo.getTicketOwner()); 
      preparedStmt.setString(3,myGetTicketInfo.getTicketTitle()); 
      preparedStmt.setString(4,myGetTicketInfo.getTicketHandler()); 
      preparedStmt.setString(5,myGetTicketInfo.getTicketCategory()); 
      preparedStmt.setString(6,myGetTicketInfo.getTicketDescription()); 
      preparedStmt.setString(7,myGetTicketInfo.getTicketDescription()); 

      preparedStmt.execute(); 

     }catch (Exception e) { 
      System.err.println("Got an exception!"); 
      System.err.println(e.getMessage());} 



    } 


} 

索引

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Issue Handler</title> 
</head> 
<body> 
<h1>Issue Handler</h1> 

<FORM ACTION="issueHandler" method="get"> 
    Ticket ID: 
    <INPUT TYPE="TEXT" NAME="ticketID" VALUE=""><BR> 

    Ticket Owner: 
    <INPUT TYPE="TEXT" NAME="ticketOwner" VALUE=""><BR> 

    Ticket Title: 
    <INPUT TYPE="TEXT" NAME="ticketTitle" VALUE=""><BR> 

    Ticket Handler: 
    <INPUT TYPE="TEXT" NAME="ticketHandler" VALUE=""><BR> 

    Ticket Category: 
    <INPUT TYPE="TEXT" NAME="ticketCategory" VALUE=""><BR> 

    Ticket Description: 
    <INPUT TYPE="TEXT" NAME="ticketDescription" VALUE=""><BR> 

    Ticket Date: 
    <INPUT TYPE="TEXT" NAME="ticketDate" VALUE=""><BR> 



    <INPUT TYPE="SUBMIT" VALUE="Register Ticket"> 
</FORM> 

</body> 
</html> 

web.xml中

<web-app 
    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" 
    version="3.0"> 
    <display-name>Issue Handler</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 


</web-app> 
+0

要發送表單數據到服務器,您應該使用POST。 – pbespechnyi

+0

根據您的評論更新。儘管我的錯誤沒有區別。 – bork

回答

0

您沒有提供HttpServlet#doGet(HttpServletRequest, HttpServletResponse)覆蓋。這是Servlet容器使用的方法。

你提供

public void doGet(HttpServletRequest request, 
     HttpServletResponse response, String tID) { 
    tID=request.getParameter("ticketID"); 
    ticketID1=tID; 

} 

這是一個完全不相關的方法。

提示:用@Override註釋你認爲自己壓倒一切的方法。

+0

我在這裏感覺有點超出我的深度,如果我添加@Override註釋,我會在代碼中得到這個錯誤。 「GetTicketInfo類型的doGet(HttpServletRequest,HttpServletResponse,String)方法必須覆蓋或實現超類型方法」 – bork

+0

@bork「正確。這種方法並沒有壓倒一切。你使用'@ Override'來確定你正在做什麼。您提供的'doGet'方法與任何父類方法無關。您需要覆蓋具有我已鏈接到的簽名的父類「doGet」方法。 –

+0

謝謝。我現在正在覆蓋該方法,並且仍然像以前那樣在瀏覽器中出現相同的錯誤。 – bork

相關問題