Class.forName(“ com.mysql.jdbc.Driver”)错误jsp

时间:2018-08-31 10:16:22

标签: java jsp xampp

我是JSP的新手。我正在尝试使用sublime和xwampp做一个JSP和MySQL连接的基本程序。在运行login.jsp页面时,我得到以下信息:

enter image description here

enter link description here

3 个答案:

答案 0 :(得分:1)

Web应用程序抛出的ClassNotFoundException表示在运行时类路径中找不到您引用的类。在您的情况下,该类别为com.mysql.jdbc.Driver。按名称显式加载类时,这会带来更大的风险 在运行时,因为Java编译器无法检查所需的类是否存在。当然,对于JSP,编译时不一定与运行时区分开。

当然,您不能只命名一个类并期望Java自动将其放置在未指定的位置,检索并加载它。您需要在Web应用程序中或在应用服务器(例如Tomcat)为每个Web应用程序提供的类中包括所需的类及其所有依赖项。

对于诸如此类的第三方类,通常的方法是获取一个或多个包含该类及其依赖项的Jar文件,并将其放在Web应用程序的lib/目录中战争文件或部署目录。确保它们的所有权和权限允许应用程序服务器读取它们。您可以在MySQL的网站上找到所需的Jar文件。您正在寻找他们的“ Connector/J”。

还有一个单独的问题,即如何确保您的构建/打包系统在战争中自动包括所需的Jar或以其他方式部署它,但是您在问题中没有提出任何可以解决这个问题的内容。

答案 1 :(得分:0)

可能的错误:

1)您无权访问com.mysql.jdbc.driver类。您需要将其导入Maven:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.6

2)您直接在JSP中访问请求。正如@Jens所说,这不是一个好习惯。

我想您可能有一些实际呈现JSP的代码,如下所示:

@Controller
public class IndexController {

    @RequestMapping("/login")
    public ModelAndView myindex() {
        return new ModelAndView("login.jsp");
    }
}

您可以在呈现JSP之前执行所有繁琐的逻辑,然后仅将带有值的映射传递给它。像这样:

@Controller
    public class IndexController {

        @RequestMapping("/login")
        public ModelAndView myindex(HTTPServletRequest request) {
            Map<String, Object> data = new HashMap<>();
            data.put("userId", request.getParameter("userId"));
            ...
            // call mysql driver here for whatever reason...
            ...
            return new ModelAndView("login.jsp", data);
        }
    }

然后在您的login.jsp中,您可以仅显示地图的值,而不执行诸如调用SQL驱动程序之类的任何逻辑

答案 2 :(得分:-1)

您正在JSP中使用request.getParameter()。您必须通过在特定方法中将HTTPServletRequest作为参数在Java文件中使用它。而且,如果您要连接到MySql,则在类路径中还需要MysqlConnector.jar文件