Matrix818181
Matrix818181

Reputation: 103

J2EE - Dynamic web project - Unable to run my helloworld app

I'm currently trying to run a servlet that check a GET value and write the value.

Here my class :

    import java.io.IOException;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class Servlet extends HttpServlet {

        /**
         * 
         */
        public Servlet() {
            // TODO Auto-generated constructor stub
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            final String myValue = request.getParameter("MyValue");
            if (myValue != null && !myValue.isEmpty()) {
                response.getWriter().write(myValue);
            }
        }

    }

It's quit simple, right ?

I already tried many url to be able to see my result like the following :

 - http://localhost:8080/Servlet/servlet/Servlet
 - http://localhost:8080/Servlet/servlet/Servlet?MyValue=Test
 - http://127.0.0.1:8080/Servlet/servlet/Servlet
 - http://127.0.0.1:8080/Servlet/servlet/Servlet?MyValue=Test

Is there something wrong with my code or is it a problem with my eclipse?

Thx

Upvotes: 0

Views: 517

Answers (2)

BalusC
BalusC

Reputation: 1109875

You didn't tell anything about the problem symptoms, but I'll assume that you're getting a HTTP 404 error page on all the attempts, right?

You need to map the servlet on an URL pattern. First, you need to assure that the servlet class is placed in a package (we'll assume com.example in this answer).

If you're still on Java EE 5 (or even J2EE..), register it in the webapp's /WEB-INF/web.xml (Eclipse should have autogenerated one):

<servlet>
    <servlet-name>servlet</servlet-name>
    <servlet-class>com.example.Servlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servlet</servlet-name>
    <url-pattern>/servlet</url-pattern>
</servlet-mapping>

(the servlet name is basically the instance variable name, there's only one applicationwide; the servlet class is obviously the FQN; the URL pattern the webcontent-relative URL of the servlet)

Or when you're already on the latest Java EE 6, then annotate it with @WebServlet wherein you specify the URL pattern as value:

package com.example;

// ...

@WebServlet("/servlet")
public class Servlet extends HttpServlet { 
    // ...
}

Either way, it's basically telling that the servlet should listen on webcontent-relative URLs matching /servlet. So, assuming that your web context root path is /Servlet, then this should do:

http://localhost:8080/Servlet/servlet

In the future, it'd be easier if you created the servlet class by New > Servlet instead of New > Class, then this all will be automagically taken into account in the wizard.

See also:

  • Our Servlets wiki page - contains some Hello World examples - you can get to this page by hovering your mouse a while above the until a black info box shows up and then clicking the info link therein.

Upvotes: 2

Mingtao Sun
Mingtao Sun

Reputation: 1166

You can find your Context Root by right clicking your project in eclipse -> Properties -> Web Project Settings.

Upvotes: 0

Related Questions