java - 使用 Eclipse EE 和 PostgreSQL 的登录/注册表单
问题描述
我正在尝试研究如何创建 Web 应用程序。特别是我想创建一个用于登录/注册的表单。我已将 Eclipse EE 与 Tomcat 和 PostgreSQL 连接起来。我不明白如何确保用户注册并将其保存到数据库中以便他可以登录。
目前我只有这些文件:home.jsp、index.html、login.html、login.jsp、registration.jsp、login.java、DBQuery.java、registration.java
DBQuery.java
import java.sql.*;
public class DBQuery {
private String connectionURL = "jdbc:postgresql://localhost:5432/";
private Connection connection = null;
private PreparedStatement statement = null;
private ResultSet rs = null;
private String query = "select * from users where login=?";
private String insert = "insert into users(login, firstname, lastname, password) values (?,?,?,?)";
public DBQuery() {
// TODO Auto-generated constructor stub
// get a DB connection
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "postgres", "12345");
}
catch(Exception e){
e.printStackTrace();
}
}
@Override
protected void finalize() {
try{
connection.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
public boolean validate(String login, String password){
boolean result = false;
try{
statement = connection.prepareStatement(query);
statement.setString(1, login);
rs = statement.executeQuery();
if (rs.next() && password.equals(rs.getString("password")))
result = true;
rs.close();
statement.close();
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
public boolean unique(String login){
boolean result = false;
try{
statement = connection.prepareStatement(query);
statement.setString(1, login);
rs = statement.executeQuery();
if (rs.next())
result = false;
else
result = true;
rs.close();
statement.close();
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
public void register(String login, String password, String firstname, String lastname){
// should write data to DB table
try{
statement = connection.prepareStatement(insert);
statement.setString(1, login);
statement.setString(2, firstname);
statement.setString(3, lastname);
statement.setString(4, password);
statement.executeUpdate();
statement.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
public String getFirstName(String login){
String result="";
try{
statement = connection.prepareStatement(query);
statement.setString(1, login);
rs = statement.executeQuery();
if (rs.next())
result = rs.getString("firstname");
else
result = "";
rs.close();
statement.close();
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
public String getLastName(String login){
String result="";
try{
statement = connection.prepareStatement(query);
statement.setString(1, login);
rs = statement.executeQuery();
if (rs.next())
result = rs.getString("lastname");
else
result = "";
rs.close();
statement.close();
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
}
注册.java
import java.io.IOException;
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 javax.servlet.http.HttpSession;
/**
* Servlet implementation class Registration
*/
@WebServlet({ "/Registration", "/registration" })
public class Registration extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Registration() {
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
DBQuery DB = new DBQuery();
String login = request.getParameter("login");
String password_ = request.getParameter("password_");
String firstname = request.getParameter("firstname");
String lastname = request.getParameter("lastname");
HttpSession session=request.getSession();
session.setAttribute("Login", login);
session.setAttribute("FirstName", firstname);
session.setAttribute("LastName", lastname);
if(DB.unique(login)){
DB.register(login, password_, firstname, lastname);
session.setAttribute("Logged-in", "true");
response.sendRedirect("home.jsp");
} else {
session.setAttribute("ErrorMessage", "Username already in use!");
response.sendRedirect("registration.jsp");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
注册.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Registrazione</title>
<link rel="stylesheet" href="css/general.css" type="text/css">
<script src="js/general.js"></script>
</head>
<body>
<% if(session.getAttribute("Logged-in") != null){
response.sendRedirect("home.jsp");
return;
}
%>
<h1><%= session.getAttribute("ErrorMessage") != null ? session.getAttribute("ErrorMessage") : "" %></h1>
<div id="registration">
<form action="registration" method="POST" onsubmit="return validateRegistrationForm()">
First name: <input type="text" name="firstname"
value=<%= session.getAttribute("FirstName") != null ? session.getAttribute("FirstName") : "" %>></input><br/>
Last name: <input type="text" name="lastname" required="required"
value=<%= session.getAttribute("LastName") != null ? session.getAttribute("LastName") : "" %>></input><br/>
Login: <input type="text" name="login" required="required"
value=<%= session.getAttribute("Login") != null ? session.getAttribute("Login") : "" %>></input><p/>
Password: <input type="password" name="password" required="required"></input><br/>
Re-type password: <input type="password" name="password_confirmation"></input><br/>
<input type="submit" value="Register"/>
<input type="reset" value="Reset form"/>
</form>
</div>
<hr/>
<a href="login.jsp">Login</a>
</body>
</html>
解决方案
推荐阅读
- php - 代码中的 trans 函数是什么意思……以及 quickadmin 类的位置
- java - JAVA RMI 加法示例
- javascript - 如何从这些属性中构造一个新对象?
- sql - sql 使用来自另一个表的信息更新列,其中链接列重复
- php - 无法在 SELECT 字段名称中使用 BindValue?
- wordpress - 使用用户名、电子邮件和自定义元字段的 Wordpress 登录
- c++ - “for(;;)”的目的是什么
- mysql - MySQL 触发器 - 比较两个不同表的值
- python - IndexError:在 TensorFlow 中列出超出范围的索引
- r - R中的Dygraph,同步胡佛