- Hour 3: Introduction to Servlets
- How JSPs Become Servlets
- The Basic Structure of an HttpServlet
- Translating a Simple JSP into a Servlet
- Summary
- Q&A
- Workshop
The Basic Structure of an HttpServlet
There are several methods that you commonly override when you write an HttpServlet. These methods are
void init(ServletConfig sc) throws ServletException; void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
You can see where these methods fit into the lifecycle of the JSP/Servlet, if you refer back to Figure 3.1. Recall the init(...) method is used for initialization purposes. You will override this method to handle your own particular initialization of the Servlet. The service(...) method can be overridden to handle your business logic, if your business logic does not care if the request came over POST or GET. If your logic differs depending if the HTML form is sent by POST or GET, then you will want to override the doPost(...) or doGet(...) methods.
The init(...) Method
You saw in the lifecycle of a JSP/Servlet that the init(...) method is called to initialize your JSP/Servlet. The syntax of the init(...) method is:
void init(ServletConfig sc) throws ServletException;
The parameter that is passed into the init(...) method is a ServletConfig object. The ServletConfig object gives you access to initial parameters. Initial parameters allow you to specify global variables for your Servlet. Many times these parameters are used to specify the maximum or minimum number for your Servlet. For example, if you have a banking account, there is typically a minimum amount required to maintain the account. The initial parameter could be set to this minimum number and then your Servlet could access it to check the object's value. Hour 13, "Configuring and Initializing JSPs," shows you how to use the ServletConfig object in your JSPs.
The service(...) Method
The service(...) method can be used to implement your business logic. The syntax of the service(...) method is:
void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
Typically a Servlet developer overrides the doPost(...) or doGet(...) methods of a Servlet, assuming the Servlet contains different logic, depending on the type of request. However in practice, the same code is often written for both methods. You could just override the service(...) method, rather than write the code twice.
The type of business logic your Servlet is executing depends on your application. Consider an order processing example, where the user fills in an HTML form that accepts their name, phone number, address, and various other personal information. The user also fills in the products he wants to buy. The product information could contain the product ID and the quantity the user wants to purchase. The business logic in the Servlet could do several things. Maybe it checks to see if the client is already in the database and if not adds them. It could also check to see if the product is in stock. If it is in stock, then it subtracts the amount the client wants from inventory and sets up the shipping information for the order.
The parameters that are passed in are HttpServletRequest and HttpServletResponse objects. These objects allow you to parse the request coming in and generate the response going back to the client. Hour 10, "Processing Requests from the User," and Hour 11, "Generating a Dynamic Response for the User," show you how to use these objects in your JSP.
The doPost(...) and doGet(...) Methods
The doPost(...) and the doGet(...) methods handle requests from the appropriate HTML form and execute your business logic. The syntax of the doPost(...)and the doGet(...)methods are:
void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
An HTML form has an attribute called "METHOD" that defines how the data will be sent to the server. The GET method appends the data to the URL and sends it to the server that way. The POST method bundles the data in a packet and sends the packet of data to the server. Listing 3.1 is an HTML document that contains two forms. One of the HTML forms uses GET and the other form uses POST to send the data to the server.
Listing 3.1 An HTML Document Containing Two Forms (ExampleForms.html)
1: <HTML>
2: <HEAD><TITLE>Form Examples</TITLE></HEAD>
3: <BODY>
4: <CENTER>
5: <FORM NAME="getForm" ACTION="SomeJSP.jsp" METHOD="GET">
6: Name:
7: <INPUT TYPE="text" NAME="txtName" VALUE="Jon">
8: <BR>
9: Password:
10: <INPUT TYPE="password" NAME="txtPassword" Value="">
11: <BR>
12: <INPUT TYPE="submit" NAME="btnSubmitGetForm" Value="Submit GET Form">
13: </FORM>
14: <BR>
15: <BR>
16: <FORM NAME="postForm" ACTION="SomeJSP.jsp" METHOD="POST">
17: Name:
18: <INPUT TYPE="text" NAME="txtName" VALUE="Katherine">
19: <BR>
20: Please Select Your Favorite Ice Cream Flavors:
21: <BR>
22: <SELECT NAME="sltIceCream" SIZE="5" MULTIPLE>
23: <OPTION>Mint Chocolate Chip</OPTION>
24: <OPTION>Rocky Road</OPTION>
25: <OPTION>Strawberry Cheesecake</OPTION>
26: <OPTION>Chocolate</OPTION>
27: <OPTION>Vanilla</OPTION>
28: </SELECT>
29: <BR>
30: <INPUT TYPE="submit" NAME="btnSubmitPostForm" Value="Submit POST Form">
31: </FORM>
32: </CENTER>
33: </BODY>
34: </HTML>
The output of the HTML document in Listing 3.1 is shown in Figure 3.3.
Figure 3.3 The HTML documents with two forms.
The parameters that are passed in to the doXXX(...) methods are the same as the service(...) method: HttpServletRequest and HttpServletResponse objects. Hours 10 and 11 show you how to use these objects in your JSP.