Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何在建立TCP连接后处理HTTP GET请求_Java_Http Request - Fatal编程技术网

Java如何在建立TCP连接后处理HTTP GET请求

Java如何在建立TCP连接后处理HTTP GET请求,java,http-request,Java,Http Request,因此,在建立我的听力连接并接受连接后: ServerSocket serverSock = new ServerSocket(6789); Socket sock = serverSock.accept(); 当我在浏览器中键入localhost:6789/index.html时,我如何处理这个传入的GET请求并返回index.htmlindex.html位于同一目录中 首先,我想确认index.html确实存在,如果不存在,我将返回一条HTTP404消息。然后我将关闭连接。如果您只需要一个基

因此,在建立我的听力连接并接受连接后:

ServerSocket serverSock = new ServerSocket(6789);
Socket sock = serverSock.accept();
当我在浏览器中键入
localhost:6789/index.html
时,我如何处理这个传入的GET请求并返回
index.html
index.html
位于同一目录中


首先,我想确认
index.html
确实存在,如果不存在,我将返回一条HTTP404消息。然后我将关闭连接。

如果您只需要一个基于Java的web服务器来为您处理HTTP请求,那么您应该看看它,它会自动返回静态文件,还允许您定义Java代码以提供对特定请求的自定义响应

您应该阅读一些Tomcat快速入门指南,并对Java servlet和JSP有基本的了解


另一种更容易设置和配置的方法是,因此您可能还想看看该方法。

处理GET和其他请求实际上非常简单,但您必须了解该方法的规范

首先要做的是获取客户端的
SocketInputStream
,以及要返回的文件路径。HTTP请求的第一行是这样的:
GET/index.html HTTP/1.1
。下面是这样做的代码示例:

SocketInputStream sis = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(sis));
String request = br.readLine(); // Now you get GET index.html HTTP/1.1
String[] requestParam = request.split(" ");
String path = requestParam[1];
创建一个新的
文件
对象并检查该文件是否存在。如果文件不存在,则向客户端返回404响应。否则,您将读取文件并将其内容发送回客户端:

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
File file = new File(path);
if( !file.exist()){
  out.write("HTTP 404") // the file does not exists  
}
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String line;
while((line = bfr.readLine()) != null){
  out.write(line);
}

bfr.close();
br.close();
out.close();    
以下是完整的代码摘要:

ServerSocket serverSock = new ServerSocket(6789);
Socket sock = serverSock.accept();

InputStream sis = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(sis));
String request = br.readLine(); // Now you get GET index.html HTTP/1.1`
String[] requestParam = request.split(" ");
String path = requestParam[1];

PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
File file = new File(path);
if (!file.exists()) {
     out.write("HTTP 404"); // the file does not exists
}
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String line;
while ((line = bfr.readLine()) != null) {
    out.write(line);
}

bfr.close();
br.close();
out.close();

你写这篇文章是为了学习吗?有许多现成的基于Java的web服务器可用于处理HTTP请求。@codebox不,我对Java相当陌生。你能给我举一个适合我需要的例子吗?迪米特里干杯,你能解释为什么只有当我键入
localhost:6789/index.html
而不是
localhost:6789/blahblah
时才提供“index.html”吗?哪一行检查这个?编辑:很抱歉,在编辑此评论时,我的internet连接已断开。这是因为blahblah未托管在您的服务器中。请参阅我的完整编辑答案