1

ブラウザからパラメータを取得し、httpgetではなくhttppostを使用してdbに挿入するサーブレットを実装したいと思います。

サーブレットは、このhttp:// localhost:8080 / NewServlet?firstname = me&middlename = you&lastName = secret&location = hereなどのURLからパラメータを受け取り 、データベースに挿入しますが、正しく実行できないようです。

これが実行しようとしているコードの一部です

  public class NewServlet extends HttpServlet {

  public void doPost(HttpServletRequest request,

  HttpServletResponse response)

  throws IOException, ServletException{

  response.setContentType("text/html");

  PrintWriter out = response.getWriter();  

  String firstName = request.getParameter("firstname");

  String middleName = request.getParameter("middlename");

  String lastName = request.getParameter("lastname"); 

  String location = request.getParameter("location");

  String result;

  java.sql.Connection connDB = null;

  try {

            Class.forName("org.postgresql.Driver");

        } catch (ClassNotFoundException ex) {

            Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {

            connDB = DriverManager.getConnection("jdbc:postgresql://" + "localhost" + ":" + 5432 + "/" + "mydb", "username", "secret");

            connDB.setAutoCommit(false);

            System.out.println("Connection established : [" + connDB.toString() + "]");

            java.sql.Statement bankStmt = connDB.createStatement();

           java.sql.Statement stt = connDB.createStatement();

            bankStmt.execute("INSERT INTO full_names(firstname, secondname, lastname) VALUES('"+firstName+"', '"+middleName+"', '"+lastName+"' )");

            java.sql.Statement bnk =connDB.createStatement();

            bnk.execute("INSERT INTO employee_details(location) VALUES('"+location+"')");

           }

            connDB.commit();

        } catch (SQLException ex) {

            ex.printStackTrace();

            try {

                connDB.rollback();

            } catch (SQLException ex1) {

                ex1.printStackTrace();

                Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex1);


            }
            Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex);

        }




  out.println("<b><font color='blue'>Your FirstName is :</font></b>" 

  + "<b>"+ firstName +"</b>" + "<br>");

  out.println("<b><font color='blue'>Your Middle Name is :</font></b>" 

  + "<b>"+ middleName +"</b>" + "<br>");


  out.println("<b><font color='blue'>Your Last Name is :</font></b>"  

  + "<b>"+ lastName +"</b>");
  }
}

URL http:// localhost:8080 / NewServlet?firstname = me&middlename = you&lastName = secret&location=hereを使用してコードを実行しようとすると

次のエラーが発生します。

HTTPステータス405-HTTPメソッドGETはこのURLではサポートされていません

タイプステータスレポート

メッセージHTTPメソッドGETはこのURLではサポートされていません

description指定されたHTTPメソッドは、要求されたリソースには許可されていません(HTTPメソッドGETはこのURLではサポートされていません)。

4

2 に答える 2

1

         サーブレットで do Post() メソッドを定義しただけです。しかし、 http://localhost:8080/NewServlet?firstname=me&middlename=you&lastName=secret&location=hereを使用してアクセスする
と、定義していない doGet() が呼び出されます。同じサーブレットの doGet() 内の doPost() メソッドのコードをコピーして貼り付けるだけです。
このような :

public void doGet{
 //your code
}
于 2012-05-08T12:05:42.563 に答える
0

HTTP ステータス 405 - HTTP メソッド GET はこの URL ではサポートされていません

まあ、これはすでに完全な答えです。GET リクエストを送信していますが、サーブレットの実装ではサポートされていません。あなたが書いたコードによると、それは POST リクエストのみをサポートしています。doGet()どこにも実装はありませんが、doPost().

機能要件が何であるか、このエラーが不明な理由はわかりませんが、コードを実行するには、代わりに POST リクエストを送信するか、サーブレットでdoPostメソッドの名前を変更する必要があります。doGet


具体的な問題とは関係ありませんが、コードには他の問題もあります。特に、SQL インジェクション ホール、DB リソースのリーク、コントローラーでのビューの混合などです。サーブレットを正しく学習するには、サーブレット wiki ページから始めることをお勧めします。

于 2012-05-08T03:15:42.063 に答える