servlet工作原理_JAVA技术篇

时间:2024-12-27 01:59:00 来源:作文网 作者:管理员

  一个请求发送到服务器后,容器通过web.xml配置文件找到对象的Servlet,通过反射创建实例,调用里面的service方法。

  service方法在GenericServlet里面是一个抽象方法,是到HttpServlet里面来实现的。其实质是通过发送上来的请求,孝作文取到请求行里面的请求方法类型,判断是什么类型的请求,在service方法里面去调对应的doXXX方法 。

  service方法在GenericServlet里面是一个抽象方法,是到httpServlet里面来实现的。其实质是通过发送上来的请求,取到请求行里面的请求方法类型,

http方法     请求的URL          HTTP版本
GET      /lovobook/index.html           HttP/1.1 
Host:127.0.0.1:80   这一行以下的全属于请求头:
User-Agent:Mozilla/5.0
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=
0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept=Language:zh-cn,zh;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive:300

HTTP请求方法类型:GET HEAD POST PUT DELETE OPTIONS TRACE

HttpServlet处理方法:doGet doHead doPost doPut doDelete doOptions doTrace;

HttpServlet实现采用的是模板方法模式,它在service方法里面调用自己类里面的doXXX方法,只是写的一个模板在哪个地方。所有的处理都必须在子类里面去实现。。

其代码大致往下:

protected void service

  throws ServletException, IOException

  {

  //取得请求方法类型,如:GET,这个是容器去做的,做了些处理,变成了METHOD_GET。

  String method = req.getMethod;

  if ) {

    long lastModified = getLastModified;
    if {
    // servlet doesn't support if-modified-since, no reason
    // to go through further expensive logic
    //这个是调用本类的doGet,但在我们使用时,这个方法都被重写了。
    doGet;
    } else {
    long ifModifiedSince = req.getDateHeader;
    if ) {
      // If the servlet mod time is later, call doGet
          // Round down to the nearest second for a proper compare
          // A ifModifiedSince of -1 will always be less
      maybeSetLastModified;
      doGet;
    } else {
      resp.setStatus;
    }
    }

  } else if ) {
    long lastModified = getLastModified;
    maybeSetLastModified;
    doHead;

  } else if ) {
    doPost;
    
  } else if ) {
    doPut;  
    
  } else if ) {
    doDelete;
    
  } else if ) {
    doOptions;
    
  } else if ) {
    doTrace;
    
  } else {
    //
    // Note that this means NO servlet supports whatever
    // method was requested, anywhere on this server.
    //

    String errMsg = lStrings.getString;
    Object[] errArgs = new Object[1];
    errArgs[0] = method;
    errMsg = MessageFormat.format;
    
    resp.sendError;
  }
}


热门排行: 2016拜年词 好词