Java servlet无法保存到数据库
我正在编写一个简单的servlet程序,试图将web表单数据(jsp)保存到mySQL数据库中。我得到一个http状态404。 这是我的密码 我的第一个servlet.java文件是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
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语句,以便它可以在您选择的数据库上运行
尝试
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());
}