Java socket多线程实现一个简单的tomcat

avatar 2017年08月30日19:22:13 6 2886 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
今天老师让我们十分钟实现一个简单版的 Tomcat,需求很简单,用户访问 localhost:8080,能向后台发起请求。后台通过 socket 监听,并返回一个 html 页面内容给他就行,因为时间有限,只写了一个简单的类。
  1. import java.io.*;
  2. import java.net.ServerSocket;
  3. import java.net.Socket;
  4. /**
  5.  * 服务器端
  6.  *
  7.  * @author 言曌
  8.  * @date 2017-08-30 14:31
  9.  */
  10. public class TomcatServer {
  11.     public static void main(String[] args) throws Exception {
  12.         ServerSocket server = new ServerSocket(8080);
  13.         // (1) 接收新连接线程
  14.         while (true) {
  15.             try {
  16.                 // (1) 阻塞方法获取新的连接
  17.                 Socket socket = server.accept();
  18.                 // (2) 每一个新的连接都创建一个线程,负责读取数据
  19.                 new Thread(() -> {
  20.                     try {
  21.                         System.out.println("创建了新的线程:"+Thread.currentThread().getName());
  22.                         InputStreamReader r = new InputStreamReader(socket.getInputStream());
  23.                         BufferedReader br = new BufferedReader(r);
  24.                         String readLine = br.readLine();
  25.                         System.out.println("获取到数据:");
  26.                         System.out.println("====================================================》");
  27.                         while (readLine != null && !readLine.equals("")) {
  28.                             System.out.println(readLine);
  29.                             readLine = br.readLine();
  30.                         }
  31.                         String html = "http/1.1 200 ok\n\n" + readFromFile("test.html");
  32.                         PrintWriter pw = new PrintWriter(socket.getOutputStream());
  33.                         pw.println(html);
  34.                         pw.close();
  35.                     } catch (IOException e) {
  36.                     }
  37.                 }).start();
  38.             } catch (IOException e) {
  39.             }
  40.         }
  41.     }
  42.     public static String readFromFile(String filename) {
  43.         StringBuffer sb = new StringBuffer();
  44.         try {
  45.             BufferedReader br = new BufferedReader(new FileReader("/Users/liuyanzhao/sell/Demo/src/" + filename));
  46.             String temp = null;
  47.             while ((temp = br.readLine()) != null) {
  48.                 sb.append(temp + "\r\n");
  49.             }
  50. //            System.out.println(sb);
  51.         } catch (FileNotFoundException e) {
  52.             e.printStackTrace();
  53.         } catch (IOException e) {
  54.             e.printStackTrace();
  55.         }
  56.         return sb.toString();
  57.     }
  58. }

src目录放一个 text.html
  1. <!doctype html>
  2. <html lang="en">
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <meta name="viewport"
  6.               content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7.         <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8.         <title>Document</title>
  9.     </head>
  10.     <body>
  11.         <p>XXXXXXXXXX</p>
  12.         <p>XXXXXXXXXXXXXXXXXXXX</p>
  13.         <p>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</p>
  14.         <p>这是 test.html 内容</p>
  15.     </body>
  16. </html>



运行结果如下
  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0