From ed6fe47841e5d232c01702e9b4a4953b5af233c3 Mon Sep 17 00:00:00 2001 From: HuangZhikai <386754646@qq.com> Date: Sun, 31 May 2026 14:50:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'project/exceptinhandle'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exceptinhandle/CacheExceptionHandler.java | 23 +++++++++ .../ConfigurationExceptionHandler.java | 27 ++++++++++ .../CrawlerExceptionHandler.java | 17 +++++++ .../ExceptionHandlerFactory.java | 50 +++++++++++++++++++ .../NetworkExceptionHandler.java | 26 ++++++++++ 5 files changed, 143 insertions(+) create mode 100644 project/exceptinhandle/CacheExceptionHandler.java create mode 100644 project/exceptinhandle/ConfigurationExceptionHandler.java create mode 100644 project/exceptinhandle/CrawlerExceptionHandler.java create mode 100644 project/exceptinhandle/ExceptionHandlerFactory.java create mode 100644 project/exceptinhandle/NetworkExceptionHandler.java diff --git a/project/exceptinhandle/CacheExceptionHandler.java b/project/exceptinhandle/CacheExceptionHandler.java new file mode 100644 index 0000000..9c49827 --- /dev/null +++ b/project/exceptinhandle/CacheExceptionHandler.java @@ -0,0 +1,23 @@ +package com.crawler.exception.handler; + +import com.crawler.exception.CacheException; +import com.crawler.exception.ExceptionHandler; +import com.crawler.view.CrawlerView; + +public class CacheExceptionHandler implements ExceptionHandler { + @Override + public void handle(Exception e, CrawlerView view) { + CacheException cacheException = (CacheException) e; + StringBuilder message = new StringBuilder("缓存异常: "); + message.append(cacheException.getMessage()); + if (cacheException.getFilePath() != null) { + message.append(" (路径: ").append(cacheException.getFilePath()).append(")"); + } + view.showErrorMessage(message.toString()); + } + + @Override + public Class getSupportedExceptionType() { + return CacheException.class; + } +} \ No newline at end of file diff --git a/project/exceptinhandle/ConfigurationExceptionHandler.java b/project/exceptinhandle/ConfigurationExceptionHandler.java new file mode 100644 index 0000000..c0c3edd --- /dev/null +++ b/project/exceptinhandle/ConfigurationExceptionHandler.java @@ -0,0 +1,27 @@ +package com.crawler.exception.handler; + +import com.crawler.exception.ConfigurationException; +import com.crawler.exception.InvalidUrlException; +import com.crawler.exception.UnsupportedCrawlerException; +import com.crawler.exception.ExceptionHandler; +import com.crawler.view.CrawlerView; + +public class ConfigurationExceptionHandler implements ExceptionHandler { + @Override + public void handle(Exception e, CrawlerView view) { + if (e instanceof InvalidUrlException) { + InvalidUrlException ex = (InvalidUrlException) e; + view.showErrorMessage("无效的URL格式: " + ex.getInvalidUrl()); + } else if (e instanceof UnsupportedCrawlerException) { + UnsupportedCrawlerException ex = (UnsupportedCrawlerException) e; + view.showErrorMessage("未找到支持该URL的爬虫: " + ex.getUrl()); + } else { + view.showErrorMessage("配置异常: " + e.getMessage()); + } + } + + @Override + public Class getSupportedExceptionType() { + return ConfigurationException.class; + } +} \ No newline at end of file diff --git a/project/exceptinhandle/CrawlerExceptionHandler.java b/project/exceptinhandle/CrawlerExceptionHandler.java new file mode 100644 index 0000000..2d6704c --- /dev/null +++ b/project/exceptinhandle/CrawlerExceptionHandler.java @@ -0,0 +1,17 @@ +package com.crawler.exception.handler; + +import com.crawler.exception.CrawlerException; +import com.crawler.exception.ExceptionHandler; +import com.crawler.view.CrawlerView; + +public class CrawlerExceptionHandler implements ExceptionHandler { + @Override + public void handle(Exception e, CrawlerView view) { + view.showErrorMessage("爬虫异常: " + e.getMessage()); + } + + @Override + public Class getSupportedExceptionType() { + return CrawlerException.class; + } +} \ No newline at end of file diff --git a/project/exceptinhandle/ExceptionHandlerFactory.java b/project/exceptinhandle/ExceptionHandlerFactory.java new file mode 100644 index 0000000..6fb0fc8 --- /dev/null +++ b/project/exceptinhandle/ExceptionHandlerFactory.java @@ -0,0 +1,50 @@ +package com.crawler.exception.handler; + +import com.crawler.exception.*; +import com.crawler.exception.ExceptionHandler; + +import java.util.ArrayList; +import java.util.List; + +public class ExceptionHandlerFactory { + private static ExceptionHandlerFactory instance; + private List handlers; + + private ExceptionHandlerFactory() { + handlers = new ArrayList<>(); + registerHandlers(); + } + + public static ExceptionHandlerFactory getInstance() { + if (instance == null) { + instance = new ExceptionHandlerFactory(); + } + return instance; + } + + private void registerHandlers() { + handlers.add(new NetworkExceptionHandler()); + handlers.add(new ParseExceptionHandler()); + handlers.add(new CacheExceptionHandler()); + handlers.add(new ConfigurationExceptionHandler()); + handlers.add(new CrawlerExceptionHandler()); + } + + public ExceptionHandler getHandler(Exception e) { + for (ExceptionHandler handler : handlers) { + if (handler.getSupportedExceptionType().isInstance(e)) { + return handler; + } + } + return null; + } + + public void handleException(Exception e, com.crawler.view.CrawlerView view) { + ExceptionHandler handler = getHandler(e); + if (handler != null) { + handler.handle(e, view); + } else { + view.showErrorMessage("未知异常: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/project/exceptinhandle/NetworkExceptionHandler.java b/project/exceptinhandle/NetworkExceptionHandler.java new file mode 100644 index 0000000..4e0f970 --- /dev/null +++ b/project/exceptinhandle/NetworkExceptionHandler.java @@ -0,0 +1,26 @@ +package com.crawler.exception.handler; + +import com.crawler.exception.HttpRequestException; +import com.crawler.exception.NetworkException; +import com.crawler.exception.TimeoutException; +import com.crawler.exception.ExceptionHandler; +import com.crawler.view.CrawlerView; + +public class NetworkExceptionHandler implements ExceptionHandler { + @Override + public void handle(Exception e, CrawlerView view) { + if (e instanceof HttpRequestException) { + HttpRequestException ex = (HttpRequestException) e; + view.showErrorMessage("HTTP请求失败,状态码: " + ex.getStatusCode()); + } else if (e instanceof TimeoutException) { + view.showErrorMessage("网络连接超时,请稍后重试"); + } else { + view.showErrorMessage("网络异常: " + e.getMessage()); + } + } + + @Override + public Class getSupportedExceptionType() { + return NetworkException.class; + } +} \ No newline at end of file