将参数传递到servlet时出错

时间:2012-05-08 01:19:55

标签: http servlets

我想实现一个servlet来从浏览器获取参数并使用http post而不是http get插入到db中。

servlet将从诸如此http://localhost:8080/NewServlet?firstname=me&middlename=you&lastName=secret&location=here的URL中接收params,并插入到db中,但它就像我不能正确地执行它。

这是我试图运行的代码

  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>");
  }
}

当我尝试使用网址http://localhost:8080/NewServlet?firstname=me&middlename=you&lastName=secret&location=here

运行代码时

我收到以下错误:

  

HTTP状态405 - 此URL不支持HTTP方法GET

     

输入状态报告

     

消息HTTP方法此URL不支持GET

     

description请求的资源不允许使用指定的HTTP方法(此方法不支持HTTP方法GET。)

2 个答案:

答案 0 :(得分:1)

您只在servlet中定义了do Post()方法。但是当您使用http://localhost:8080/NewServlet?firstname=me&middlename=you&lastName=secret&location=here进行访问时,会调用您尚未定义的doGet()。只需将代码复制并粘贴到同一servlet中的doGet()内的doPost()方法中。
像这样:

public void doGet{
 //your code
}

答案 1 :(得分:0)

  

HTTP状态405 - 此URL不支持HTTP方法GET

嗯,这已经是答案了。您正在发送GET请求,但您的servlet实现不支持它。根据您编写的代码,它仅支持POST请求。您在任何地方都没有doGet()实施,只有doPost()

我不确定功能要求是什么以及为什么这个错误对您来说不清楚,但为了让您的代码能够运行,您应该发送POST请求,或者将doPost方法重命名为{你的servlet中的{1}}。


对于具体问题

无关,您的代码还存在其他问题,其中包括SQL注入漏洞,数据库资源泄漏以及控制器中的视图混合。要正确学习servlet,您可能需要从our servlets wiki page开始。