java服务器

 

Java服务器具有多种功能,以下是一些主要的功能:

托管和管理Web应用程序:服务器充当Web应用程序的主机,负责托管和管理应用程序的生命周期。它提供了一个运行环境,使得开发人员能够将应用程序部署到服务器上,并处理来自客户端的请求。处理客户端请求:服务器接收来自客户端的请求,并根据请求的类型和内容提供相应的响应。它可以处理Web页面、数据查询、文件上传等各种类型的请求,并返回相应的结果给客户端。

 

  1. ServerSocket ss = null;:声明一个名为ssServerSocket对象,初始化为null
  2. try {:开始一个异常处理块,用于处理可能出现的IO异常。
  3. ss = new ServerSocket(7777);:创建一个新的ServerSocket对象,并将其端口号设置为7777。这意味着服务器将在这个端口上监听任何传入的连接请求。
  4. Socket socket = ss.accept();:使用前面创建的ServerSocket对象等待客户端的连接请求。一旦有客户端连接,就会创建一个新的Socket对象,并将这个连接打开。
  5. int len = 0;:声明一个整型变量len并初始化为0,后面用来保存从输入流中读取的字节数。
  6. byte[] bytes = new byte[1024];:创建一个字节数组bytes,长度为1024。这个数组用于保存从输入流中读取的字节。
  7. len = socket.getInputStream().read(bytes);:从客户端的输入流中读取数据,并保存读取的字节数到变量len中。
  8. String req = new String(bytes, 0, len, "utf-8");:将读取的字节数据转换为UTF-8编码的字符串。这个字符串包含了客户端发送的HTTP请求。
  9. String req1 = req.split("\r\n")[0].split(" ")[1];:从上一步获取的HTTP请求字符串中解析出请求的资源路径。这是通过按照"\r\n"分割字符串,然后选择第一个数组元素,再按照空格进行分割并选择第二个数组元素来实现的。
  10. String pathName = req1;:将解析出的资源路径保存到变量pathName中。
  11. FileInputStream fis = new FileInputStream("webapp" + pathName);:创建一个新的FileInputStream对象,用于读取与pathName对应的文件。假设"webapp"是index.html文件所在的文件夹。
  12. OutputStream os = socket.getOutputStream();:获取与客户端连接对应的输出流。
  13. 通过输出流发送HTTP协议头信息,包括HTTP协议版本、状态码和响应头部字段。
  14. 计算要发送的文件的大小,并通过输出流发送Content-Length响应头部字段。
  15. 通过输出流发送一个空行,表示响应头部的结束。
  16. 进入一个循环,将文件内容读取到字节数组中,并通过输出流发送给客户端。
  17. catch (IOException e) { throw new RuntimeException(e); }:捕获可能出现的IO异常,并抛出一个运行时异常。

总的来说,这段代码的作用是实现一个简单的HTTP服务器,接收HTTP请求,并返回对应的HTTP响应。在这个例子中,服务器只是将从磁盘中读取的index.html文件原样返回给客户端。

public class Main {
    public static void main(String[] args) {
        ServerSocket ss= null;
        try {
            ss = new ServerSocket(7777);
            Socket socket=ss.accept();
            int len=0;
            byte[]bytes=new byte[1024];
            len=socket.getInputStream().read(bytes);
            String req=new String(bytes,0,len,"utf-8");
            String req1=req.split("\r\n")[0].split(" ")[1];
            String pathName=req1;//已知客户端的意图是获取index.html



//                读取磁盘中的index.html文件,并且通过socket发送给浏览器
            FileInputStream fis=new FileInputStream("webapp"+pathName);

            //将本地读取的文件发送给客户端
            OutputStream os=socket.getOutputStream();

            //这个时候还不能直接将数据响应给客户端,服务器和浏览器交互的时候,还需要协议
            os.write("HTTP /1.1 200 ok\r\n".getBytes("utf-8"));
            os.write("Content-Type:text/html\r\n".getBytes("utf-8"));
            File file=new File("webapp"+pathName);
            os.write(("Content-Length:" + file.length() + "\r\n").getBytes("utf-8"));

            os.write("\r\n".getBytes("utf-8"));



            while ((len=fis.read(bytes))!=-1){
                os.write(bytes,0,len);
            }


        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值