java解析出url请求的路径和参数

import java.util.HashMap;
import java.util.Map;
public class CRequest {
    /**
     * 解析出url请求的路径,包括页面
     * @param strURL url地址
     * @return url路径
     */
    public static String UrlPage(String strURL)
    {
    String strPage=null;
      String[] arrSplit=null;
     
      strURL=strURL.trim().toLowerCase();
     
      arrSplit=strURL.split("[?]");
      if(strURL.length()>0)
      {
          if(arrSplit.length>1)
          {
                  if(arrSplit[0]!=null)
                  {
                  strPage=arrSplit[0];
                  }
          }
      }
     
    return strPage;   
    }
    /**
     * 去掉url中的路径,留下请求参数部分
     * @param strURL url地址
     * @return url请求参数部分
     */
    private static String TruncateUrlPage(String strURL)
    {
    String strAllParam=null;
      String[] arrSplit=null;
     
      strURL=strURL.trim().toLowerCase();
     
      arrSplit=strURL.split("[?]");
      if(strURL.length()>1)
      {
          if(arrSplit.length>1)
          {
                  if(arrSplit[1]!=null)
                  {
                  strAllParam=arrSplit[1];
                  }
          }
      }
     
    return strAllParam;   
    }
    /**
     * 解析出url参数中的键值对
     * 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
     * @param URL  url地址
     * @return  url请求参数部分
     */
    public static Map<String, String> URLRequest(String URL)
    {
    Map<String, String> mapRequest = new HashMap<String, String>();
   
      String[] arrSplit=null;
     
    String strUrlParam=TruncateUrlPage(URL);
    if(strUrlParam==null)
    {
        return mapRequest;
    }
      //每个键值为一组 www.2cto.com
    arrSplit=strUrlParam.split("[&]");
    for(String strSplit:arrSplit)
    {
          String[] arrSplitEqual=null;         
          arrSplitEqual= strSplit.split("[=]");
         
          //解析出键值
          if(arrSplitEqual.length>1)
          {
              //正确解析
              mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]);
             
          }
          else
          {
              if(arrSplitEqual[0]!="")
              {
              //只有参数没有值,不加入
              mapRequest.put(arrSplitEqual[0], "");       
              }
          }
    }   
    return mapRequest;   
    }
   
}
 
测试类
 
 
package RequestPackage;
import java.util.Map;
public class TestCRequest {
    /**用于测试CRequest类
     * @param args
     */
    public static void main(String[] args) {
    // 请求url
        String str = "index.jsp?Action=del&id=123&sort=";    
       
        //url页面路径
        System.out.println(CRequest.UrlPage(str));
       
        //url参数键值对
        String strRequestKeyAndValues="";       
        Map<String, String> mapRequest = CRequest.URLRequest(str);
       
        for(String strRequestKey: mapRequest.keySet()) {
            String strRequestValue=mapRequest.get(strRequestKey);
            strRequestKeyAndValues+="key:"+strRequestKey+",Value:"+strRequestValue+";";           
          
        }
        System.out.println(strRequestKeyAndValues);
       
        //获取无效键时,输出null
        System.out.println(mapRequest.get("page"));
    }
}
 
 
测试代码运行效果
 
index.jsp
key:id,Value:123;key:sort,Value:;key:action,Value:del;
null
### Java解析 HTTP 请求 URL 参数的方法 在 Java 中,可以通过多种方式来解析 HTTP 请求中的 URL 参数。以下是几种常见的方法: #### 使用 `HttpServletRequest` 对象 如果是在基于 Servlet 的环境中工作,则可以利用 `HttpServletRequest` 提供的功能直接获取请求参数。 ```java String paramValue = request.getParameter("paramName"); ``` 此代码片段展示了如何通过指定名称提取单个参数的值[^1]。对于多个同名参数的情况,可使用以下方法: ```java String[] paramValues = request.getParameterValues("paramName"); ``` 这允许访问具有相同键的所有参数值列表[^2]。 #### 手动解析查询字符串 当无法依赖框架或者需要处理原始数据时,也可以手动解析 URL 查询部分。下面是一个简单的实现例子: ```java public static Map<String, List<String>> parseQueryString(String queryString) throws UnsupportedEncodingException { Map<String, List<String>> queryPairs = new LinkedHashMap<>(); if (queryString != null && !queryString.isEmpty()) { String[] pairs = queryString.split("&"); for (String pair : pairs) { int idx = pair.indexOf("="); if (idx > 0) { // Ensure '=' is not at the start or end of string. try { String key = java.net.URLDecoder.decode(pair.substring(0, idx), "UTF-8"); String value = java.net.URLDecoder.decode(pair.substring(idx + 1), "UTF-8"); if (!queryPairs.containsKey(key)) { queryPairs.put(key, new ArrayList<>()); } queryPairs.get(key).add(value); } catch (Exception e) { throw new IllegalArgumentException("Error parsing query parameter: " + pair, e); } } else { throw new IllegalArgumentException("Invalid query parameter format."); } } } return queryPairs; } ``` 该函数接受一个标准形式编码后的查询串作为输入,并返回一个映射表,其中每个键对应于可能含有多个值得列表[^3]。 #### 利用第三方库简化操作 除了自己编写解析逻辑外,还可以借助像 Apache Commons Lang 或者 Spring Framework 这样的成熟工具包来进行更复杂的场景下的参数解析。例如,在 Spring MVC 应用程序里,只需定义控制器方法签名即可自动绑定请求体内的字段到相应变量上[^4]: ```java @RequestMapping("/example") public ResponseEntity<?> handleRequest(@RequestParam MultiValueMap<String, String> allParams){ ... } ``` 这里展示的是接收所有 GET/POST 请求并将其转换成易于管理的数据结构的方式之一[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值