首页 > 解决方案 > 使用 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>

标签: javaeclipsepostgresql

解决方案


推荐阅读