如何检查给定字符串是否为有效的URL地址?
我对正则表达式的了解是基本的,不允许我从我在网上看到的数百个正则表达式中进行选择.
我想将键值对作为查询参数附加到现有URL.虽然我可以通过检查URL是否有查询部分或片段部分来执行此操作,并通过跳过一堆if子句来执行追加,但我想知道如果通过Apache执行此操作是否有干净的方法Commons库或类似的东西.
http://example.com 将会 http://example.com?name=John
http://example.com#fragment 将会 http://example.com?name=John#fragment
http://example.com?email=john.doe@email.com 将会 http://example.com?email=john.doe@email.com&name=John
http://example.com?email=john.doe@email.com#fragment 将会 http://example.com?email=john.doe@email.com&name=John#fragment
我之前已多次运行此场景,并且我希望在不破坏URL的情况下执行此操作.
我正在使用StringBuilder构建一个String
StringBuilder builder = new StringBuilder();
builder.append("my parameters");
builder.append("other parameters");
Run Code Online (Sandbox Code Playgroud)
然后我建立一个网址
Url url = new Url(builder.toString());
Run Code Online (Sandbox Code Playgroud)
然后我尝试连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
Run Code Online (Sandbox Code Playgroud)
但是从我得到的结果来看,网址似乎并不正确.这就像某些参数被错误传递.这就是为什么我认为问题出在StringBuilder的一部分.
问题在于我试图传递的双参数.
double longitude = 23.433114;
String lng = String.ValueOf(longitude);
Run Code Online (Sandbox Code Playgroud)
然后我把它放在网址中.但如果我把它作为字符串给出,结果是正确的.
String lng = "23.433114"
Run Code Online (Sandbox Code Playgroud)
UrlEncoding是否必要?我将尝试下面的建议.
在我使用的大部分代码中都有可怕的东西,比如:
String url = "../Somewhere/SomeServlet?method=AMethod&id="+object.getSomething()+ "&aParam="+object.getSomethingElse());
Run Code Online (Sandbox Code Playgroud)
或者 - 更糟糕的是:
String url = "Somewhere/Here/Something.jsp?path="+aFile.toString().replace("\\","/")+ "&aParam="+object.getSomethingElse());
Run Code Online (Sandbox Code Playgroud)
有没有正确的方法:
从本质上讲 - 构建字符串要比正确地完成字符串要容易得多.有没有办法正确地做到这一点就像建立字符串一样简单?
添加
为了清楚起见 - 经过一番思考 - 我想我正在寻找类似的东西:
String s = new MyThing()
.setPlace("Somewhere/Something.jsp")
.addParameter(aName,aValue)
.addParameter(aName,aFile)
.toString();
Run Code Online (Sandbox Code Playgroud)
因此它将处理转义的所有不愉快并添加"?"/"&"并将"\"更改为"/"而不是使用"\"作为文件等.
如果我必须自己编写一个(即如果Apache不是一个选项),那么有真正的Java技术可以正确地转义各个部分.我的意思是在参数中将""转换为"".而逃避""在其他地方"%20".
我正在寻找的是Java中的一些代码,它将获取一个Map对象并将其转换为一个查询字符串,我可以附加到我返回的URL.我确定有一个库可以做到这一点以及更多,但我无法通过快速谷歌搜索找到它.有人知道会这样做吗?
我使用不同的服务器和配置.获取方案的最佳java代码方法是什么:// host:[port is not port 80].
这是我使用的一些代码,但不知道这是否是最好的方法.(这是伪代码)
HttpServletRequest ==请求
String serverName = request.getServerName().toLowerCase();
String scheme = request.getScheme();
int port = request.getServerPort();
String val = scheme + "://" + serverName + ":" port;
Run Code Online (Sandbox Code Playgroud)
这样val返回:
http(s)://server.com/
要么
http(s)://server.com:7770
基本上,除了查询字符串和'上下文'之外,我需要一切.
我也考虑使用URL:
String absURL = request.getRequestURL();
URL url = new URL(absURL);
url.get????
Run Code Online (Sandbox Code Playgroud) 是否有一个广泛使用的Java库,它执行类似dojo.objectToQuery()的操作?例如(假设使用HttpCore的HttpParams对象,但任何键值映射都会这样做):
HttpParams params = new BasicHttpParams()
.setParameter("foo", "bar")
.setParameter("thud", "grunt");
UnknownLibrary.toQueryString(params);
Run Code Online (Sandbox Code Playgroud)
应该产生"foo = bar&thud = grunt".
我知道写起来并不难,但似乎应该已经写好了.我找不到它.