我想实现一个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。)
答案 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开始。