java,php,asp.net,linux,javascript,mysql,mssql,oracle,编程

web服务器

转载请注明:http://www.pmjava.com/Article/ShowInfo.asp?ID=56634
Web服务器说白了就是提供web应用的基础功能
  1. 它是遵从http协议的一个服务器端程序,按照http提供基本的请求解析、应答处理等
  2. 它提供了供web程序运行的最直接的环境,比如tomcat就是一个servlet的容器
  3. 它提供了对线程的管理,包括创建,调度,撤销等
  4. 它提供请求地址与具体地址的对应处理
    。。。
  B/S是在C/S架构基础上发展起来的一种技术,相比C/S,B/S主要有以下几点的不同,这里不比较哪个优越,况且优越与否是和具体环境关联的,单独不能说哪个好,
  1. B/S是遵从http协议的,即采用的是标准的协议,
  2. B/S的客户端已开发好(就遵从http协议的浏览器),不需要程序员再开发
  3. B/S的服务器端业界也提供了基础功能的实现(各种web容器)

  一个C/S示例(多线程),希望在它的基础上能更好的理解web服务器
  1. 客户端程序:MultiTalkClient.java

  import java.io.*;
  import java.net.*;
  public class MultiTalkClient {
   public static void main(String args[]) {
    try{
      Socket socket=new Socket("127.0.0.1",4700);
      //向本机的4700端口发出客户请求
      BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
      //由系统标准输入设备构造BufferedReader对象
      PrintWriter os=new PrintWriter(socket.getOutputStream());
      //由Socket对象得到输出流,并构造PrintWriter对象
      BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
      //由Socket对象得到输入流,并构造相应的BufferedReader对象
      String readline;
      readline=sin.readLine(); //从系统标准输入读入一字符串
      while(!readline.equals("bye")){
      //若从标准输入读入的字符串为 "bye"则停止循环
        os.println(readline);
        //将从系统标准输入读入的字符串输出到Server
        os.flush();
        //刷新输出流,使Server马上收到该字符串
        System.out.println("Client:"+readline);
        //在系统标准输出上打印读入的字符串
        System.out.println("Server:"+is.readLine());
        //从Server读入一字符串,并打印到标准输出上
        readline=sin.readLine();
        //从系统标准输入读入一字符串
      } //继续循环
      os.close(); //关闭Socket输出流
      is.close(); //关闭Socket输入流
      socket.close(); //关闭Socket
    }catch(Exception e) {
      System.out.println("Error"+e); //出错,则打印出错信息
    }
  }
}

 2. 服务器端程序: MultiTalkServer.java

  import java.io.*;
  import java.net.*;
  import ServerThread;
  public class MultiTalkServer{
   static int clientnum=0; //静态成员变量,记录当前客户的个数
   public static void main(String args[]) throws IOException {
    ServerSocket serverSocket=null;
    boolean listening=true;
    try{
      serverSocket=new ServerSocket(4700);
      //创建一个ServerSocket在端口4700监听客户请求
    }catch(IOException e) {
      System.out.println("Could not listen on port:4700.");
      //出错,打印出错信息
      System.exit(-1); //退出
    }
    while(listening){ //永远循环监听
      new ServerThread(serverSocket.accept(),clientnum).start();
      //监听到客户请求,根据得到的Socket对象和
       客户计数创建服务线程,并启动之
      clientnum++; //增加客户计数
    }
    serverSocket.close(); //关闭ServerSocket
  }
}
 3. 程序ServerThread.java

  import java.io.*;
  import java.net.*;
  public class ServerThread extends Thread{
   Socket socket=null; //保存与本线程相关的Socket对象
   int clientnum; //保存本进程的客户计数
   public ServerThread(Socket socket,int num) { //构造函数
    this.socket=socket; //初始化socket变量
    clientnum=num+1; //初始化clientnum变量
   }
   public void run() { //线程主体
    try{
      String line;
      BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
  //由Socket对象得到输入流,并构造相应的BufferedReader对象
      PrintWriter os=newPrintWriter(socket.getOutputStream());
      //由Socket对象得到输出流,并构造PrintWriter对象
      BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
      //由系统标准输入设备构造BufferedReader对象
      System.out.println("Client:"+ clientnum +is.readLine());
      //在标准输出上打印从客户端读入的字符串
      line=sin.readLine();
      //从标准输入读入一字符串
      while(!line.equals("bye")){
      //如果该字符串为 "bye",则停止循环
        os.println(line);
        //向客户端输出该字符串
        os.flush();
        //刷新输出流,使Client马上收到该字符串
        System.out.println("Server:"+line);
        //在系统标准输出上打印该字符串
        System.out.println("Client:"+ clientnum +is.readLine());
        //从Client读入一字符串,并打印到标准输出上
        line=sin.readLine();
        //从系统标准输入读入一字符串
      } //继续循环
      os.close(); //关闭Socket输出流
      is.close(); //关闭Socket输入流
      socket.close(); //关闭Socket
      server.close(); //关闭ServerSocket
     }catch(Exception e){
      System.out.println("Error:"+e);
      //出错,打印出错信息
     }
   }
 }
19.资源池的理解
  1.资源池引入的目的(好处)
        提高性能
  2.资源池运作机制
        由资源池管理器提供一定数目的目标资源,当有请求该资源时,资源池分配给一个,然后给该资源标识为忙,标示为忙的资源不能再被分配使用,当某一个资源使用完后,资源池把相关的资源的忙标示清除掉,以示该资源可以再被下一个请求使用
  3.资源池常有的参数
        1.初始资源的数目:资源池启动时,一次建立的资源数目,资源池最少要保证在这个数目上
        2.最大资源的数目:当请求的资源超出这个数目,就等待
  4.常见的资源池
        1.数据库连接池
        2.web容器中的request,response对象池
        3.web容器中的线程池

posted on 2009-06-10 21:56 rrong_m 阅读(117) 评论(0)  编辑  收藏

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

随笔档案

文章分类

文章档案

java编程

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜