Below is a step-by-step tutorial to a hello world servlet that writes out some HTML to the user who visits it.
Please note that in the following examples, you will need to replace “username” with your actual username
Actually visiting http://students.cs.ndsu.nodak.edu/~username/ will bring you to an example site. Visiting http://students.cs.ndsu.nodak.edu/~username/servlet/HelloWorld will bring you to the servlet that this howto will create.
The first step is to make sure your web page works.
Check to make sure you have a working web page by visiting http://students.cs.ndsu.nodak.edu/~username. See instructions here for help with setting up your web page.
You will also want to make sure that your account is configured to use Tomcat. Take the simple JSP page below and put it in your public_html directory somewhere and browse to it.
For example, if I were to place the sample JSP page at /home/helsene/public_html/java.jsp, I could access it as http://students.cs.ndsu.nodak.edu/~helsene/java.jsp
<html> <head> <title> Test JSP </title> </head> <body> <%= new java.util.Date().toString() %> </body> </html>
So your JSP works now? Great! If this simple test page doesn't work, contact the departmental administrator to get your account configured to use Tomcat. If you are enrolled in CSCI 366, your account has already been configured with Tomcat access.
This servlet is a short little 'Hello World'
We will be creating a java class file that acts as our servlet, but before we compile it, we need to write it first!
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World</h1>"); out.println("<br/>"); out.println("This HTML is generated by a servlet, the code for it is located <a href=\"/~username/HelloWorld.java\">here.</a>"); out.println("</body>"); out.println("</html>"); } }
Save this class as HelloWorld.java in any folder of your choosing.
Compiling is a bit trickier. You will need the servlet api jar file in order to compile. This file is located in /opt/lablibs/servlet-api.jar in the lab, so if you're using the lab to compile, you can just use: javac -cp “./:/opt/lablibs/servlet-api.jar” <name>.java.
If you're not in the lab, you'll need to adjust your classpath or import the .jar into Netbeans of Eclipse. Instructions for doing that can be found here.
Download servlet-api.jar from the link above and save it somewhere handy. Assuming I saved the servlet-api.jar and the HelloWorld.java files in my home directory (/home/username/) I could compile the HelloWorld.java file using the command:
javac HelloWorld.java
Now we've got a HelloWorld.class, now what do we do with it?
So now we need to make a folder called classes. This folder needs to be in public_html/WEB-INF/. All of your servlet classes go in here, so copy the compiled HelloWorld.class file into public_html/WEB-INF/classes/.
At this point you should have the files/folders:
/home/username/public_html/ /home/username/public_html/WEB-INF/ /home/username/public_html/WEB-INF/classes/ /home/username/public_html/WEB-INF/classes/HelloWorld.class
Tomcat needs to look for servlets in a special WEB-INF folder. You should create this in your public_html folder.
The WEB-INF folder needs to contain a web.xml file which tells Tomcat where and how to access the servlet.
For this howto, we can use this web.xml file:
<web-app> <servlet> <servlet-name>Hello World</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello World</servlet-name> <url-pattern>/servlet/HelloWorld</url-pattern> </servlet-mapping> </web-app>
XML tag name | Purpose |
---|---|
servlet | This defines the servlet, you can set a name and the classfile to be associated with that name |
servlet-mapping | This maps a URL to a servlet using the servlet's name (that you defined in <servlet>) |
servlet-name | An arbitrary name to define your servlet (must be consistent throughout the entire web.xml) |
servlet-class | The name of the class file, if your class is called 'HelloWorld.class', you will use 'HelloWorld' |
url-pattern | The path portion of the URL to access your servlet. If you want to access your servlet at 'http://students.cs.ndsu.nodak.edu/~username/servlet/HelloWorld', then this will be '/servlet/HelloWorld' |
This file defines a servlet called Hello World, tells Tomcat to use the class HelloWorld and says that it will be accessed by the URL /servlet/HelloWorld. The full URL in this case will be: http://students.cs.ndsu.nodak.edu/~username/servlet/HelloWorld
You can copy this and use this web.xml in your servlet, just change the values to match your servlet. Servlet-name can be any name of your choosing, servlet-class needs to be the package and class name of the class you want to use, and url-pattern defines which URL you want to use to access the servlet.
This web.xml file needs to be placed at public_html/WEB-INF/web.xml for Tomcat to see it. So make the web.xml file and use the example above
The files/folders we should have now look like:
/home/username/public_html/ /home/username/public_html/WEB-INF/ /home/username/public_html/WEB-INF/web.xml /home/username/public_html/WEB-INF/classes/ /home/username/public_html/WEB-INF/classes/HelloWorld.class
You should check out http://students.cs.ndsu.nodak.edu/~username/servlet/HelloWorld, replacing “username” with your actual username. If this doesn't work, double check the steps above. If everything looks fine and it doesn't work after 5 minutes, then Tomcat did not load your servlet correctly. Send me an email and I can investigate.