你能给我代码实例吗
时间: 2024-02-01 22:03:20 浏览: 22
当然可以,以下是一个简单的Web缓存程序的Java代码实例:
```java
import java.io.*;
import java.net.*;
public class WebCacheServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("Web Cache Server is running on port 8080...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String requestLine = in.readLine();
String[] tokens = requestLine.split("\\s+");
String method = tokens[0];
String url = tokens[1];
String version = tokens[2];
if (method.equals("GET")) {
System.out.println("Request: " + url);
File cacheFile = new File("cache/" + url.replace("/", "_"));
if (cacheFile.exists() && !isCacheExpired(cacheFile)) {
System.out.println("Cache hit: " + url);
sendResponse(clientSocket, new FileInputStream(cacheFile));
} else {
System.out.println("Cache miss: " + url);
URL remote = new URL(url);
HttpURLConnection remoteConn = (HttpURLConnection) remote.openConnection();
sendResponse(clientSocket, remoteConn.getInputStream());
saveToCache(remoteConn.getInputStream(), cacheFile);
}
}
clientSocket.close();
}
}
private static void saveToCache(InputStream inputStream, File cacheFile) throws IOException {
OutputStream outputStream = new FileOutputStream(cacheFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
}
private static boolean isCacheExpired(File cacheFile) {
return (System.currentTimeMillis() - cacheFile.lastModified()) > 86400000; // 1 day
}
private static void sendResponse(Socket clientSocket, InputStream inputStream) throws IOException {
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
outputStream.write("Content-Type: text/html\r\n".getBytes());
outputStream.write("\r\n".getBytes());
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
}
}
```
这个程序实现了一个简单的Web缓存服务器,监听8080端口,当客户端发送GET请求时,会先检查是否有该网页的缓存副本,如果有,则直接从缓存中返回数据;如果没有,则向目标网站发出请求,获取数据,并将数据保存到缓存中。程序中缓存的过期时间为1天。你可以根据需要修改程序中的缓存路径、缓存过期时间等参数。