杰瑞科技汇

Java request如何获取完整URL参数?

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

Java request如何获取完整URL参数?-图1
(图片来源网络,侵删)

客户端(Java 发送 HTTP 请求并获取 URL 信息)

如果你在 Java 客户端代码中需要发送 HTTP 请求并获取目标 URL 的信息(如协议、主机、路径、参数等),可以使用以下方法:

使用 java.net.URLjava.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()

根据你的具体需求选择合适的方法!

Java request如何获取完整URL参数?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇