• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Problem compiling servlet [RESOLVED]

 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi All,

I have compiled my servlet to a .class file and placed it in /webapps/myApp/WEB-INF/classes/com/myappln/ dir. But when i invoke it, it does not run and gives a 404.

Thanks in advance




[BPSouther: Changed subject line prior to moving to JIG]
[ July 14, 2006: Message edited by: Ben Souther ]
 
Ronald Tagra
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
how did you invoke it?
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
i just invoked using the url http://localhost:8080/myApp/servlet/MyServlet
and also the url http://localhost:8080/myApp/servlet/com.myappln.MyServlet
 
Ronald Tagra
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You have to enable the invoker servlet.

if you're using tomcat, it's found in TOMCAT_HOME/conf/web.xml

Look for commented:

<!-- <servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet> -->


And

<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->

portion and uncomment then restart tomcat.
[ July 14, 2006: Message edited by: Ronald Tagra ]
 
Christophe Verré
Sheriff
Posts: 14691
16
Eclipse IDE Ubuntu VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I'd recommend to avoid using the Invoker and give a proper mapping to your servlet in web.xml, using the servlet-mapping tag.
 
Ronald Tagra
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
agree, that's the best way to go.
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have done that but still it is unavailable.

During first invocation it gives a IllegalAccessException

and after that a 404.
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Here is the stack trace....

javax.servlet.ServletException: Cannot allocate servlet instance for path /myApp/servlet/com.myappln.MyServlet
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:388)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.IllegalAccessException: Class org.apache.catalina.core.StandardWrapper can not access a member of class com.myappln.MyServlet with modifiers ""
sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)
java.lang.Class.newInstance0(Class.java:302)
java.lang.Class.newInstance(Class.java:261)
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:369)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 
Ronald Tagra
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
paste your servlet too.
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This is my servlet code:

package com.myappln;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("GET Request. No Form Data Posted");
}

public void doPost(HttpServletRequest request, HttpServletResponse res)
throws IOException, ServletException
{
Enumeration e = request.getParameterNames();
PrintWriter out = res.getWriter ();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = request.getParameter(name);
out.println(name + " = " + value);
}
}
}

Also i had compiled the servlet without public access specifier coz when i put public the error in compilation is FirstServlet .java:8: class FirstServlet is public, should be declared in a file named FirstServlet.java
public class FirstServlet extends HttpServlet {

Hence i think because of the access specifier, Tomcat is unable to load it.
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Is this the code (exact code) that you compiled?

Removing the public modifier was not the way to fix that problem.
The name specified in the class signature has to match the name of the file.
If you fix that there will be no problem with the public modifier.
 
pradeep setti
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi this is pradeep.

i have tried ur servlet.

and got the result.

in web.xml do the following: i am giving the complete entries to get u understood:

<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.myappln.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
 
pradeep setti
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
add : com.myappln.FirstServlet in <servlet-class></servlet-class> tag of ur web.xml
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
well done that already but the main problem is whenever i put public modifier, the servlet does not compile even when the class and file names are the same.
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The public modifier needs to be there.

You know that the casing needs to match in order for the class name and the servlet name to be the same, right?
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Yes Ben i know that but FirstServlet.java is unable to compile with a public access modifier
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
pradeep setti,

Welcome to JavaRanch and thank you for helping out.
I'd like you to take a minute to read: UseRealWords

Abbreviations such as "u" or "ur" in place of "you" and "you are"
or "you're" confound language translation software making it hard
for our non-English speaking members to read your posts.

Again thank you for your help; both with this situation and in general with Javaranch.

-Ben
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Post the exact code of the servlet you are trying to compile.
Then post the command that you're using when trying to compile the class.

If the compiler is giving you that error message then the name doesn't match the file name.

Note: Windows Explorer will somethimes show files with the first letter captialized, even it it's not. Try typing 'dir' in the command window to see a list of the files. See if the casing matches what you've got in the class signature.

In any case, changing the modifier to get it to compile will leave you with a useless servlet.
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This is the code which does not compile and i am using TextPad to compile it.

package com.myappln;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("GET Request. No Form Data Posted");
}

public void doPost(HttpServletRequest request, HttpServletResponse res)
throws IOException, ServletException
{
Enumeration e = request.getParameterNames();
PrintWriter out = res.getWriter ();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = request.getParameter(name);
out.println(name + " = " + value);
}
}
}

Also the other servlets within webapps compile without a problem.

Thanks
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Something is wrong with the filename then.

Did you do as I suggested and look at the filenames in the current directory by typing 'dir' at the command line?

If you're curious, open a command prompt, CD to the directory with that file in it and type:

Then open fileList.txt with an editor and post the contents.

If you're not curious and just want this to work, rename the file.
Once to junk.java, then back to FirstServlet.java (being very careful with the casing).
 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Here is what the dir command gives:
jakarta-tomcat-5.0.28\webapps\myApp\WEB-INF\classes\com\myappln\

07/14/2006 03:13p <DIR> .
07/14/2006 03:13p <DIR> ..
07/14/2006 03:07p 899 FirstServlet .java
1 File(s) 899 bytes
2 Dir(s) 34,100,178,944 bytes free
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
There is a space between 'FirstServlet' and '.java'


 
Mickey Smith
Ranch Hand
Posts: 30
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hey Ben resolved the issue. Just couldn't think it could be so petty.

Thanks a lot.
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser Redhat VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Glad it's working for you.

A couple tips:
If you use the UBB Code tags when posting any literal text (code or screen dumps) things like this stand out a little better. The UBB code tags preserve whitespace and use a mono-spaced font which helps preserve indenting.

Please, never, NEVER, post code that is different from what you've actually compiled or are running. To do so is to drag a Red Herring across the path of the folks trying to help you. This will almost always result in a huge waste of time.

We've compiled a list of these types of tips.
You can read them here.




Since this has turned out to be a Java compilation issue and not a servlet invocation issue, I'm going to change the subject line and move this thread to the Java In General (Beginner) forum so people searching on javac issues will be able to find this there.

Thanks for posting back.
-Ben
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic