用下列代码实现一个例子import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class WebServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); while (true) { Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); String requestLine = in.readLine(); String[] requestParts = requestLine.split(" "); String method = requestParts[0]; String path = requestParts[1]; if (!method.equals("GET")) { clientSocket.close(); continue; } File file = new File("." + path); if (!file.exists()) { PrintWriter out = new PrintWriter(clientSocket.getOutputStream()); out.println("HTTP/1.1 404 Not Found"); out.println(); out.close(); continue; } FileInputStream fileInputStream = new FileInputStream(file); byte[] data = new byte[(int) file.length()]; fileInputStream.read(data); OutputStream outputStream = clientSocket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream); printWriter.println("HTTP/1.1 200 OK"); printWriter.println("Content-Type: text/html"); printWriter.println("Content-Length: " + file.length()); printWriter.println(); outputStream.write(data); printWriter.close(); fileInputStream.close(); clientSocket.close(); } }}
时间: 2024-01-22 20:02:23 浏览: 30
这段代码实现了一个简单的Web服务器,它监听8080端口并接受来自客户端的HTTP GET请求。当接收到一个GET请求时,它会尝试读取请求路径对应的文件并将文件内容返回给客户端。如果文件不存在,则返回404 Not Found错误。该服务器只支持GET方法,其它方法会被忽略。具体的实现细节可以参考代码中的注释。
相关问题
java生成一个Socket和Servlet结合的代码例子
你好,以下是Java中生成一个Socket和Servlet结合的代码例子:
首先,需要在服务器端创建一个Servlet,假设我们的Servlet类名为MyServlet:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MyServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
try {
Socket socket = new Socket("127.0.0.1", 8888);
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println("Hello Server");
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = in.readLine();
System.out.println("Message from Server: " + msg);
} catch (Exception e) {
System.out.println("Exception: " + e);
}
doGet(request, response);
}
}
上述代码中,创建了一个Socket对象,连接到本地IP地址为127.0.0.1的服务器端口号为8888的Socket服务,向服务器端发送一条“Hello Server”消息,然后等待服务器端的响应消息。
接下来,在服务器端创建一个Socket服务程序,代码如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket client = server.accept();
System.out.println("Connect to: " + client);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
String msg = in.readLine();
System.out.println("Message from Client: " + msg);
out.println("Hello Client");
out.flush();
}
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
上述代码中,创建了一个ServerSocket对象,监听本地端口号为8888的Socket服务,当有客户端连接时,创建一个Socket对象,关联到客户端的Socket服务,从客户端读取请求消息,然后向客户端发送一条“Hello Client”响应消息。
这就是Java中生成一个Socket和Servlet结合的代码例子,希望可以帮助到你,如有其它问题,请随时联系我。
用java举一个web服务器实现功能的例子
以下是使用Java实现一个简单的Web服务器的示例代码:
```java
import java.io.*;
import java.net.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
public class SimpleWebServer {
public static void main(String[] args) throws IOException {
int port = 8080;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server is listening on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected from " + clientSocket.getInetAddress().getHostAddress());
InputStream inputStream = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String request = reader.readLine();
System.out.println("Request: " + request);
String[] tokens = request.split(" ");
String method = tokens[0];
String path = tokens[1];
if (method.equals("GET")) {
Path filePath = Paths.get("." + path);
if (Files.exists(filePath) && !Files.isDirectory(filePath)) {
byte[] fileContent = Files.readAllBytes(filePath);
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
outputStream.write(("Content-Type: " + Files.probeContentType(filePath) + "\r\n").getBytes());
outputStream.write(("Content-Length: " + fileContent.length + "\r\n").getBytes());
outputStream.write(("Date: " + new Date() + "\r\n").getBytes());
outputStream.write("\r\n".getBytes());
outputStream.write(fileContent);
outputStream.flush();
} else {
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write("HTTP/1.1 404 Not Found\r\n".getBytes());
outputStream.write(("Date: " + new Date() + "\r\n").getBytes());
outputStream.write("\r\n".getBytes());
outputStream.flush();
}
}
clientSocket.close();
System.out.println("Client disconnected");
}
}
}
```
这个简单的Web服务器监听8080端口,当接收到客户端的请求后,根据请求路径读取相应的文件并返回给客户端。如果文件不存在,则返回404错误。这个示例仅仅是一个初步的实现,还需要进行优化和改进,例如处理POST请求、支持多线程等。