使用java创建一个HTTP服务器,要求能响应GET请求,支持HTML页面、JPG图片文件以及目录信息显示
时间: 2024-09-13 19:02:20 浏览: 32
在Java中创建一个简单的HTTP服务器,可以使用像`Jetty`或`Spring Boot`这样的框架,它们提供了易于集成的Web服务支持。这里我们将使用`NanoHTTPD`这个轻量级库,它非常适合学习如何快速搭建基础HTTP服务器。
首先,确保已添加`nanohttpd`依赖到你的项目中。如果你使用的是Maven,可以在pom.xml里添加:
```xml
<dependency>
<groupId>com.nanohttpd</groupId>
<artifactId>nanohttpd</artifactId>
<version>2.7.4</version>
</dependency>
```
接下来,创建一个简单的服务器类,例如`MyHttpServer.java`:
```java
import org.nanohttpd.NanoHTTPD;
import org.nanohttpd.protocols.http.IHTTPSession;
import org.nanohttpd.protocols.http.Message;
import org.nanohttpd.protocols.http.Method;
public class MyHttpServer extends NanoHTTPD {
public static void main(String[] args) {
try {
// 设置监听端口
HttpServer server = new MyHttpServer(8080);
System.out.println("Server started on port " + 8080);
server.start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Response serve(IHTTPSession session, Request request) {
String uri = request.getRequestURI();
if ("/".equals(uri)) { // 主页
return serveIndex(session);
} else if (uri.endsWith(".html")) { // HTML页面
return serveStaticFile(request, "index.html");
} else if (uri.endsWith(".jpg")) { // JPG图片
return serveStaticFile(request, uri);
} else if ("/dir".equals(uri)) { // 目录信息
return serveDirectoryInfo(session);
} else {
return NanoHTTPD.notFoundResponse("Not found", null);
}
}
private Response serveIndex(IHTTPSession session) {
// 返回静态主页内容
return newFixedLengthResponse(
Method.GET,
200,
"Content-Type: text/html",
"Your HTML content goes here",
"Hello, world!".getBytes()
);
}
private Response serveStaticFile(Request request, String filePath) {
try {
return NanoHTTPD.serveFile(session, getClass().getResource(filePath), true);
} catch (IOException e) {
return NanoHTTPD.internalErrorResponse(e.getMessage());
}
}
private Response serveDirectoryInfo(IHTTPSession session) {
// 这里只是一个示例,实际应用中需要查询目录并生成相应的HTML展示
String info = "Directory listing:\n";
for (String file : getFilesInDir()) {
info += file + "\n";
}
return newFixedLengthResponse(
Method.GET,
200,
"Content-Type: text/plain",
info,
info.getBytes()
);
}
// 你可以添加一个方法来获取当前目录下的文件列表,这取决于你的环境配置
protected List<String> getFilesInDir() {
// 这里仅作示例,你需要替换为实际获取目录文件的逻辑
return Arrays.asList("index.html", "image.jpg", "subdir");
}
}
```
运行上述代码后,服务器将在指定的端口(这里是8080)上监听GET请求。对于主页、HTML页面、JPG图片和目录信息,服务器会提供相应的处理。