解决方案 »

  1.   

    servlet  这个是容器嘛?
    Servlet是sun公司提供的一门用于开发动态web资源的技术。Sun公司在其API中提供了一个servlet接口,用户若想使用Java程序开发一个动态web资源,只需编写一个servlet接口的实现类,并把这个类部署到web服务器中,就算开发好了一个动态web资源。按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。随便写一个小程序把客户端发来的请求转发回去这也叫服务器?我的理解:是的
    下面是Servlet容器服务器原理 简易实现代码,当然服务器肯定没这么简单,只是帮助理解..
    package cn.itcast.web1;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;/**
     * 静态的网页服务器
     * 
     * @author APPle
     * 
     */
    public class StaticWebServer { public static void main(String[] args) {
    int port = 8888;
    try {
    // 开启服务器,等待客户端的链接
    ServerSocket ss = new ServerSocket(port);
    System.out.println("服务器已经启动,正在监听" + port + "端口..."); // 不断地接收客户端的请求
    while (true) { final Socket socket = ss.accept(); // 用多线程可以处理多个客户端的请求
    new Thread() {
    public void run() {
    try {
    // 接收客户端发送过来的信息
    InputStream in2 = socket.getInputStream();
    for (int b = -1; (b = in2.read()) != -1;) {
    System.out.print((char) b);
    }
    BufferedReader br = new BufferedReader(
    new InputStreamReader(
    socket.getInputStream())); // 请求行
    String requestLine = br.readLine();
    // GET /a.html HTTP/1.1
    // GET /b.html HTTP/1.1
    // GET /news/aaa.html HTTP/1.1
    // 客户端请求资源的名称
    String request = requestLine.split(" ")[1]; String base = "e:/myweb"; // 请求资源在本机上路径
    String resPath = base + request; // 如果请求根目录的时候,返回一个默认页面给客户端
    if (request.equals("/")) {
    resPath = base + "/index.html";
    } // 当找不到资源的时候,给客户端返回一个友好的404页面
    File resFile = new File(resPath);
    if (!resFile.exists()) {
    resPath = base + "/404.html";
    } // 把数据发送到网络的另外一端(客户端)
    OutputStream out = socket.getOutputStream();
    InputStream in = new FileInputStream(resPath); for (int b = -1; (b = in.read()) != -1;) {
    out.write(b);
    }
    in.close();
    socket.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }.start();
    } } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  2.   


    谢谢你不过我主要是想问服务器端的各种框架是个什么关系啊
    像war包能不能部署非servlet的应用?有入口函数main的那种?
      

  3.   

    楼主,war包是包含web应用的一个包后缀名,servlet不是部署在war包上,servlet是一种java技术,就像你的socket一样,war包是包含了web程序的一个包,其中可以有servlet,可以有struts,可以有spring,可以有任何能在容器中运行的代码,只要按照标准目录来建立。现在回过头来,你是想把socket程序部署到sae上面,也有办法,你自己写一个jsp页面,调用后台的servlet,servlet再调用你那个socket程序,这样就可以了。