tomcat解析url参数的解析方式 拿出来做一个备份 方便以后使用
public static void parseParameters(Map map, String data, String encoding)
throws UnsupportedEncodingException
{
if ((data == null) || (data.length() <= 0))
{
return;
}
byte[] bytes = null;
try {
if (encoding == null)
bytes = data.getBytes();
else
bytes = data.getBytes(encoding);
}
catch (UnsupportedEncodingException uee)
{
}
parseParameters(map, bytes, encoding);
}
public static void parseParameters(Map map, byte[] data, String encoding) throws UnsupportedEncodingException
{
if ((data != null) && (data.length > 0)) {
int ix = 0;
int ox = 0;
String key = null;
String value = null;
while (ix < data.length) {
byte c = data[(ix++)];
switch ((char)c)
{
case '&':
value = new String(data, 0, ox, encoding);
if (key != null) {
putMapEntry(map, key, value);
key = null;
}
ox = 0;
break;
case '=':
if (key == null) {
key = new String(data, 0, ox, encoding);
ox = 0;
} else {
data[(ox++)] = c;
}
break;
case '+':
data[(ox++)] = 32;
break;
case '%':
data[(ox++)] = (byte)((convertHexDigit(data[(ix++)]) << 4) + convertHexDigit(data[(ix++)]));
break;
default:
data[(ox++)] = c;
}
}
if (key != null) {
value = new String(data, 0, ox, encoding);
putMapEntry(map, key, value);
}
}
}
private static void putMapEntry(Map map, String name, String value)
{
String[] newValues = null;
String[] oldValues = (String[])(String[])map.get(name);
if (oldValues == null) {
newValues = new String[1];
newValues[0] = value;
} else {
newValues = new String[oldValues.length + 1];
System.arraycopy(oldValues, 0, newValues, 0, oldValues.length);
newValues[oldValues.length] = value;
}
map.put(name, newValues);
}
private static byte convertHexDigit(byte b)
{
if ((b >= 48) && (b <= 57)) return (byte)(b - 48);
if ((b >= 97) && (b <= 102)) return (byte)(b - 97 + 10);
if ((b >= 65) && (b <= 70)) return (byte)(b - 65 + 10);
return 0;
}
分享到:
相关推荐
public class CRequest { /** * 解析出url请求的路径,包括页面 * @param strURL url地址 * @return url路径 */ public static String UrlPage(String strURL) { String strPage=null; String[] arrSplit=null; ...
这两个方法均接受一个`HashMap, String>`作为参数,并返回同样的`HashMap`对象。这样的设计使得我们可以轻松地在客户端和服务端之间传递数据。 - **部署与发布**:为了使这个接口能够被远程访问,我们需要将其部署到...
在Java编程环境中,解析Shapefile(.shp)文件是一项常见的任务,特别是在地理信息系统(GIS)应用中。Shapefile是一种广泛用于存储地理空间数据的开放格式。为了在Java中处理这些文件,我们可以利用开源库GeoTools...
本篇文章将详细介绍如何在Java环境中,基于给定的网站链接URL生成二维码图片并存储到本地目录。 首先,我们需要引入一个Java二维码生成库,例如`com.google.zxing`库中的`javase`模块,这个模块提供了生成和解码...
首先,为了使用`geotools`解析`shp`文件,我们需要添加其对应的Maven依赖到项目中。`geotools`库提供了`DataStoreFinder`类,通过这个类我们可以找到并打开`shp`文件。接着,我们可以使用`FeatureSource`来获取`...
`URL`对象的`hashCode`计算时会涉及到`getHostAddress`方法,该方法会解析域名并发起DNS请求。这就是URLDNS利用链的核心原理。攻击者可以通过构造特殊的`HashMap`,其中的键是恶意的`URL`对象,当反序列化时,会触发...
二、Java解析二维码 1. **扫描二维码**:解析二维码主要涉及读取二维码图像并解码其中的信息。同样可以使用ZXing的`MultiFormatReader`来完成这个任务。 ```java import com.google.zxing.*; import ...
- **实现思路**:解析URL字符串获取特定参数值。 - **代码片段示例**: ```java String url = "***"; String query = url.substring(url.indexOf('?') + 1); String[] pairs = query.split("&"); for (String...
public static List<HashMap> doCallWebService(String namespace, String url, String method, HashMap, String> parms) { SoapObject request = new SoapObject(namespace, method); if (parms != null) { Set...
总的来说,这个项目提供了一个完整的解决方案,从Java后端生成二维码,将其转换为Base64字符串,再到前端解析并显示。这个工具类简化了开发者的工作,提高了效率。在实际应用中,可以根据具体需求调整二维码的大小、...
在Java编程语言中,生成和解析二维码是一种常见的需求,特别是在移动应用、数据交换或信息展示等领域。本实例将深入探讨如何使用Java实现这一功能。首先,我们需要了解二维码的基本原理和结构,然后我们将介绍如何...
在Java编程环境中,生成和解析二维码是常见的任务,特别是在移动应用、数据交换和信息存储等领域。二维码(Quick Response Code)是一种二维条形码,能够存储大量数据,包括文本、URL、联系信息等。本篇文章将深入...
在Java项目中,你可以通过Maven或Gradle将其依赖引入到你的项目中。如果是Maven项目,在pom.xml文件中添加以下依赖: ```xml <groupId>com.google.zxing</groupId> <artifactId>core <version>3.4.1 ...
### Java 最常见 200+ 面试题全解析:面试必备 #### Java 基础 1. **JDK 和 JRE 的区别** - **JDK**(Java Development Kit):Java 开发工具包,包含了 Java 的运行环境(JRE)以及 Java 编译器和其他开发工具...
这会导致一个新的HTTP请求,浏览器地址栏会显示新的URL,且第一次请求中的任何参数和属性都不会传递到第二次请求。 #### 二、J2EE核心概念解析 5. **Web容器概述** Web容器是实现J2EE规范中Web组件的运行环境,...
这篇笔记旨在帮助初学者从零基础逐步掌握Java编程,通过一系列的讲解和实例,让你从入门到精通。 一、Java基础知识 1. Java简介:了解Java的历史背景,由Sun Microsystems(现为Oracle公司)开发,其跨平台的特性...
1. **基础类库**:这是Java API的基础,包括集合框架(如ArrayList、HashMap等)、IO流、线程管理、异常处理等。这些类库使得开发者能够处理输入输出、数据存储、多线程并发以及错误处理等问题。 2. **网络编程**:...
`maxUrl`参数用于限制最多处理的URL数量,防止无限制地抓取网页。`caseSensitive`和`limitHost`是可选配置,分别表示是否区分搜索字符串的大小写以及是否只在指定的主机内搜索。 9. **递归爬取**: 虽然示例中...
在Java 6.0中,引入了可变参数(varargs),简化了传递多个参数的方法调用。 7. JDBC:Java Database Connectivity是Java与数据库交互的标准接口。DriverManager、Connection、Statement和ResultSet等类提供了连接...
这涉及到了URL管理、状态码判断、递归访问等策略。 6. **安全漏洞检测**:项目的核心部分是识别和分析安全漏洞。这可能涉及到常见的漏洞类型,如SQL注入、跨站脚本(XSS)、命令注入、路径遍历等。开发者可能利用了...