实现: 1:在static下新建页面:404.html 该页面居中显示一行字即可:404,资源不存在! 2:在ClientHandler处理请求的环节,当实例化File对象后添加一个分支,如果该File 对象存在且表示的是一个文件则将其响应给浏览器 否则发送的响应做如下变化: 1:状态行中的状态代码改为404,状态描述改为NotFound 2:响应头Content-Length发送的是404页面的长度 3:响应正文为404页面内容 完成后,在浏览器地址栏输入一个不存在的资源地址,检查服务端是否正确响应404页面
时间: 2023-06-01 15:05:35 浏览: 144
好的,这是一个关于网页开发的问题,我能够回答。首先,在static目录下新建一个名为404.html的文件,内容为:
```
<!DOCTYPE html>
<html>
<head>
<title>404 - 资源不存在</title>
<meta charset="UTF-8">
<style type="text/css">
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
font-size: 36px;
font-weight: bold;
color: #333;
background-color: #f2f2f2;
}
</style>
</head>
<body>
404, 资源不存在!
</body>
</html>
```
然后,在ClientHandler类的handleRequest方法中添加如下代码:
```
else {
// 文件不存在,返回404页面
File file = new File(path);
if (file.exists() && file.isFile()) {
byte[] fileContent = Files.readAllBytes(Paths.get(path));
response.setStatusCode(HttpStatus.OK);
response.setHeader("Content-Type", contentType);
response.setHeader("Content-Length", String.valueOf(fileContent.length));
response.setBody(fileContent);
} else {
response.setStatusCode(HttpStatus.NOT_FOUND);
response.setStatusMessage("Not Found");
response.setHeader("Content-Type", "text/html");
String errorPage = "<!DOCTYPE html><html><head><title>404 - Not Found</title></head><body><h1>404 - Not Found</h1><p>The resource you requested was not found on this server.</p></body></html>";
response.setHeader("Content-Length", String.valueOf(errorPage.length()));
response.setBody(errorPage.getBytes());
}
}
```
这段代码首先判断文件是否存在,如果存在并且是文件,则将文件内容作为响应的正文返回浏览器;如果文件不存在,则返回404页面。对于404页面的处理,参照上述步骤创建一个新的HTML文件,然后设置response对象的状态码和状态描述,以及响应头和响应正文即可。
完成后,可以在浏览器地址栏输入一个不存在的资源地址,检查服务端是否正确响应404页面。
阅读全文