在Servlet中出现异常:找不到类:Class.forName(“com.mysql.jdbc.Driver”)。

huangapple 未分类评论47阅读模式
英文:

Getting Exception in servlet Class not found: Class.ForName("com.mysql.jdbc.Driver)

问题

我尝试了所有可用的解决方案,但没有一个有效,我的类路径是正确的并且工作正常,我还尝试将mysqlconnector.jar添加到servlet目录结构的lib目录中,但问题仍未解决。顺便说一下,我没有使用任何集成开发环境(IDE),我是通过记事本编码,然后手动使用Tomcat运行servlet程序。在IDE中解决问题很容易,但在记事本中则比较困难。顺便说一下,我安装了使用jakarta而不是javax的Apache Tomcat 10。下面是Java Servlet的代码:

import java.util.*;
import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.sql.*;

public class loginn extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        String n = req.getParameter("uname");
        String p = req.getParameter("pass");
        out.println("<html><head><title>Login detail</title></head><body>");
        try {
            out.println("Yo!!!");
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dad_servlet_assignment1", "root", "");
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select * from login");
            boolean flag = false;
            while (rs.next() && !flag) {
                String un = rs.getString("username");
                out.println(un);
                String pass = rs.getString("password");
                if (n.equals(un) && p.equals(pass)) {
                    flag = true;
                    break;
                }
            }
            out.println("YO!");
            if (flag) {
                out.println("<h1>Login Successful!</h1><br><br>");
                out.println("Welcome User: " + n + "<br><br>");
            } else {
                out.println("Invalid Username or password! <br><br>Enter Details Again<br><br>");
                RequestDispatcher rd = req.getRequestDispatcher("index.html");
                rd.forward(req, res);
            }
            
            out.println("</body></html>");
        } catch (Exception e) {
            out.println("Yikes");
            out.println("Exception: " + e.getMessage());
        }
        out.println("</body></html>");
    }
}

各位,非常感谢你们的帮助!提前谢谢你们。

解决方案:

顺便说一下,我自己找到了解决方案。在我的情况下,无法找到com.mysql.jdbc.Driver,因为我的sqlconnector的类路径位于“Program Files”,而我的Apache类路径位于“Program Files (x86)”。因此,我只需将mysqlconnector添加到Apache Tomcat 10的lib目录中,然后在环境变量中设置mysqlconnector.jar的额外路径,问题就解决了!

英文:

I literally tried every solution available and none of it works,my classpath is correct and working fine and I also tried adding mysqlconnector.jar in lib directory of servlet directory structure but to no avail was my problem resolved. By the Way, I am not using any IDE, I am coding via notepad and using tomcat manually to run servlet programs, It's easy to resolve problems in IDE but it is tough to do so in notepad.By the Way, I haveApache Tomcat 10 installed that uses jakarta instead of javax.The code of java servlet is mention below:

import java.util.*;
import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.sql.*;

public class loginn extends HttpServlet
{
	protected void doGet(HttpServletRequest req,HttpServletResponse res)throws IOException,ServletException
	{
		res.setContentType(&quot;text/html&quot;);
		PrintWriter out=res.getWriter();
		String n=req.getParameter(&quot;uname&quot;);
		String p=req.getParameter(&quot;pass&quot;);
		out.println(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;Login detail&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&quot;);
		try
		{
			out.println(&quot;Yo!!!&quot;);
			Class.forName(&quot;com.mysql.jdbc.Driver&quot;);
			Connection con=DriverManager.getConnection(&quot;jdbc:mysql://localhost:3306/dad_servlet_assignment1&quot;,&quot;root&quot;,&quot;&quot;);
			Statement stmt=con.createStatement();
			ResultSet rs=stmt.executeQuery(&quot;select * from login&quot;);
			boolean flag=false;
			while(rs.next() &amp;&amp; !flag)
			{
				String un=rs.getString(&quot;username&quot;);
				out.println(un);
				String pass=rs.getString(&quot;password&quot;);
				if(n.equals(un) &amp;&amp; p.equals(pass))
				{
					flag=true;
					break;
				}
			}
			out.println(&quot;YO!&quot;);
			if(flag)
			{
				out.println(&quot;&lt;h1&gt;Login Successful!&lt;/h1&gt;&lt;br&gt;&lt;br&gt;&quot;);
				out.println(&quot;Welcome User: &quot;+n+&quot;&lt;br&gt;&lt;br&gt;&quot;);
			}
			else
			{
				out.println(&quot;Invalid Username or password! &lt;br&gt;&lt;br&gt;Enter Details Again&lt;br&gt;&lt;br&gt;&quot;);
				RequestDispatcher rd=req.getRequestDispatcher(&quot;index.html&quot;);
				rd.forward(req,res);
			}
			
				out.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);
		}
		catch(Exception e)
		{
			out.println(&quot;Yikes&quot;);
			out.println(&quot;Exception: &quot;+e.getMessage());
		}
		out.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);
	}
}

Guys, your help is highly appreciated! Thank you in Advance.

Solution:

By the way I found the solution myself in my case it wasn't able to find com.mysql.jdbc.Driver as my classpath for sqlconnector was in program files where as my apache classpath was in program files(x 86) hence I just added the mysqlconnector in apache tomcat 10's lib and then all I did was set an additional path for mysqlconnector.jar in environmental paths and tada! my problem solved!

huangapple
  • 本文由 发表于 2020年5月4日 03:21:56
  • 转载请务必保留本文链接:https://java.coder-hub.com/61580349.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定