什么是 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
广告