Java servlet无法保存到数据库

Java servlet无法保存到数据库,java,mysql,database,jsp,servlets,Java,Mysql,Database,Jsp,Servlets,我正在编写一个简单的servlet程序,试图将web表单数据(jsp)保存到mySQL数据库中。我得到一个http状态404。 这是我的密码 我的第一个servlet.java文件是 package first; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; im

我正在编写一个简单的servlet程序,试图将web表单数据(jsp)保存到mySQL数据库中。我得到一个http状态404。 这是我的密码

我的第一个servlet.java文件是

package first;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.sql.*;
公共类FirstServlet扩展了HttpServlet{ 私有静态最终长serialVersionUID=1L

/**
 * @see HttpServlet#HttpServlet()
 */
public FirstServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse      response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse     response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Employee Management form";
 String docType =
 "<!doctype html public \"-//w3c//dtd html 4.0 " +
 "transitional//en\">\n";
 out.println(docType +
           "<html>\n" +
           "<head><title>" + title + "</title></head>\n" +
           "<body bgcolor=\"#f0f0c0\">\n" +
           "<h1 align=\"center\">" + title + "</h1>\n" +
           "<ul>\n" +
           "  <li><b>First Name</b>: "
           + request.getParameter("first_name") + "\n" +
           "  <li><b>Last Name</b>: "
           + request.getParameter("last_name") + "\n" +
           "</ul>\n" +
           "</body></html>");

 try {

 Connection myConn =     DriverManager.getConnection("jdbc:mysql://localhost:3306/world", "root" , "password");
 System.out.println("Loading driver...");
 Class.forName("com.mysql.jdbc.Driver");
 System.out.println("Driver loaded!");

Statement myStmt = myConn.createStatement();
//ResultSet myRs = myStmt.executeQuery("select * from countrylanguage");
String sql = "insert into countrylanguage"
+ " (CountryCode, Language, IsOfficial, Percentage)"
+ " VALUES ('dvi', 'engli', 'T', '9.3')";

myStmt.executeUpdate(sql);

}
catch (Exception exc) {
exc.printStackTrace();
 }
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request,
                HttpServletResponse response)
 throws ServletException, IOException {
doGet(request, response);
 }
}

在web.xml中,以下行必须如下所示:

<servlet-class>first.FirstServlet</servlet-class>

jsp文件中的form语句有一个输入错误。 你有:
“HelloServlet2”被错误地拼写为HelloSevrvlet2。一旦您纠正了这个问题,您的代码应该可以正常工作。我已经亲自使用Glassfish服务器测试了您的代码。

以下是如何从JSP获取值并存储在数据库表中:
1.在数据库中创建表

   create table emp(
      emp_id Integer primary key,
      first_name varchar(25),
      last_name varchar(25)
   )
上面提到的“create table”语句是针对与Glassfish服务器捆绑在一起的JavaDB数据库的。但是您可以调整create语句,以便它可以在您选择的数据库上运行

  • JavaServlet代码(我刚刚包含了数据库的try/catch块) servlet代码的其他部分与前面发布的相同。)

  • 一旦您了解了Hibernate/JPA/JTA/JPQL等技术,您会发现这些API为与数据库交互提供了非常强大的功能。使用这些技术,您将不必直接与JDBC交互。目前,我上面给出的解决方案应该足够了


  • 尝试
    action=“/FirstServlet”
    尝试了它。仍然得到错误。控制台显示什么?尝试
    action=“FirstServlet”
    。从
    /FirstServlet
    ,浏览器将构建一个绝对URL,如
    http://localhost/FirstServlet
    ,这可能有效,也可能无效,具体取决于应用程序根目录的映射。另一方面,设置为
    FirstServlet
    的操作将产生一个相对于
    index.jsp位置的URLode>(例如
    http://localhost/yourapproot/FirstServlet
    ,这是您实际需要的。
    /@WebServlet(“/FirstServlet”)
    尝试取消对此行的注释更改了xml和jsp文件,但仍然收到错误。我还在代码中添加了程序文件夹层次结构。尝试更改操作=“/HelloSevrvlet2/FirstServlet”我修正了输入错误。我确实让网页填写表单,但一旦我单击“提交”,我的servlet就不会显示名称,并给出Http状态404错误。我的项目文件夹HelloServlet2上有红色图标。但我在任何子文件夹或文件中都看不到它。我如何找到更多信息?提交后,当你收到4040错误时,你能找到它吗t您在浏览器中看到的URL。我可以很好地运行您的代码,员工管理表单显示我输入的名字和姓氏值。虽然这是使用glassfish服务器,而不是tomcat。但是服务器类型不重要。我尝试过发布,但仍然出现错误。我的项目文件夹HelloServlet2上有红色的编译错误图标。但我在任何子文件夹或文件中都没有看到它。我如何才能找到更多信息?这里有一个想法。“web.xml”文件通常位于web-INF文件夹下。在您给定的文件夹结构中,它与web-INF处于同一级别。请尝试将web.xml移动到web\u-INF目录,然后重试。可能是这样的吗这就是tomcat无法找到小程序的原因。如何在数据库中添加、删除、更新和搜索表单值?您可以向jsp页面添加单选按钮,每个数据库操作一个。在servlet中,您可以使用getParameters()获取所选单选按钮并相应地使用insert/update/delete/select语句对数据库进行更改。
    HelloSevrvlet2
     Java Resources
      src
       first
        FirstServlet.java
     Libraries
      Apache Tomcat v7.0
      EAR Libraries
      JRE System Library
      Web App Libraries
     WebContent
      WEB-INF
       Lib
       web.xml
     index.jsp
    
    <servlet-class>first.FirstServlet</servlet-class>
    
    action="/FirstServlet"
    
       create table emp(
          emp_id Integer primary key,
          first_name varchar(25),
          last_name varchar(25)
       )
    
    // You do not need to load the driver class as JDBC now  
    // loads the required driver class automatically based on the   
    // connect string you specify in the getConnection() method.  
    Connection myConn = null;  
    try {  
        int emp_id = Integer.parseInt(request.getParameter("emp_id"));  
        String first_name = (String) request.getParameter("first_name");  
        String last_name = (String) request.getParameter("last_name");  
        myConn = DriverManager.getConnection
        ("jdbc:derby://localhost:1527/sun-appserv-samples", "app", "app");  
        String sql = "INSERT INTO emp"  
                   + " (emp_id, first_name, last_name)"  
                   + " VALUES (?,?,?)";  
        PreparedStatement myStmt = myConn.prepareStatement(sql);  
        myStmt.setInt(1, emp_id);  
        myStmt.setString(2, first_name);  
        myStmt.setString(3, last_name);  
        int status = myStmt.executeUpdate();  
        out.println(status + " rows inserted");  
        myConn.commit();  
        myConn.close();  
    } catch (Exception exc) {  
        exc.printStackTrace();  
        out.println(exc.getMessage());  
    }