【仿写tomcat】三、通过socket读取http请求信息

这篇具有很好参考价值的文章主要介绍了【仿写tomcat】三、通过socket读取http请求信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

建立Socket连接

这里我们也是创建一个专门管理socket的类

package com.tomcatServer.socket;

import java.io.*;
import java.net.ServerSocket;

/**
 * 套接字存储
 *
 * @author ez4sterben
 * @date 2023/08/15
 */
public class SocketStore {

    private static ServerSocket socket;

    public static void connect(Integer port) throws IOException {
        socket = new ServerSocket(port);
    }

    public static void close() throws IOException {
        socket.close();
    }

    public static ServerSocket getSocket() {
        return socket;
    }
}

随后在主方法中调用他,让serverSocket监听8080端口,并且一直尝试获取连接信息

		try {
            SocketStore.connect(8080);
            while (true){
                Socket accept = SocketStore.getSocket().accept();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            SocketStore.close();
        }

获取连接信息

接下来在SocketStore中添加处理请求的方法,这里面的主要逻辑就是读取流数据,而且我们知道HTTP协议是一行一行的(看f12就知道了),所以给数据拼上换行符让我们可以直观的看一下这个数据

	/**
     * 处理请求
     *
     * @throws IOException ioexception
     */
    public static void handleRequest(Socket accept) throws IOException {
        // 获取输入输出流
        BufferedReader in = new BufferedReader(new InputStreamReader(accept.getInputStream()));
        PrintWriter out = new PrintWriter(accept.getOutputStream(), true);
        // 定义字符串接收Http协议内容
        String inputLine;
        StringBuilder requestData = new StringBuilder();
        // 读取数据
        while ((inputLine = in.readLine()) != null && !inputLine.isEmpty()) {
            requestData.append(inputLine).append("\r\n");
        }
        // 打印数据
      	System.out.println(requestData);
        // 关闭资源
        accept.close();
    }

在主方法中调用

		try {
            SocketStore.connect(8080);
            while (true){
                Socket accept = SocketStore.getSocket().accept();
                // 在这里加一行就行
                SocketStore.handleRequest(accept);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            SocketStore.close();
        }

查看HTTP信息

这时候我们运行一下项目,并且通过postman或者浏览器直接访问一下localhost:8080
【仿写tomcat】三、通过socket读取http请求信息,源码仿写,tomcat,http,java
如果用浏览器访问的话,可能网页只会一直加载,因为我们没作出响应,但是我们换一个可以打开的页面按下f12点击网络随便照一个请求看一看
【仿写tomcat】三、通过socket读取http请求信息,源码仿写,tomcat,http,java
可以看到socket接收到的流其实就是一个http的报文,那我们是不是就可以通过解析http报文来作出响应了?接下来的工作将在下一篇完成。

【仿写tomcat】四、解析http请求信息,响应给前端,HttpServletRequest、HttpServletResponse的简单实现文章来源地址https://www.toymoban.com/news/detail-655917.html

到了这里,关于【仿写tomcat】三、通过socket读取http请求信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【仿写框架之仿写Tomact】一、详解Tomcat的工作流程

    当涉及到Java Web应用程序的部署和运行,Apache Tomcat无疑是一个备受欢迎的选择。Tomcat作为一个开源的、轻量级的Java Servlet容器和JavaServer Pages (JSP) 容器,扮演着连接用户和应用程序的重要角色。本篇文将向大家阐述Tomcat的执行流程,从启动到请求处理再到关闭,帮助您更好地

    2024年02月12日
    浏览(27)
  • tomcat(跟着宝哥学java:tomcat)tomcat安装 发布项目 配置eclipse http协议详解、get请求、post请求、url详解

    在%CATALINA_HOME%webapps下创建一个文件夹:hehe 在hehe中创建子文件夹:WEB-INF和资源文件夹(html/jsp/css/imgs/js) 在WEB-INF中创建子文件夹classes::存储java源文件生成的字节码文件 在WEB-INF中创建子文件夹lib::存储项目以来的jar 在WEB-INF中创建子web项目的核心配置文件:web.xml web

    2024年02月03日
    浏览(33)
  • 【Servlet】图解HTTP请求Tomcat服务器实现前后端交互

    很多同学在学习到Servlet的时候,需要通过Tomcat去接收HTTP的响应以实现这个前后端交互的场景,因此理解起来就比较困难,之前在写Java代码的时候,我们只是在一个程序里面 通过方法1调用方法2以达成基本的代码逻辑 。不过现在呢,我们是去进行一个 前后端的交互 ,本质实

    2024年02月06日
    浏览(33)
  • Tomcat请求处理流程与源码浅析

    系列文章目录和关于我 在tomcat中,Connector负责开启socket并且监听客户端请求,返回响应数据。 其中: Endpoint:tomcat中没有这个接口,只有AbstractEndpoint,它负责启动线程来监听服务器端口,并且在接受到数据后交给Processor处理 Processor:Processor读取到客户端请求后按照请求地址

    2024年02月06日
    浏览(30)
  • Tomcat配置项目直接通过http://ip:port访问

    遇到一个需求:因为这个域名下只部署了这一个项目,用户想直接通过域名来访问这个项目而不是加一层项目地址。 修改war文件名 : 将你的war文件重命名为 ROOT.war 。部署到 Tomcat 的 webapps 目录即可。 如果已经存在ROOT文件夹,删除它,以便 Tomcat 自动加解压缩并部署 ROOT.wa

    2024年01月21日
    浏览(31)
  • [Tomcat/SpringMVC配置]HTTP状态404,请求的资源[/hello]不可用

    本专栏记录java开发中遇到的一系列问题,持续更新,欢迎关注~ 问题: 最近在学习一个ssm的项目,在配置好spring,springmvc以及web.xml之后,连接tomcat成功,但是执行静态网页返回404。问题描述:[Tomcat/SpringMVC配置]HTTP状态404,请求的资源[/hello]不可用 排查问题: 仔细检查配置文

    2024年02月11日
    浏览(35)
  • 如何仿写简易tomcat 实现思路+代码详细讲解

    仿写之前,我们要搞清楚都要用到哪些技术 自定义注解,比如Tomcat使用的是@Servlet,我们可以定义一个自己的@MyServlet 构造请求体和返回体,比如tomcat使用HttpRequest,我们可以自己定义myHttpRequest java去遍历一个指定目录,然后获取到.java文件,再获取到带有@MyServlet注解的类 然

    2024年02月12日
    浏览(24)
  • Tomcat:org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误

    注意其中:HTTP请求解析错误 将 https 改成 http 即:http://localhost:8080/ (其中8080根据自己配置来更改,tomcat默认是8080) 修改后: 成功!! 具体原因俺也不造,欢迎友友们指教,多谢!! Tomcat与http有协议

    2024年02月11日
    浏览(27)
  • Python通过WMI读取主板BIOS信息

    Windows Management Instrumentation (WMI,Windows管理规范) 是Web-Based Enterprise Management (WBEM)的Windows实现,是在Windows操作系统中管理和操作数据的基础设施。 WBEM的数据模型是CIM(Common Information Model,公共信息模型)。CIM是一个用来命名计算机的物理和逻辑单元的标准的命名系统(或称为

    2024年02月03日
    浏览(38)
  • 【仿写tomcat】六、解析xml文件配置端口、线程池核心参数

    上一篇文章中我们用了Excutors创建了线程,这里我们将它改造成包含所有线程池核心参数的形式。 主方法中对多线程操作部分改为使用CompletableFuture执行 现在我们有一个server.xml文件,我想解析其中的端口号以及线程池参数 如果想完成这个功能可以直接使用java本身自带的工具

    2024年02月12日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包