alessalessio
alessalessio

Reputation: 1234

EXCEPTION java.lang.ClassNotFoundException: servlet - But the Servlet is present; And web.xml is absolutely correct

Just created a brand new project with Eclipse June 4.2 Use Google App Engine SDK 1.7.4

Eclipse create a Servlet

public class ClockServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");
    }
}

and a simple web.xml

    <servlet>
    <servlet-name>Clock</servlet-name>
    <servlet-class>clock.ClockServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Clock</servlet-name>
    <url-pattern>/clock</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

When i deploy it i get the generic HTML error page: Error: Server Error and from the logs i get:

    EXCEPTION java.lang.ClassNotFoundException: clock.ClockServlet
at com.google.appengine.runtime.Request.process-0925dcee3db2e16a(Request.java)

But the servlet exists and the web.xml is correct Where am i wrong?

tnx

Upvotes: 1

Views: 3377

Answers (2)

Nadav Finish
Nadav Finish

Reputation: 1160

Hi please have a look at: ClassNotFoundException with ServletContextlistener

check the issue (second one) with the servlet-api

Upvotes: 0

alessalessio
alessalessio

Reputation: 1234

Well, seems that Servlet and Web.xml were correct but there was missing a tag that is a must for using Google App Engine. I wonder why it is not underlined and written with capital letters inside documentation.

Tag is <load-on-startup>1</load-on-startup>

Please refer to Java Application Configuration

Each custom servlet must be loaded on startup to let GA Engine instatiate the class and accept requests. Here is the final web.xml to use for deploying the application in GAE

    <servlet>
    <servlet-name>Clock</servlet-name>
    <servlet-class>clock.ClockServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Clock</servlet-name>
    <url-pattern>/clock</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

Upvotes: 3

Related Questions