java - 登录 Servlet 直接变为 False

标签 java database servlets

大家好,尝试创建一个简单的数据库登录 java servlet。它会直接去 登录失败。请重试。

这是我的数据库的集合,我有表user-iduniidname , 密码, 电子邮件

例如我的表中有以下数据

uniid - 18357593
name - Jared Hoight
password - password
email - jhall@students.monash.edu.au

这是完整的登录 servlet

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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.RequestDispatcher;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    private void sendLoginForm(HttpServletResponse response, 
              boolean withErrorMessage) 
              throws ServletException, IOException {

              response.setContentType("text/html"); 
              PrintWriter out = response.getWriter(); 
              out.println("<HTML>"); 
              out.println("<HEAD>"); 
              out.println("<TITLE>Login</TITLE>"); 
              out.println("</HEAD>"); 
              out.println("<BODY>"); 
              out.println("<CENTER>"); 

              if (withErrorMessage) 
                out.println("Login failed. Please try again.<BR>"); 

              out.println("<BR>"); 
              out.println("<BR><H2>Login Page</H2>"); 
              out.println("<BR>"); 
              out.println("<BR>Please enter your user name and password."); 
              out.println("<BR>"); 
              out.println("<BR><FORM METHOD=POST>"); 
              out.println("<TABLE>"); 
              out.println("<TR>"); 
              out.println("<TD>User Name:</TD>"); 
              out.println("<TD><INPUT TYPE=TEXT NAME=uniid></TD>"); 
              out.println("</TR>"); 
              out.println("<TR>"); 
              out.println("<TD>Password:</TD>"); 
              out.println("<TD><INPUT TYPE=PASSWORD NAME=password></TD>"); 
              out.println("</TR>"); 
              out.println("<TR>"); 
              out.println("<TD ALIGN=RIGHT COLSPAN=2>"); 
              out.println("<INPUT TYPE=SUBMIT VALUE=Login></TD>"); 
              out.println("</TR>"); 
              out.println("</TABLE>"); 
              out.println("</FORM>"); 
              out.println("</CENTER>"); 
              out.println("</BODY>"); 
              out.println("</HTML>"); 
            } 


    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        sendLoginForm(response, false); 

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    public void doPost(HttpServletRequest request, 
              HttpServletResponse response) 
              throws ServletException, IOException {  
                String uniid = request.getParameter("uniid"); 
                String password = request.getParameter("password"); 
                if (login(uniid, password)) {
                  RequestDispatcher rd = 
                    request.getRequestDispatcher("AnotherServlet"); 
                  rd.forward(request, response); 
                } 
                else {
                  sendLoginForm(response, true); 
                } 

    }

     boolean login(String uniid, String password) {
            try {
              Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
              Connection con = 
                DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root",""); 
              System.out.println("got connection"); 

              Statement s = con.createStatement(); 
              String sql = "SELECT uniid FROM user" + 
                " WHERE uniid='" + uniid + "'" + 
                " AND password='" + password + "'"; 
              ResultSet rs = s.executeQuery(sql); 
              if (rs.next()) {
                rs.close(); 
                s.close(); 
                con.close(); 
                return true; 
              } 
                rs.close(); 
                s.close(); 
                con.close(); 
            } 
            catch (ClassNotFoundException e) {
              System.out.println(e.toString()); 
            } 
            catch (SQLException e) {
              System.out.println(e.toString()); 
            } 
            catch (Exception e) {
              System.out.println(e.toString()); 
            } 
            return false; 
          } 
        }

最佳答案

数据库驱动

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

不适合与 MySQL 一起使用。应该是

Class.forName("com.mysql.jdbc.Driver");

当您的 login 方法中发生异常时,将打印异常字符串并返回 false。

关于java - 登录 Servlet 直接变为 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666518/

相关文章:

java - 从 16MB 文件读取数据而不卡住应用程序的最佳方法

php - 个人用户特定定制

java - Tomcat JDBC 池 : Too many connections

java - 列出 java webapp 中的 servlet(在 tomcat 中运行)

java - Apache Tomcat 执行 Java 类

java - 在 ArrayList 线程安全上移动对象的最佳方法是什么?

php - 设置mysql数据库的问题

html - 对多个 HTML 表单使用单个 Servlet

Java:将集合转换为数组以进行字符串表示

php - 在 PostgreSQL 中生成顺序代码的最佳实践是什么