什么是 MalformedURLException 以及如何在 Java 中修复它?


在使用 Java(JSE)进行客户端-服务器编程时,如果在程序中使用 java.net.URL 类对象,则需要通过传递表示所需 URL 的字符串来实例化此类,以建立连接。如果传递的字符串中的 URL 无法解析或缺少合法协议,则会生成 MalformedURLException。

示例

在以下 Java 示例中,我们尝试建立到页面的连接并发布响应。

我们修改了协议部分,将其更改为 htt,而它应该是 http 或 https。

import java.util.Scanner;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGetExample {
   public static void main(String[] args) throws IOException {
      String url = "ht://tutorialspoint.com/";
      URL obj = new URL(url);
      //Opening a connection
      HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
      //Sending the request
      conn.setRequestMethod("GET");
      int response = conn.getResponseCode();
      if (response == 200) {
         //Reading the response to a StringBuffer
         Scanner responseReader = new Scanner(conn.getInputStream());
         StringBuffer buffer = new StringBuffer();
         while (responseReader.hasNextLine()) {
            buffer.append(responseReader.nextLine()+"
");          }          responseReader.close();          //Printing the Response          System.out.println(buffer.toString());       }    } }

运行时异常

Exception in thread "main" java.net.MalformedURLException: unknown protocol: htt
   at java.net.URL.<init>(Unknown Source)
   at java.net.URL.<init>(Unknown Source)
   at java.net.URL.<init>(Unknown Source)
   at myPackage.HttpGetExample.main(HttpGetExample.java:11)

处理 MalformedURLException

唯一的解决方法是确保传递的 URL 是合法的,并且具有正确的协议。

最好的方法是在继续执行程序之前验证 URL。为了验证,可以使用正则表达式或提供 URL 验证器的其他库。在以下程序中,我们使用异常处理本身来验证 URL。

示例

import java.util.Scanner;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
public class HttpGetExample {
   public static boolean isUrlValid(String url) {
      try {
         URL obj = new URL(url);
         obj.toURI();
         return true;
      } catch (MalformedURLException e) {
         return false;
      } catch (URISyntaxException e) {
         return false;
      }
   }
   public static void main(String[] args) throws IOException {
      String url = "ht://tutorialspoint.com/";
      if(isUrlValid(url)) {
         URL obj = new URL(url);
         //Opening a connection
         HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
         //Sending the request
         conn.setRequestMethod("GET");
         int response = conn.getResponseCode();
         if (response == 200) {
            //Reading the response to a StringBuffer
            Scanner responseReader = new Scanner(conn.getInputStream());
            StringBuffer buffer = new StringBuffer();
            while (responseReader.hasNextLine()) {
               buffer.append(responseReader.nextLine()+"
");             }             responseReader.close();             //Printing the Response             System.out.println(buffer.toString());          }       }else {          System.out.println("Enter valid URL");       }    } }

输出

Enter valid URL

更新于: 2020-07-02

18K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告