URLParser.java 1.93 KB
package com.genersoft.iot.vmp.vmanager.util;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 * url验证工具
 */
public class URLParser {

    public static void main(String[] args) {
        String urlString = "http://127.0.0.1:8080/data/rest"; // 示例URL,实际使用时可以替换为任何URL字符串

        try {
            Map<String, String> urlParts = parseURL(urlString);
            System.out.println("URL分割结果:" + urlParts);
        } catch (MalformedURLException e) {
            System.out.println(e.getMessage());
        }
    }

    public static Map<String, String> parseURL(String urlString) throws MalformedURLException {
        Map<String, String> result = new HashMap<>();

        // 尝试创建URL对象以验证格式是否正确
        URL url = new URL(urlString);

        // 验证协议是否为http
        if (!"http".equalsIgnoreCase(url.getProtocol())) {
            throw new MalformedURLException("协议必须是http");
        }

        // 确认主机名(域名或IP)存在
        if (url.getHost() == null || url.getHost().isEmpty()) {
            throw new MalformedURLException("必须有域名或IP地址");
        }

        // 设置端口,如果未指定则默认为80
        int port = url.getPort();
        if (port == -1) {
            port = 80; // 默认HTTP端口
        }

        // 构建最终的路径,包括查询参数(如果有)
        String path = url.getPath();
        if (url.getQuery() != null && !url.getQuery().isEmpty()) {
            path += "?" + url.getQuery();
        }

        // 将分割的结果放入集合中
        result.put("scheme", url.getProtocol());
        result.put("hostname", url.getHost());
        result.put("port", String.valueOf(port));
        result.put("path", path.isEmpty() ? "/" : path); // 如果没有路径,默认为根路径

        return result;
    }
}