Hello World Servlet Tutorial

From Resin 4.0 Wiki

(Difference between revisions)
Jump to: navigation, search
Line 22: Line 22:
  
 
* WEB-INF/classes/test/HelloServlet.java
 
* WEB-INF/classes/test/HelloServlet.java
* WEB-INF/web.xml
 
  
There are two files that you will create for the tutorial: a Java class and an XML file. The Java class implements the  
+
There is one file that you need to create for the tutorial, the Java class implements the  
servlet itself. The XML file tells the servlet engine which URLs go to the servlet.
+
servlet itself.  
  
 
= Creating the Servlet class =
 
= Creating the Servlet class =
Line 38: Line 37:
 
   import java.io.*;
 
   import java.io.*;
 
   
 
   
 +
  import javax.servlet.annotation.*;
 
   import javax.servlet.http.*;
 
   import javax.servlet.http.*;
 
   import javax.servlet.*;
 
   import javax.servlet.*;
 
   
 
   
 +
  @WebServlet("/hello")
 
   public class HelloServlet extends HttpServlet {
 
   public class HelloServlet extends HttpServlet {
 
     public void doGet (HttpServletRequest req,
 
     public void doGet (HttpServletRequest req,
Line 57: Line 58:
 
you're executing a servlet class, not looking at a page.
 
you're executing a servlet class, not looking at a page.
 
The ''/hello'' URL is configured for the hello, world servlet below.
 
The ''/hello'' URL is configured for the hello, world servlet below.
 
== WEB-INF/web.xml Configuration ==
 
 
Configuration for the servlet is in the ''WEB-INF/web.xml'' file.
 
 
The servlet needs to be configured and it needs to be mapped
 
to a URL.  The <servlet> tag
 
configures the servlet.  In our simple example, we just need to
 
specify the class name for the servlet.
 
 
The <servlet-mapping> tag specifies the URLs which will invoke the servlet.  In our case,
 
the ''/hello'' URL invokes the servlet.
 
 
=== WEB-INF/web.xml ===
 
  &lt;web-app xmlns=<nowiki>"http://java.sun.com/xml/ns/j2ee"</nowiki> version="2.4"
 
          xmlns:xsi=<nowiki>"http://www.w3.org/2001/XMLSchema-instance"</nowiki>
 
          xsi:schemaLocation=<nowiki>"http:/java.sun.com/dtd/web-app_2_3.dtd"</nowiki>>
 
    &lt;servlet>
 
      &lt;servlet-name>hello&lt;/servlet-name>
 
      &lt;servlet-class>test.HelloServlet&lt;/servlet-class>
 
    &lt;/servlet>
 
 
    &lt;servlet-mapping>
 
      &lt;servlet-name>hello&lt;/servlet-name>
 
      &lt;url-pattern>/hello&lt;/url-pattern>
 
    &lt;/servlet-mapping>
 
  &lt;/web-app>
 
 
Resin allows a short cut for the XML configuration in the example above;
 
you can use XML attributes in place of elements.  The
 
Servlet 2.4 standard uses only elements.  So the servlet-mapping
 
configuration following the Servlet 2.4 standard would look like:
 
 
=== WEB-INF/resin-web.xml ===
 
  &lt;web-app xmlns=<nowiki>"http://caucho.com/ns/resin"</nowiki>>
 
    &lt;servlet servlet-name="hello"
 
              servlet-class="test.HelloServlet"/>
 
 
    &lt;servlet-mapping url-pattern="/hello"
 
              servlet-name="test.HelloServlet"/>
 
  &lt;/web-app>
 
 
The two are entirely equivalent.  For larger configurations,
 
using attributes makes the resin.conf or web.xml more readable.
 
 
{|
 
! tag
 
! meaning
 
|-
 
! web-app
 
| Web application top-level tag.
 
|-
 
! servlet
 
| defines the servlet class and gives the servlet a name
 
|-
 
! servlet-mapping
 
| translates the URL to the servlet
 
|}
 
 
The ''<nowiki>xmlns="http://caucho.com/ns/resin"</nowiki>'' lets Resin
 
validate the web.xml configuration.  The validator will catch most
 
errors in the web.xml.
 
  
 
= installing and deploying a servlet application =
 
= installing and deploying a servlet application =

Revision as of 00:00, 29 September 2012

Cookbook-48.png

Servlets are the pure Java solution to handle web requests. Many web application will use servlets instead of JSP and others will use servlets in conjunction with JSP. Experienced JSP programmers use servlets in conjunction with JSP to create clearer and simpler applications. The servlets handle Java processing: form handing, calculation and database queries. JSP formats the results.

REST web-applications will also use servlets. The REST output will typically use XML or JSON instead of HTML, but will use the same servlet container as for web pages.

Servlets belong in WEB-INF/classes. On this machine, the source is in Java source in /var/www/webapps/ROOT/WEB-INF/classes. WEB-INF/classes is the standard location for servlets and other Java classes. Resin automatically reloads and recompiles servlets, beans, and classes placed in WEB-INF/classes. You should make some changes and add errors to become familiar with Resin's recompilation and the error reporting.

Contents

Files in the Tutorial

  • WEB-INF/classes/test/HelloServlet.java

There is one file that you need to create for the tutorial, the Java class implements the servlet itself.

Creating the Servlet class

Create the following servlet in WEB-INF/classes/test/HelloServlet.java with your favorite editor: eclipse, notepad, emacs, vi, or whatever.

WEB-INF/classes/test/HelloServlet.java

 package test;

 import java.io.*;

 import javax.servlet.annotation.*;
 import javax.servlet.http.*;
 import javax.servlet.*;

 @WebServlet("/hello")
 public class HelloServlet extends HttpServlet {
   public void doGet (HttpServletRequest req,
                      HttpServletResponse res)
     throws ServletException, IOException
   {
     PrintWriter out = res.getWriter();

     out.println("Hello, world!");
   }
 }

Now browse the servlet at http://localhost:8080/hello. Resin will automatically compile the servlet for you. Browsing servlets differs from page browsing because you're executing a servlet class, not looking at a page. The /hello URL is configured for the hello, world servlet below.

installing and deploying a servlet application

To test this tutorial, you'll need to have a servlet engine like Resin installed on your computer. The Resin servlet engine download is at http://resin.caucho.com.

installing Resin servlet engine on ubuntu

On ubuntu system, you can install Resin directly with the following three steps:

 unix# add-apt-repository http://resin.caucho.com/download/debian
 unix# apt-get update
 unix# apt-get install resin

The Resin directory for your application will be in /var/www/resin/webapps/ROOT, and the default port will be port 8080, as in this tutorial.

deploying an application

You can also bundle up your application into a .war archive, which is just a zip file with a java ".war" extension that you create with the "jar" command (like zip). You'll deploy the .war archived application using Resin's command-line tool:

 unix> cd myapp; jar -cf ../ROOT.war *
 unix> resinctl deploy ROOT.war

The "deploy" will copy the ROOT.war to the webapps directory and deploy your application. Most servlet applications are bundled into .war files and deployed like this.

Review

  • The servlet is a Java class that handles HTTP web requests by implementing the Servlet interface, usually by extending HttpServlet
  • The servlet classes belong in WEB-INF/classes, or in .jar files in WEB-INF/lib
  • The servlet to URL mapping is configured in WEB-INF/web.xml
  • The servlet doGet method serves a standard HTTP request
  • The servlet text output is generated from ServletResponse.getWriter
  • Servlet applications are usually bundled in *.war files and deployed in webapps directories
  • Applications bundled as war files are deploy using resinctl deploy myapp.war

Programming Patterns in the Servlet Hello World Tutorial

Fractal.png

Since all servlets use the same basic structure as this tutorial, it's a good idea to understand this most basic example completely.

While a cookbook example like the hello, world servlet is primarily useful to get you started, you can use it more effectively by studying the patterns it introduces to develop your programming skills. Expert programmers can recognize a huge number of patterns, which is why they are effective. Beginning programmers only know a few patterns and can't always recognize when the pattern should be used. So although you can just take the cookbook above and work with it, you will gain more benefit from the discussion below. Like all expertise, it's also worth coming back as you learn more.

The fractal diagram on the right shows why patterns are valuable not just as a cookbook, but also for building complex applications. A fractal uses a simple rule or pattern repeated at finer levels of detail. The fractal on the right cuts each box in half. The key insight of fractals is to use the same patterns when you're looking at a high abstraction as when you're looking at the detail. This hello servlet tutorial is at the highest level possible, since it's the entire application, but the principles also apply to details of complex applications.

Servlets are some of the fastest web application, from web servers, to JSON/REST web services, to high-performance websocket mobile messaging applications, web sites, and even fast PHP servers written in Java. For example, the Resin web server uses servlets to implement a web server that's faster than the best C-based web servers, including Apache httpd and nginx. If you understand these tutorials, you'll be on the path to developing the best applications on the internet.

Focus and encapsulation is the key general pattern for server applications, and for most programming. People can only focus on a few ideas at a time, and cannot multitask effectively. You might be able to manage three ideas at a time, but not twenty. To use focus in your programs, each part should have its own job, and it should be ignorant of the details of the internals of other parts. Ignorance is good in programs. Each part should be as ignorant as possible, and should keep its own details hidden from others to avoid distracting them. Encapsulation is the programming principle of keeping the details hidden from other components. The better you understand encapsulation and how to use it effectively, the better your programs will be.


Cookbooks and Tutorials

Personal tools
TOOLBOX
LANGUAGES