在 Java 中获取 URL 请求的相关信息,具体取决于你是在客户端(发送请求)还是服务器端(接收请求)的场景下操作,以下是两种常见场景的详细说明和代码示例。

客户端(Java 发送 HTTP 请求并获取 URL 信息)
如果你在 Java 客户端代码中需要发送 HTTP 请求并获取目标 URL 的信息(如协议、主机、路径、参数等),可以使用以下方法:
使用 java.net.URL 和 java.net.HttpURLConnection(原生 Java)
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ClientUrlExample {
public static void main(String[] args) {
try {
// 1. 创建 URL 对象
String urlString = "https://www.example.com:8080/path/to/resource?name=John&age=30";
URL url = new URL(urlString);
// 2. 解析 URL 的各个部分
System.out.println("Protocol: " + url.getProtocol()); // 协议 (https)
System.out.println("Host: " + url.getHost()); // 主机 (www.example.com)
System.out.println("Port: " + url.getPort()); // 端口 (8080,若未指定则返回 -1)
System.out.println("Path: " + url.getPath()); // 路径 (/path/to/resource)
System.out.println("Query: " + url.getQuery()); // 查询参数 (name=John&age=30)
System.out.println("File: " + url.getFile()); // 文件部分(路径+查询参数)
System.out.println("Ref: " + url.getRef()); // 锚点(#后面的部分)
// 3. 发送 HTTP GET 请求并获取响应
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// 读取响应内容
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Response: " + response.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用第三方库(如 Apache HttpClient 或 OkHttp)
示例:Apache HttpClient
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ApacheHttpClientExample {
public static void main(String[] args) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
String url = "https://www.example.com/path?param=value";
HttpGet request = new HttpGet(url);
System.out.println("Request URL: " + request.getURI());
try (CloseableHttpResponse response = httpClient.execute(request)) {
String responseBody = EntityUtils.toString(response.getEntity());
System.out.println("Response: " + responseBody);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务器端(Java Web 接收 HTTP 请求并获取 URL 信息)
如果你在 Java Web 服务器端(如 Servlet、Spring MVC)中需要获取客户端请求的 URL 信息,可以通过以下方式:
使用 Servlet API(原生 Java Web)
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletUrlExample extends javax.servlet.http.HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 1. 获取请求的完整 URL
String requestUrl = request.getRequestURL().toString();
System.out.println("Request URL: " + requestUrl);
// 2. 获取请求 URI(路径部分,不含查询参数)
String requestUri = request.getRequestURI();
System.out.println("Request URI: " + requestUri);
// 3. 获取查询参数
String queryString = request.getQueryString();
System.out.println("Query String: " + queryString);
// 4. 获取协议、服务器名、端口等
String scheme = request.getScheme(); // http/https
String serverName = request.getServerName(); // 主机名
int serverPort = request.getServerPort(); // 端口
System.out.println("Scheme: " + scheme);
System.out.println("Server Name: " + serverName);
System.out.println("Server Port: " + serverPort);
// 5. 获取 Servlet 路径(当前 Servlet 映射的路径)
String servletPath = request.getServletPath();
System.out.println("Servlet Path: " + servletPath);
// 6. 获取请求参数(单个或多个)
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Parameter 'name': " + name);
System.out.println("Parameter 'age': " + age);
}
}
使用 Spring MVC(注解方式)
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class SpringUrlController {
@GetMapping("/example")
public String handleRequest(
@RequestParam(required = false) String name,
@RequestParam(required = false) Integer age,
HttpServletRequest request) {
// 获取完整 URL
String requestUrl = request.getRequestURL().toString();
System.out.println("Request URL: " + requestUrl);
// 获取查询参数
String queryString = request.getQueryString();
System.out.println("Query String: " + queryString);
// 获取请求参数
System.out.println("Parameter 'name': " + name);
System.out.println("Parameter 'age': " + age);
return "Hello " + name + "! Age: " + age;
}
}
| 场景 | 目的 | 核心类/方法 |
|---|---|---|
| 客户端发送请求 | 构造或解析目标 URL,发送 HTTP 请求 | java.net.URL, HttpURLConnection, Apache HttpClient, OkHttp |
| 服务器端接收请求 | 获取客户端请求的 URL 和参数 | HttpServletRequest.getRequestURL(), getQueryString(), getParameter() |
根据你的具体需求选择合适的方法!

