【问题标题】:Compare a database String value to an getParameter html value?将数据库字符串值与 getParameter html 值进行比较?
【发布时间】:2016-11-03 13:59:24
【问题描述】:

我有一个本地数据库、一个登录页面和一个 servlet。我可以从数据库中获取我想要的值,例如用户名和密码。我还可以在 html 登录表单中获取用户输入。我对 html 使用 request.getParameter。我想检查数据库中的用户名是否等于输入的用户名,如果数据库中的密码等于输入的密码,则授予访问权限,否则拒绝访问。这是我的代码:

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.Servlet;

import static com.sun.corba.se.spi.presentation.rmi.StubAdapter.request;
import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import javax.servlet.RequestDispatcher;
import javax.sql.DataSource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Jony
 */
public class LoginServlet extends HttpServlet {

    private static Object request;

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection connection = null;
        Statement stmt = null;



        try {
            //STEP 2: Register JDBC driver
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception e) {
        }
        //STEP 3: Open a connection
        System.out.println("Connecting to database...");
        connection = DriverManager
                .getConnection("jdbc:mysql://localhost:3306/user_pass", "user", "pass");

        //STEP 4: Execute a query
        System.out.println("Creating statement...");
        stmt = connection.createStatement();
        String sql;
        sql = "SELECT username, password FROM information";
        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {
            //retrieve by column name
            String usernamedb = rs.getString("username");
            String passworddb = rs.getString("password");

            if (usernamedb.equals(inputUsername) && passworddb.equals(inputPassword)) {
                System.out.println("Login successful " + usernamedb + " " + passworddb);
            } else {
                System.out.println("Login failed " + usernamedb + " " + passworddb);
            }

        }

    }

    /**
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      PrintWriter out = response.getWriter();
      String title = "Welcome";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(docType + title);

      String inputUsername = request.getParameter("Name");
      String inputPassword = request.getParameter("Pass");
    }
}

【问题讨论】:

    标签: java html database servlets


    【解决方案1】:

    我认为您只是在学习 servlet。我还看到您是 HvA 的学生,我也是,我们正在学习同一学科。继续上课,问问你的老师,这一切都会变得清晰。目前,此代码将按照您想要的方式运行:

    package servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.*;
    
    /**
     * @author Jony
     */
    public class LoginServlet extends HttpServlet {
    
        private static Object request;
    
        private boolean isValidUser(String username, String password) {
            Connection connection = null;
            Statement stmt = null;
            ResultSet rs = null;
    
            try {
                //STEP 2: Register JDBC driver
                Class.forName("com.mysql.jdbc.Driver");
    
                //STEP 3: Open a connection
                System.out.println("Connecting to database...");
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_pass", "user", "pass");
    
                //STEP 4: Execute a query
                System.out.println("Creating statement...");
                stmt = connection.createStatement();
                String sql = "SELECT username, password FROM information WHERE username='" + username + "' AND password = '" + password + "';";
                rs = stmt.executeQuery(sql);
    
                // Return true if a result is found.
                if (rs != null && rs.next()) {
                    return true;
                }
            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
            }
            // Return false if no result is found or if there was an error.
            return false;
        }
    
        /**
         * @param request
         * @param response
         * @throws ServletException
         * @throws IOException
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            PrintWriter out = response.getWriter();
            String title = "Welcome";
            String docType =
                    "<!doctype html public \"-//w3c//dtd html 4.0 " +
                            "transitional//en\">\n";
            out.println(docType + title);
    
            String inputUsername = request.getParameter("username");
            String inputPassword = request.getParameter("password");
    
            // Check if user is valid.
            boolean validUser = isValidUser(inputUsername, inputPassword);
    
            // If user is valid, go to ...
            if (validUser) {
                System.out.println("Login successful");
            }// If user is not valid, do ...
            else {
                System.out.println("Login failed.");
            }
    
        }
    }
    

    有些事情可以改进,比如使用prepared statements,但这也将在以后的课程中教授。编码愉快!

    【讨论】:

      【解决方案2】:

      您正在混合基于命令行的 java 应用程序和 servlet 基础应用程序。 请参考https://www.tutorialspoint.com/servlets/servlets-database-access.htm 了解基本的 servlet 数据库示例。

      【讨论】:

        【解决方案3】:

        你会改变你的主要方法为打击

        public static void main(String[] args) throws SQLException, ClassNotFoundException {
        
            Connection connection = null;
        
                try {
                    //STEP 2: Register JDBC driver
                    Class.forName("com.mysql.jdbc.Driver");
                } catch (Exception e) {
                }
                //STEP 3: Open a connection
                System.out.println("Connecting to database...");
                connection = DriverManager
                        .getConnection("jdbc:mysql://localhost:3306/user_pass", "user", "pass");
        
                //STEP 4: Execute a query
                System.out.println("Creating statement...");
                sql = "SELECT username, password FROM information";
                PreparedStatement ps = connection.prepareStatement(sql);
        
                ResultSet rs = ps.executeQuery();
        
                while (rs.next()) {
                    //retrieve by column name
                    String usernamedb = rs.getString("username");
                    String passworddb = rs.getString("password");
        
                    if (usernamedb.equals(inputUsername) && passworddb.equals(inputPassword)) {
                        System.out.println("Login successful " + usernamedb + " " + passworddb);
                    } else {
                        System.out.println("Login failed " + usernamedb + " " + passworddb);
                    }
        
                }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多