Java 非法参数http主机

Java 非法参数http主机,java,jsp,Java,Jsp,挣扎于一段简单的代码(但我是个新手) 我想停止for循环发送除IP地址之外的任何内容(即空白) 感谢您的好意。如果后面有逗号,请去掉它 String sanitizedIpAddr = ""; String ipaddrlist = request.getParameter("ipaddrlist"); System.out.println (ipaddrlist); ReaderDriver art = new ReaderDriver(); if(ipaddrlist.charAt(ip

挣扎于一段简单的代码(但我是个新手)

我想停止for循环发送除IP地址之外的任何内容(即空白)


感谢您的好意。

如果后面有逗号,请去掉它

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);
}
字符串sanitizedIpAddr=”“;
字符串ipaddrlist=request.getParameter(“ipaddrlist”);
System.out.println(IPAddressList);
ReaderDriver艺术=新的ReaderDriver();
if(ipaddrlist.charAt(ipaddrlist.length()-1)=','){
sanitizedIpAddr=ipaddrlist.substring(0,ipaddrlist.length()-2);
}
字符串ipaddrs[]=sanitizedIpAddr.split(“,”);
System.out.println(Arrays.toString(ipaddrs));
对于(int i=0;i

然后继续使用常规代码。

问题是,当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");
        }
类是Apache commons验证程序jar的一部分,可以从

有两个UrlValidator类。使用org.apache.commons.validator.routines.urlvidator,因为另一个已弃用

您还可以添加一个签入for循环,而不是UrlValidator

for(int i=0; i< ipaddrs.length ; i++)
{
    if(ipaddrs[i] !=null && !"".equals(ipaddrs[i].trim()))
    {
        art.setOutputs(ipaddrs[i], false);
    }
}
for(int i=0;i
只需在代码中执行简单的验证:

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);
}
for(int i=0;i
您还可以为ReaderDriver类粘贴代码。根据这段代码,我们将无法确定setOutputs API在做什么。代码的其余部分看起来不错。如果逗号前没有值,则它将被视为空白。更新了原始代码,但请参见注释。谢谢Eduardo,但我现在似乎有两个字符串数组要放入for循环中(ipaddrlist和SanitizedIPAddressr),不知道如何执行此操作,您能否在其中添加内容来复制我的原始代码(如您所见,这是一个新手)@只需用新的消毒设备更换所有设备。你要做的就是删除结尾的逗号(如果有)。这应该可以修复空指针异常,但这会破坏(int i=0;ifor(int i=0; i< ipaddrs.length ; i++) { if(ipaddrs[i] !=null && !"".equals(ipaddrs[i].trim())) { art.setOutputs(ipaddrs[i], false); } }
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);
}