Java实现一个简单地实现Servlet容器 | HttpServer服务

实现一个 Servlet 容器

前言

本人已经大三上了,好久没有更新了,现在第 14 周周天,学校最近课程也很少,只剩下一门J2EE开发课程了,大体内容是 Servlet + JSP 技术栈,本来不想花太多精力学习的,奈何又来一个什么软件工程专业实践、实训两门课,现在开始着手准备课设,明年上班去去参加一些比赛和认证才能得到优秀的成绩评分(属于是被绩点绑架了)...

虽然我是个前端爱好者,但是队伍里面后端也没有会的,都是基本零基础,罢了罢了,好好学一学吧(Nest 本人还不会嘤嘤嘤),起码后面学习 Spring、SpringBoot 的时候不会两眼一摸黑吧。

需要说明的是,本文只是一段代码模拟 Servlet 容器的简单实现,没有太多精深的东西,主打一个学习后的记录。如果你要问 J2EE 课程前面的内容记录呢?那我只能说摸鱼嘛懂得都懂,需要用的时候现学现卖了。

废话不多说,现在开始正文

开发环境(都不跟环境有多少关系)

环境:JDK 1.8_371、Maven 3.2.5(3.9.4 肯定也是行的)、Tomcat 8.5.93(Tomcat 9也是可以的),但是我只能说纯纯 Java 就实现了,我主要是创建了一个 Dynamic Web Application(Eclipse的说法,Intellij IDEA 应该就是 Web Application,勾选 Servlet)

顺便说说 2019 Intellij IDEA 和 2022 版本创建项目的异同,直接看下图

Intellij IDEA 2022.1.2
Intellij IDEA 2019.3.5

工具:Intellij IDEA 2019 或者 Intellij IDEA 2022

代码实现

PS: 如果要让import org.apache.commons.lang3.time.DateFormatUtils;发挥作用,需要先在pom.xml文件(Maven构建依赖)声明下载commons-lang3依赖,如下:

xml 复制代码
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>
Java 复制代码
import org.apache.commons.lang3.time.DateFormatUtils;  
  
import java.io.*;  
import java.net.ServerSocket;  
import java.net.Socket;  
import java.util.Date;  
  
public class HttpServer {  
  
  public static void main(String[] args) {  
  
     try {  
        // 侦听8080端口  
        ServerSocket server = new ServerSocket(8080);  
  
        System.out.println("Info:Server start," + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));  
        while (true) {  
           // 接收客户端请求数据  
           Socket socket = server.accept();  
  
           // 读取  
           BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
           // 写入  
           BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
  
           String line = input.readLine();  
  
           while (line != null && !line.isEmpty()) {  
              System.out.println(line);  
              line = input.readLine();  
           }  
           output.write("HTTP/1.1 200 OK\r\n");  
           output.write("Content-type:text/plain\r\n");  
           output.write("\r\n");  
           output.write("Success!!" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "\r\n");  
           output.flush();  
             
           //必须关闭  
           input.close();  
           output.close();  
  
           socket.close();  
        }  
     } catch (IOException e) {  
        e.printStackTrace();  
        System.out.println("Error binding the specified port.");  
     }  
  }  
}

参考资料

JAVA实现简单HTTP服务器

相关推荐
爱勇宝13 分钟前
没有 Fn 键关触控板?我做了一个双击即用的 Windows 小工具
前端·后端·程序员
沙湖遇雨1 小时前
8.ByteBuf 的数据模型、生命周期和内存分配
后端
by组态1 小时前
Ricon组态系统API参考手册
前端·后端·物联网
再吃一根胡萝卜1 小时前
Agent 如何选择与生成 SQL —— Text2SQL 全链路详解
后端
苍何1 小时前
把操作流程直接录成 Skill,豆包太夯了!
后端
Go_error1 小时前
在 Go 服务层中如何优雅地管理事务?
后端·go
爱读源码的大都督2 小时前
DeepSeek面试官问:多租户 RAG 系统怎样实现细粒度权限控制?
后端·面试·架构
苍何2 小时前
我们终于成立了 AgentWork 开源社区,16.4 万字豆包工作蓝皮书同步开源(建议收藏)
后端