Servlet 学习笔记1:Servlet基本结构

声明:此系列资料来源于网络。

Servlet基本结构

下面的代码显示了一个简单Servlet的基本结构。该Servlet处理的是GET请求。 

Servlet结构示例
package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class Hello extends HttpServlet {
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        
//使用request读取和请求有关的信息(比如Cookies)和表单数据 
        
//使用response指定HTTP应答状态代码和应答头(比如指定内容类型,设置Cookie) 

        PrintWriter out 
= response.getWriter();
        
// 使用 "out"把应答内容发送到浏览器
    }
}

 

如果某个类要成为Servlet,则它应该从HttpServlet 继承,根据数据是通过GET还是POST发送,覆盖doGetdoPost方法之一或全部。doGetdoPost方法都有两个参数,分别为HttpServletRequest 类型和HttpServletResponse 类型。HttpServletRequest提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等等。HttpServletResponse除了提供用于指定HTTP应答状态(200404等)、应答头(Content-TypeSet-Cookie等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter 。对于简单的Servlet来说,它的大部分工作是通过println语句生成向客户端发送的页面。 

  注意doGetdoPost抛出两个异常,因此你必须在声明中包含它们。另外,你还必须导入java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)以及javax.servlet.http包(要用到HttpServletRequest类和HttpServletResponse类)。 

  最后,doGetdoPost这两个方法是由service方法调用的,有时你可能需要直接覆盖service方法,比如Servlet要处理GETPOST两种请求时。 

输出纯文本的简单Servlet 

  下面是一个输出纯文本的简单Servlet 

输出纯文本的简单Servlet
package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class Hello extends HttpServlet {
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        response.setContentType(
"text/html");
        PrintWriter out 
= response.getWriter();
        out.print(
" Hello ");
    }
}


输出HTMLServlet 

  大多数Servlet都输出HTML,而不象上例一样输出纯文本。要输出HTML还有两个额外的步骤要做:告诉浏览器接下来发送的是HTML;修改println语句构造出合法的HTML页面。 

  第一步通过设置Content-Type(内容类型)应答头完成。一般地,应答头可以通过HttpServletResponsesetHeader方法设置,但由于设置内容类型是一个很频繁的操作,因此Servlet API提供了一个专用的方法setContentType。注意设置应答头应该在通过PrintWriter发送内容之前进行。下面是一个实例:

 

输出HTML的Servlet

package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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


public class HelloWWW extends HttpServlet {
    
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        response.setContentType(
"text/html");
        PrintWriter out 
= response.getWriter();
        out
                .println(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println(
"  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println(
"  <BODY>");
        out.print(
"    This is ");
        out.print(
this.getClass());
        out.println(
", using the GET method");
        out.println(
"  </BODY>");
        out.println(
"</HTML>");
        out.flush();
        out.close();
    }
}

 

HTML工具函数


下面的Java方法只接受页面标题为参数,然后输出页面的DOCTYPE、HEAD、TITLE部分。清单如下:

工具函数
package com.test.servlet;

public class ServletUtilities {
    
public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";

    
public static String headWithTitle(String title) {
        
return (DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n");
    }

    
// 其他工具函数的代码在本文后面介绍
}
posted @ 2009-06-03 14:30  因是因非  阅读(1352)  评论(0编辑  收藏  举报