【发布时间】:2015-09-09 20:56:22
【问题描述】:
我对 Java EE 编程非常陌生,我应该做一些练习(很快完成我的学业)。 我的问题可能很简单,但我还没有找到任何答案。 在一个练习中,我应该能够登录到 java/jsp/mysql 类型的服务。
登录.htm
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<h3>Login</h3>
<form name="login" method="post" action="ServletLogin">
<table>
<tr>
<td>Email:</td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td>Salasana</td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="Submit" value="Log in;">
</td>
</tr>
</table>
</form>
</body>
</html>
非常标准的登录,是的。传递表单时,它应该转到ServletLogin.java 以启动登录序列。
相反,我是从 Glassfish 那里得到的:
HTTP Status 500 - Internal Server Error
type Exception report
messageInternal Server Error
descriptionThe server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1 logs.
GlassFish Server Open Source Edition 4.1
在ServletLogin.java中,我们的导师留了一个字条,整个项目应该包含一个MySQL驱动库,以避免NullPointerException。
我的问题是,如何使用 Netbeans 做到这一点? Netbeans 告诉我我已经安装了 on,但显然它要么没有,要么不起作用。
这里是ServletLogin.java代码:
/*
* Remember to install a MYSQL driver library
* or the file will alert
* NullPointerException.
*/
package Servlets; //the package in which the Servlet is part of.
import java.io.*;
import java.sql.*;
import javax.servlet.*;
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;
@WebServlet(name = "ServletLogin", urlPatterns = {"/ServletLogin"})
public class ServletLogin extends HttpServlet {
Connection conn = null;
/**
* Initializes the servlet.
*/
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
//Connect to database with database-class
try {
conn = Classes.SQL.openConnection();
}
catch (Exception e) {
System.out.println("Cannot connect to database " + e);
}
}
/**
* Destroys the servlet.
*/
@Override
public void destroy() {
//Closing the database connection
try {
conn.close();
} catch ( SQLException se ) {
System.out.println("Exception " + se);
}
}
//Everything is done in doPost method.
//This Servlet does not use doGet() or ProcessRequest()
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
/*Unless there is a session, one is created.
It is used to check if the user has logged in.*/
HttpSession session = request.getSession(true);
//Reading the parameters from login form.
String email = request.getParameter("email");
String password = request.getParameter("password");
out.print(email);
//Created login_ok and set it to false by default.
boolean login_ok = false;
try {
//let's create a Statement with which the sql can be run with.
Statement stmt = conn.createStatement();
//Run SQL and save it to ResultSet rs.
ResultSet rs = stmt.executeQuery("SELECT email, password FROM clients");
//Go trough the results with while loop and next-method, which returns the value true, until we've reached last result.
while(rs.next())
{
//Reading the data
String email2 = rs.getString("email");
String salasana2 = rs.getString("password);
//If user input has been found from database,
//login_ok becomes true and looping ends.
if(email.compareTo(email2) == 0 && password.compareTo(password2) == 0)
{
login_ok = true;
break;
}
}
//If login_ok is true, save info about logging to session and guide the user to Clients.jsp
if( login_ok == true )
{
//session is informed about login
session.setAttribute("login", "ok");
//Debugging printed to console.
System.out.println("Login ok");
//Proceeding to clients
response.sendRedirect("clients.jsp");
//Return stops the servlet run.
return;
}
//Login false -> redirected to login page.
else {
response.sendRedirect("login.htm");
}
}
catch(SQLException se){
out.println("Error: " + se);
}
out.close();
}
}
我是否遗漏了某些东西,例如进口或?
我已经安装了mysql-connector-java-5.1.23-bin.jar 并将其设置到多个不同的地方,结果相同。我现在只需要能够查看代码是否有效,但NullPointerException 阻止我这样做。
通过 Project Properties -> Libraries 在 Netbeans 8.0.2 上添加 mysql-connector-java-5.1.23-bin.jar 似乎也不能解决它。
将 MySQL 注册到 GlassFish,仍然适用于 NullPointerException。
【问题讨论】:
-
你在 Glassfish 中注册了 mysql 驱动吗? Here 你可以找到如何做到这一点。这很简单。
-
不要像这样遍历 SQL 结果集。查找单个记录是数据库的职责。学习使用
SELECT ... WHERE ... -
您是否在服务器日志中看到“无法连接到数据库 (...)”?您能否详细说明您是如何尝试在 Java 中实现连接的?
标签: java mysql netbeans nullpointerexception