当前位置:首页 > 后端开发 > 正文

Java如何捕获404异常?

在Java Web开发中捕获404异常,可通过以下方式实现:,1. 使用Spring框架时,通过 @ControllerAdvice配合 @ExceptionHandler(NoHandlerFoundException.class)全局处理。,2. 在Servlet应用中配置web.xml的“标签指定 404错误处理器。,3. 通过过滤器或拦截器检查响应状态码,对HttpServletResponse.SC_NOT_FOUND(404)进行拦截处理。

在Java Web应用中,404状态码表示客户端请求的资源不存在,作为开发者,捕获并优雅处理404异常能提升用户体验和系统可维护性,以下是几种主流实现方案:

Spring MVC 全局异常处理(推荐)

通过@ControllerAdvice和@ExceptionHandler实现:

Java如何捕获404异常? 第1张

关键配置(在application.properties中):

spring.mvc.throw-exception-if-no-handler-found=true spring.web.resources.add-mappings=false

Servlet容器级错误页面(传统Web项目)

在web.xml中定义错误页面:

Java如何捕获404异常? 第2张

<error-page> <error-code>404</error-code> <location>/error/404.html</location> </error-page>

创建对应的HTML文件:

<!-- /WEB-INF/views/error/404.html --> <h1>404 错误</h1> <p>您访问的页面不存在</p>

Spring Boot自定义ErrorController

实现ErrorController接口处理所有错误:

@RestController public class CustomErrorController implements ErrorController { @RequestMapping("/error") public ResponseEntity<Map<String, Object>> handleError(HttpServletRequest request) { Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); if (statusCode == 404) { return ResponseEntity.status(404) .body(Map.of("error", "Not Found", "path", request.getRequestURI())); } return ResponseEntity.status(500).body(Map.of("error", "Server Error")); } }

前端控制器兜底方案

在DispatcherServlet中配置默认处理器:

@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/**") .setStatusCode(HttpStatus.NOT_FOUND) .setViewName("forward:/error/404"); } }

最佳实践建议

  1. 优先级选择
    • Spring Boot项目优先使用@ControllerAdvice
    • 纯Servlet项目用web.xml配置
  2. 日志记录:在处理器中添加日志记录404请求路径
  3. 友好响应
    • REST API返回JSON格式错误信息
    • 网页应用返回定制化HTML页面
  4. 重定向处理:避免将404重定向到首页(可能导致SEO问题)

注意事项

  • Tomcat默认跳过小于400字节的404响应(可通过server.error.whitelabel.enabled=false关闭默认白页)
  • 确保静态资源路径配置正确,避免误报404


引用说明

本文解决方案参考Oracle官方Servlet规范文档、Spring Framework 5.3.x异常处理文档及Spring Boot 2.7.x错误处理机制,关键配置项依据Spring官方GitHub示例代码验证。

Java如何捕获404异常? 第3张

0