大家好,我正在自学如何使用Servlet和数据库,单个部分正在工作。但所有这些都不起作用,因为我的DatabaseConnection类没有从我的LoginServer获取数据。
因此,我通过Getter从LoginServer获取数据,如果我运行DatabaseConnection,它会用"null"填充数据库中的新行,因为我没有通过注册页面发送任何内容。我的登录服务器接收来自注册的数据,并检查它们是否设置正确。如果设置正确,用户将被发送到新页面。这些是单独的部分。如果我运行整个项目,我不会得到任何错误,&glassfish告诉我LoginServerlet收到了数据,DatabaseConnection正在运行,但在控制台&MySQL没有收到任何消息。
我想知道的第二件事是为什么我不能正确地设置时间戳&SimpleDateFormater(用于解析字符串出生)
谢谢你的帮助。
数据库连接.java
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection {
static boolean connection;
public LoginServlet ls = new LoginServlet();
public static void main(String[] args) {
LoginServlet ls = new LoginServlet();
Connection conn = null;
System.out.println("Im here");//not showing up
try {
String ausgabe = "SELECT * FROM accounts";
String url = "jdbc:mysql://127.0.0.1:3306/project";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "");
System.out.println("Database connection wurde hergestellt ");
// Manuelle Eingabe der Daten
// conn.createStatement().execute("INSERT INTO `accounts` (`name`, `password`, `salt`,`createdat`,`birthday`,`gender`) VALUES ('Test4', 'bla','123','12-11-13 12:12:12','1994-11-12','1')"); //Insert a row
System.out.println("DB: " + ls.username);
conn.createStatement().execute("INSERT INTO `accounts` (`name`, `password`, `salt`,`createdat`,`birthday`,`gender`) VALUES ('" + ls.username + "', '" + ls.password + "','123','12-11-13 12:12:12','1337-11-11','" + ls.gend + "')"); //Insert a row
System.out.println("Clientinfo: " + conn.getClientInfo());
System.out.println("Datenbank: " + conn.getCatalog());
System.out.println("MetaData: " + conn.getMetaData());
System.out.println("Warnungen: " + conn.getWarnings());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("Database connection beendet");
} catch (Exception e) { /* ignore close errors */ }
}
}
}
}
登录服务器.java
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;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
String username, password, cpassword, email, birth, gender;
int gend;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// read form fields
username = request.getParameter("username");
password = request.getParameter("password");
cpassword = request.getParameter("cpassword");
email = request.getParameter("email");
birth = request.getParameter("birth");
gender = request.getParameter("gender");
System.out.println("username: " + username);
System.out.println("password: " + password);
System.out.println("");
CharSequence mySet = "@";
CharSequence mys = "m";
CharSequence wys = "w";
boolean e = false;
if (gender.contains(wys) || gender.contains(mys)) {
e = true;
} else if (gender.contains(wys)) {
gend = 0;
} else {
gend = 1;
}
// get response writer
//PrintWriter writer = response.getWriter();
if (password.equals(cpassword) && e) {
PrintWriter writer = response.getWriter();
// build HTML code
String htmlRespone = "<html>";
htmlRespone += "<h2>Dein Benutzername ist: " + username + "<br/>";
htmlRespone += "Dein Password ist: " + password + "<br/>";
htmlRespone += "Deine Email ist: " + email + "<br/>";
htmlRespone += "Dein Geburtstag ist: " + birth + "<br/>";
htmlRespone += "Dein Geschlecht ist: " + gender + "</h2>";
htmlRespone += "</html>";
// return response
writer.println(htmlRespone);
} else if (password != cpassword) {
PrintWriter writer = response.getWriter();
String htmlResponse = "<html>";
htmlResponse += "Dein Passwort stimmt nicht überein";
htmlResponse += "</html>";
htmlResponse += "<a href="Registration.jsp" target="links"> Zurück</a>";
writer.println(htmlResponse);
} else if (e == false) {
} else if (birth == null) {
System.out.println("Geburtstag falsch formatiert");
}
}
public String getUsername() {
System.out.println("getter: " + username);
return username;
}
public String getPassword() {
return password;
}
public String getCpassword() {
return cpassword;
}
public String getEmail() {
return email;
}
public String getBirth() {
return birth;
}
public int getGender() {
return gend;
}
}
注册.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Registration</title>
</head>
<body>
<h1>Hello World!</h1>
<a href="index.jsp" target="links">Startseite</a>
<div align="center">
<br/>
<form name="reg" method="POST" action="loginServlet"><p>
<table width="370">
<tr>
<td style="float: left;">Benutzername </td>
<td style="float: right;"><input type="text" name="username" class='input' maxlength="12" placeholder="Benutzername" autocomplete="off" required autofocus>
</td>
</tr>
<tr>
<td style="float: left;">Passwort: </td>
<td style="float: right;"><input type="password" name="password" class='input' maxlength="12" placeholder="Passwort" required></td>
</tr>
<tr>
<td style="float: left;">Passwort Bestätigen: </td>
<td style="float: right;"><input type="password" name="cpassword" class='input' maxlength="12" placeholder="Passwort Bestätigen" required></td>
</tr>
<tr>
<td style="float: left;">Email: </td>
<td style="float: right;"><input type="text" class='input' name="email" placeholder="Email" required></td>
</tr>
<tr>
<td style="float: left;">Geburtstag:<br><small>(YYYY-MM-DD)</small> </td>
<td style="float: right;"><input id="datepicker" type="text" maxlength="10" class='input' name="birth" placeholder="Geburtstag" required></td>
</tr>
<tr>
<td style="float: left;">Geschlecht:<br><small>(m oder w)</small> </td>
<td style="float: right;"><input type="text" maxlength="1" class='input' name="gender" placeholder="Geschlecht" required></td>
</tr>
</table>
<input type="submit" value="Bestätigen" class="doVote button" style="" name="register">
</p></form>
</div>
有一件事你没有理解,那就是你不能创建Servlet的请求和响应对象。这是Web容器的工作,因此,自己创建Servlet实例是错误的。请研究Servlet的生命周期。
此代码不会给出ERROR,因为Servlet也是普通类。