首页 > 开发 > 综合 > 正文

基于Jave的Web服务工作机制(4)

2024-07-21 02:14:19
字体:
来源:转载
供稿:网友
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 在下面的段落中,让我们来看看这三个类吧。

     

      httpserver 类

      httpserver类表示一个web服务器,且在公共静态目录web_root及它的子目录中能为找到的那些静态资源而服务。web_root用以下方式初始化:

      public static final string web_root =
      system.getproperty("user.dir") + file.separator + "webroot";

      这段代码指明了一个包含静态资源的webroot目录,这些资源可用来测试该应用。在该目录中也能找到servlet容器。

      要请求一个静态资源,在浏览器中输入如下地址或url:

      http://machinename:port/staticresource
      machinename 是运行这个应用的计算机名或者ip地址。如果你的浏览器是在同一台机器上,可以使用localhost作为机器名。端口是8080。staticresource是请求的文件夹名,它必须位于web-root目录中。

      必然,如果你使用同一个计算机来测试应用,你想向httpserver请求发送一个index.html 文件,那么使用如下url:

      http://localhost:8080/index.html

      想要停止服务器,可以通过发送一个shutdown命令。该命令是被httpserver 类中的静态shutdown_command变量所定义:

      private static final string shutdown_command = "/shutdown";
      因此,要停止服务,你可以使用命令:

      http://localhost:8080/shutdown
      现在让我们来看看前面提到的await方法。下面一个程序清单给出了解释。

      listing 1.1. the httpserver class' await method

      public void await() {
      serversocket serversocket = null;
      int port = 8080;
      try {
        serversocket = new serversocket(port, 1,
        inetaddress.getbyname("127.0.0.1"));
      }
      catch (ioexception e) {
        e.printstacktrace();
        system.exit(1);
      }

      // loop waiting for a request
      while (!shutdown) {
        socket socket = null;
        inputstream input = null;
        outputstream output = null;
        try {
          socket = serversocket.accept();
          input = socket.getinputstream();
          output = socket.getoutputstream();

          // create request object and parse
          request request = new request(input);
          request.parse();

          // create response object
          response response = new response(output);
          response.setrequest(request);
          response.sendstaticresource();

          // close the socket
          socket.close();

          //check if the previous uri is a shutdown command
          shutdown = request.geturi().equals(shutdown_command);
        }
        catch (exception e) {
          e.printstacktrace();
          continue;
        }
      }
    }

      await方法是通过创建一个serversocket实例而开始的。然后它进入了一个while循环:

      serversocket = new serversocket(
      port, 1, inetaddress.getbyname("127.0.0.1"));

      ...

      // loop waiting for a request
      while (!shutdown) {
        ...
      }

      socket = serversocket.accept();
      在收到一个请求后,await方法从accept方法返回的socket实例中获得java.io.inputstream 和java.io.outputstream对象。

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表