当前位置: 首页 > 知识库问答 >
问题:

为什么从jsp页面运行方法时会出现错误,而不是从主方法?

殳飞扬
2023-03-14

我正在用IntelliJ IDEA Ultimate制作一个Java web项目。我有一个类,它有一个方法,该方法接受两个字符串作为输入,查询数据库,并返回一个int值。(这是一个登录方法——接收用户名和密码——如果它们有效,它应该返回用户名的int,否则为0)。

我通过用main方法从Tester类中调用它来测试这个方法,它返回了预期值。然而,当从jsp页面调用这个方法时,它会给我的SQL驱动程序(com.sql.jdbc.驱动程序)一个ClassNotFinceExctive。(我知道是这个方法给了我错误,因为我添加了一个System.out.println来调试它)

为什么我只有在从我的jsp页面调用方法时才会得到这个错误?我如何修复这个问题?

我在控制台中得到的确切错误:

LogIn method error java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

给我带来痛苦的登录方法:

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>

共有2个答案

巫经义
2023-03-14

当您从main方法调用它时,类路径中有JDBC驱动程序类,Java可以运行应用程序而不会出错。

但是当您试图从JSP访问这些类时,已部署的war应该包含其中的JDBC驱动程序类。要使已部署的war文件具有所有必要的类,您需要将应用程序需要的所有库包含到“WEB-INF/lib”中。尝试添加它们并重新部署war文件,然后查看。

左丘积厚
2023-03-14

当Web应用部署在服务器上时,它使用服务器的lib文件夹的jars和WEB-INF/lib文件夹的jars。

建议您将javax.servlet.jsp.jstl-1.2.4.jarjavax.servlet.jsp.jstl-api-1.2.1.jar放在WEB-INF/lib中,以便能够在jsp页面上使用jstl。

 类似资料:
  • 我最终得到了一个500的错误,这取决于stacktrace,这可能是一个数据格式错误,但我所有的变量都是字符串,所以我根本看不到错误在哪里。此外,我的连接jdbc很好,因为在调试模式下,我可以看到数据库的值,但一旦它进入JSP中,它就不再工作了。你能帮帮我吗? servlet JSP 豆类 BDD连接 堆栈跟踪 我的servlet:

  • 我想使用页面而不是使用页面。但是当使用html页面时,我得到了错误。但是如果我使用jsp页面,我没有得到任何错误。 当我使用

  • 我有一个回收视图充满了项目,当你长按一行,删除按钮出现,允许用户删除行-我设法让工作正常,但我然后想添加一点安全,它通过添加询问用户是否要删除该行的对话框。然而,当我在对话框中调用该方法时,我会得到一个,如下所示: 我正在使用一个界面长按回收器视图行: 这在我的适配器中: 这些是我主要活动中的长单击和删除行方法: 当我从是()方法中的对话框中调用该方法时,该问题发生在deleteItemRow()

  • 问题内容: 我进行了搜索,发现使用jdk 7的QuickTip:VerifyError : 如果您遇到以下类型的错误 那么一个简单的解决方案是添加以下默认JVM参数 如果像我一样在eclipse中进行操作,则转到Window-> Preferences-> Installed JREs->并添加默认参数。 此设置有什么作用?Oracle 刚刚提到它是具有StackMapTable属性的新型类型检查

  • 我是使用片段的新手,我正在尝试从我的主要活动中执行片段方法,该方法比较文本视图,然后删除cookie并加载网站。 这就是我所拥有的: 在主活动中: 在片段中: 结果是:java。lang.NullPointerException:尝试调用虚拟方法“java”。lang.CharSequence android。小装置。文本视图。空对象引用上的getText()' 编辑 抱歉,但忘了提一下,虽然片段

  • 问题内容: 我正在大学学习基础知识,并且希望对Eclipse中的以下错误有所帮助:“对于类型ShopCLI,未定义方法getCost()”& 这是我的代码 问题答案: 方法是在订单类中定义的,而不是在类中定义的。所以你的代码: 应该改为