挣扎着应该是一段简单的代码(但后来我是新手)
String ipaddrlist = request.getParameter("ipaddrlist");
System.out.println (ipaddrlist);
ReaderDriver art = new ReaderDriver();
String ipaddrs[] = ipaddrlist.split(",");
System.out.println (Arrays.toString(ipaddrs));
for(int i=0; i< ipaddrs.length ; i++)
{
art.setOutputs(ipaddrs[i], false);
}
ipaddrlist =,192.168.150.210 ipaddrs =,192.168.150.210(将逗号与IP地址分开)。使用数组是因为列表中可能有多个IP地址。
但for(int循环似乎是发送正确的IP地址,也是一个null,导致java IllegalArgumentException = http host = null。我无法弄清楚如何将for循环打印到控制台,所以我可以看到究竟是什么发送。
如果我替换for循环并只使用一个固定的IP地址,则没有例外。
我不想设置代理等,如果我可以避免它,并且捕获异常似乎不起作用。
ReaderDriver的前2行(但我不想在可能的情况下改变此代码,问题似乎是在真实IP地址之后发送null的for循环)
public boolean setOutputs(String ipAddress, boolean status)
{
String url = (new StringBuilder()).append("http://").append(ipAddress).append("/UE/rci").toString();
我想停止for循环发送IP addreeses以外的任何东西(即空白)。
赞赏的想法。
答案 0 :(得分:0)
问题是当ipaddress的值为空时,代码将创建无效的URL。
http:///UE/rci //Invalid URL if ip address is blank
http://192.168.150.210/UE/rci //Valid URL
我假设您正在使用此URL创建类似
的连接 URL myURL = new URL(url);
URLConnection myURLConnection = myURL.openConnection();
myURLConnection.connect();
您需要在打开连接之前验证URL。
String url = (new StringBuilder()).append("http://").append(ipaddrs[i]).append("/UE/rci").toString();
String[] schemes = {"http","https"}; // DEFAULT schemes = "http", "https", "ftp"
UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid(url))
{
System.out.println("URL is valid..Continue processing");
try {
URL myURL = new URL(url);
URLConnection myURLConnection = myURL.openConnection();
myURLConnection.connect();
}
catch (MalformedURLException e) {
e.printStackTrace();
// new URL() failed
// ...
}
catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("URL is invalid");
}
UrlValidator类是Apache commons验证器jar的一部分,可以从https://commons.apache.org/proper/commons-validator/download_validator.cgi下载
有两个UrlValidator类。使用org.apache.commons.validator.routines.UrlValidator,因为其他的不推荐使用。
您也可以添加check for for循环,而不是UrlValidator。
for(int i=0; i< ipaddrs.length ; i++)
{
if(ipaddrs[i] !=null && !"".equals(ipaddrs[i].trim()))
{
art.setOutputs(ipaddrs[i], false);
}
}
答案 1 :(得分:-1)
如果有逗号,请删除尾随逗号。
String sanitizedIpAddr = "";
String ipaddrlist = request.getParameter("ipaddrlist");
System.out.println (ipaddrlist);
ReaderDriver art = new ReaderDriver();
if(ipaddrlist.charAt(ipaddrlist.length()-1) == ','){
sanitizedIpAddr = ipaddrlist.substring(0, ipaddrlist.length()-2);
}
String ipaddrs[] = sanitizedIpAddr.split(",");
System.out.println (Arrays.toString(ipaddrs));
for(int i=0; i< ipaddrs.length ; i++)
{
art.setOutputs(ipaddrs[i], false);
}
然后继续使用常规代码。
答案 2 :(得分:-1)
只需在代码中进行简单验证:
for(int i=0; i< ipaddrs.length ; i++)
{
// Or you can validate by your way(for exp: checking url ), here is checking null or empty
if (ipaddrs[i] != null && !ipaddrs[i].isEmpty())
art.setOutputs(ipaddrs[i], false);
}