疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Servlet的编写过程


 

 
最简单的Servlet类就是继承HttpServlet类的空类,如下面代码如示:
 
public class EmptyServlet extends HttpServlet
 
{
 
}
在访问EmptyServlet时会显示如图4.3所示的异常信息。
 
 03
 
图4.3  访问EmptyServlet抛出的异常
 
        从错误信息可以看出,抛出异常的原因是由于EmptyServlet不支持GET方法所导致。实际上,在HttpServlet类中已经默认实现了doGet、doPost等方法,在默认实现代码中,都会抛出一个不支持该方法的异常(从4.2.1节给出的doGet方法的实现代码就可以看出这一点)。如果Servlet程序不覆盖HttpServlet类中相应的doXxx方法,那么就无法使用相应的HTTP方法来访问Servlet。
 
要想让Servlet支持某一个HTTP方法,就必须覆盖相应的HttpServlet类的doXxx方法。如在客户端要使用GET方法访问Servlet,就要在Servlet中覆盖doGet方法,如下面代码如示:
 
public class DoGetServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response
throws ServletException, IOException
{
        // 处理GET请求的代码
}
}
如果要处理POST或其他的请求,方法和处理GET请求类似,都需要覆盖相应的doXxx方法。
 
要让Servlet支持所有的HTTP方法(处理不同HTTP方法的代码相同)一般有如下两种方法:
 
1.  将处理HTTP方法的代码写在一个方法中,或是写在其中一个doXxx方法中,然后在其他的doXxx方法中调用这个方法,如下面的代码所示:
 
public class MyServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response
throws ServletException, IOException
{
        // 处理GET请求的代码
}
public void doPost(HttpServletRequest request, HttpServletResponse response
throws ServletException, IOException
{
        doGet(request, response);           //  调用doGet方法
}   
... ...
}
2.  直接覆盖HttpServlet类中的service方法。如下面的代码所示:
 
public class MyServlet extends HttpServlet
{
public void service(HttpServletRequest request, HttpServletResponse response)
 
throws ServletException, IOException
    {
// 处理所有HTTP请求的代码
    }
}
从上面两种方法可以看出,第二种方法更方便。如果在Servlet中要支持所有的HTTP请求,建议使用第二种方法处理。
 
除了doXxx外,GenericServlet类中还有两个方法需要注意一下:
 
1.  init方法
 
这个方法的完整定义如下:
 
public void init(ServletConfig config) throws ServletException
        这个方法在建立Servlet对象时调用,用于为Servlet做一些初始化的工作。其中config参数可以读取Servlet的配置信息(就是web.xml中的信息)。
 
2.  destroy方法
 
这个方法的完整定义如下:
 
public void destroy()
当Servlet对象被销毁时destroy方法被调用。这个方法主要用来释放一些被Servlet占用的资源。
 
在编写完Servlet后,需要使用<Web工程>WEB-INFweb.xml文件对Servlet进行配置才能运行。主要是将Servlet类和Web访问路径相对应。详细的配置过程请参阅4.2.1节中的内容。