【问题标题】:show page not found on browser request在浏览器请求中找不到显示页面
【发布时间】:2013-03-20 01:26:07
【问题描述】:

我正在尝试显示未从服务器找到的 404 页面

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ex1 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    final int BUFFER_SIZE=1000;
    char[] buffer=new char[BUFFER_SIZE];
    ServerSocket serverSocket = null; 
    try {
        serverSocket = new ServerSocket(16000); 
    } catch (IOException e) {
        System.out.println("Could not listen on port: 16000");
        System.exit(-1); 
    }
    while (true) {
        Socket clientSocket = null; 
        try {
            System.out.println("Waiting for Connection"); 
            clientSocket = serverSocket.accept(); 
            System.out.println("Connection Accepted");
            DataOutputStream output =new DataOutputStream(clientSocket.getOutputStream());
            output.writeBytes("HTTP/1.1 404 Not Found \r\n");
            output.writeBytes("Content-Type: text/html \r\n\r\n");


            output.flush();
        } catch (IOException e) {
            System.out.println("Failed to accept connection");
            System.exit(-1); 
        }
        try {
            BufferedReader in =
            new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            in.read(buffer);
            System.out.println(buffer);
            in.close();
            clientSocket.close(); 
            System.out.println("Connection terminated");
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Problem in communicating with the client"); }
    }
}
}

问题是当我在浏览器(谷歌浏览器)中输入 localhost:16000 时,我得到“糟糕!此链接似乎已损坏。” 不是第 404 页

输出是:

Waiting for Connection
Connection Accepted
java.net.SocketException: Connection reset
Problem in communicating with the client
Waiting for Connection
Connection Accepted
GET / HTTP/1.1
Host: localhost:16000
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


Connection terminated
Waiting for Connection
Failed to accept connection
    at java.net.SocketInputStream.read(SocketInputStream.java:189)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.read1(BufferedReader.java:205)
    at java.io.BufferedReader.read(BufferedReader.java:279)
    at java.io.Reader.read(Reader.java:140)
    at ex1_Getting_your_hands_dirty.ex1.main(ex1.java:55)

如何解决这个问题?

【问题讨论】:

  • 我不认为HTTP/1.x 404 Not Found 是一个有效的状态行。也许用01替换1.x中的x
  • 另外我认为 HTTP 响应应该至少有 1 个标头 - 通常是 Content-Length - 并且正文中的一些内容是个好主意。
  • @RichardJPLeGuen JP LEGUEN ON MY SO!?
  • @SotiriosDelimanolis - 你在这里做什么?!我在现实世界中认识的人都不应该在这里找到我!
  • @RichardJPLeGuen 你的秘密对我来说是安全的。

标签: java http dataoutputstream


【解决方案1】:

在我看来,您的 HTTP 响应无效。

    HTTP/1.x 404 Not Found


你应该:

  • 1.x 更改为正确的版本号,例如1.0
  • 添加响应正文
  • 添加至少一个标头 - 可能是 Content-LengthContent-Type

有点像……

HTTP/1.1 404 Not Found
Content-Length: 9
Content-Type: text/plain

Not Found

【讨论】:

  • 我得到了我写的白页
  • 我将此部分更改为 output.writeBytes("HTTP/1.1 404 Not Found \r\n"); output.writeBytes("Content-Type: text/html \r\n\r\n"); output.writeBytes("内容长度:9"); output.writeBytes("Content-Type: text/plain"); output.writeBytes("未找到");也有冲洗,但我得到这个 Content-Length: 9Content-Type: text/plainNot Found
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多