我在IntelliJ IDEA Ultimate中制作了一个Java Web项目。我有一个类,其方法是将两个字符串作为输入,查询数据库,并返回一个int值。 (它是一个登录方法 - 接受用户名和密码 - 如果它们有效,它应该返回用户ID的int,否则为0)。
我通过从" Tester"中调用它来测试这种方法。使用main方法的类,并返回预期值。但是,从jsp页面调用此方法时,它会为我的SQL驱动程序(com.sql.jdbc.Driver)获取ClassNotFound异常。 (我知道这个方法给了我错误,因为我添加了一个System.out.println来调试它)
为什么我从jsp页面调用方法时才会出现此错误?我该如何解决这个问题?
我在控制台中遇到的确切错误:
LogIn method error java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
给我带来痛苦的LogIn方法:
public static int logIn(String username, String password) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_database", "root",
"password12345");
Statement stmt = con.createStatement();
ResultSet users = stmt.executeQuery("SELECT * FROM users");
ArrayList<User> userList = new ArrayList<User>();
while (users.next()) {
userList.add(
new User(users.getInt("id"), users.getString("username"), users.getString("password"),
users.getString("full_name"),
users.getString("email"), users.getInt("admin") == 1));
}
for (int i = userList.size() - 1; i >= 0; i--) {
if (username.equals(userList.get(i).getUserName()) && userList.get(i).testPassword(password)) {
System.out.println(userList.get(i).getId());
return userList.get(i).getId();
}
}
return 0;
} catch (Exception e) {
System.out.println("LogIn method error " + e);
return 0;
}
}
JSP页面:
<%@ page import="com.neilbanerjee.SupportMeLogic,java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
int loggedInID = MyOtherClass.logIn(request.getParameter("username"), request.getParameter("password"));
com.neilbanerjee.User loggedIn;
if (loggedInID == 0) {
loggedIn = null; %>
<%--<jsp:forward page="index.jsp"></jsp:forward>--%>
<%
} else {
loggedIn = MyOtherClass.loggedInUser(loggedInID);
}
%>
<html>
<head>
<title>SupportMeDevices</title>
</head>
<body>
Welcome, <% out.print(loggedIn.getFullName());%>!
</body>
</html>
答案 0 :(得分:0)
当您的网络应用程序部署在服务器上时,它会使用大量服务器的lib
文件夹和WEB-INF/lib
文件夹的jar。
建议您将javax.servlet.jsp.jstl-1.2.4.jar
和javax.servlet.jsp.jstl-api-1.2.1.jar
放在WEB-INF/lib
中,以便能够在jsp页面上使用jstl。
答案 1 :(得分:0)
当您从main方法调用它时,JDBC驱动程序类位于类路径中,Java可以在没有错误的情况下运行应用程序。
但是当您尝试从JSP访问这些类时,部署的war应该包含其中的JDBC Driver类。要使已部署的war文件具有所有必需的类,您需要将应用程序所需的所有库包含在&#39; WEB-INF / lib&#39;中。尝试添加它们并重新部署war文件并查看。