File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Servlets and the fly likes Why can I not Class.forName in doPost Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Servlets
Bookmark "Why can I not Class.forName in doPost" Watch "Why can I not Class.forName in doPost" New topic

Why can I not Class.forName in doPost

Roger Graham

Joined: Feb 04, 2005
Posts: 10

I have a Class.forName("com.mysql.jdbc.Driver") inside a doPost of a servlet deployed in JBoss (know its not the correct place to put it, but I was trying to do something quick and am just curious about servlet classloading).

I get a ClassNotFoundException. I presume, although against best practices, I am allowed legally to do a Class.forName(...) here - why do I get this error. It might be because the javax.sql are not loaded. If I place a j2ee.jar there, what are the implications? Would this work?


ps- I assume that the classloader of the thread which is servicing my request is the same classloader as that my webapp used - i.e. everything I put in lib I should be able to reference?
Roger Graham

Joined: Feb 04, 2005
Posts: 10
...also I seem to be doing the right thing according to the folks at MySQL:

I don;t have a JBoss-specific DD and my web.xml DD doesn't mention the library - do I have to declare it or something in there?

Paul Sturrock

Joined: Apr 14, 2004
Posts: 10336

Class.forName() just gets you a Class object for whatever class you have named. If the ClassLoader can't find that class, it can't load it. So the jar containing com.mysql.jdbc.Driver needs to be in the classpath for your webapp (i.e. in its WEB-INF/lib directory).

JavaRanch FAQ HowToAskQuestionsOnJavaRanch
Ben Souther

Joined: Dec 11, 2004
Posts: 13410

You need to put the classes/libs where your app can see them.
For classes, put them in

for jar files:

Java API J2EE API Servlet Spec JSP Spec How to ask a question... Simple Servlet Examples jsonf
Roger Graham

Joined: Feb 04, 2005
Posts: 10
Hi, sorry I forgot to mention the most important point! I *have* placed the jar in the WEB-INF/lib directory... that's what's confusing me.

Interestingly, however, I've been reading and MySQL recommends:

Class.forName(..).newInstance() as a 'workaround' for some implementations, it also states you shouldn't place a direct import statement importing the same class you're doing a classload on.

Still confused however! Any ideas?
Roger Graham

Joined: Feb 04, 2005
Posts: 10
This works:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/question_db?user=root&password=mypass");

*Provided* you do not have directly import com.mysql.jdbc.Driver *and* you have the lib in the WEB-INF/lib directory as per the spec.

I agree. Here's the link:
subject: Why can I not Class.forName in doPost
Similar Threads
Access resource that lives in a different war
Null Pointer Exception
HTTP method POST is not supported by this url
doPost or doGet or service() which one should i use
Unable to upload file using Swing and Servlets to Server