| Lesson 8 | Generating a form in a servlet |
| Objective | Write a servlet doGet() that generates a form. |
Generating a Form in a Servlet
Writing a doGet() method that generates the HTML for a form is not much different than writing a doGet() method that generates any other kind of HTML. There is one little trick, though: the ACTION parameter on the form should be the very same servlet that generated the form.
You could hard-code this, but then whenever your servlet changed name or location, you would have to remember to change the ACTION parameter too. It was better to use a method of the HttpServletRequest class called getServletPath(). As you might imagine, this method returns a string that you can use in the ACTION parameter of the form you generate.
A typical doGet()
Here is the way a typical doGet() (that generates a form) looks:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
// generate the start of the page in ordinary HTML
String url = req.getServletPath();
out.println("<form method=POST action=\""+ url+ "\">");
// generate the INPUT and other tags within the form
out.println("</form></body></html>");
}
The backslash (\) characters in the println() statement for the FORM tag deserve a mention.
The ACTION attribute should be surrounded by double quotes, like this:
<FORM METHOD=POST ACTION="http://localhost:8080/servlet/Form">
In order to put a double quote into a literal string, you must excape it with the backslash (\) character.
This tells the compiler that the " character is not the end of the string you are typing, but rather a character you want to use in the string.
Learn how to code doPost() in the next lesson.