2019独角兽企业重金招聘Python工程师标准>>>

这里用到的处理方式是重写DispatcherServlet这个类的noHandlerFound方法。

1,创建一个类并继承org.springframework.web.servlet.DispatcherServlet,代码如下:

import com.chaofan.www.core.exception.SystemException;
import org.springframework.web.servlet.DispatcherServlet;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Created by junko on 2017/5/25.*/
public class MyDispatcherServlet extends DispatcherServlet {@Overrideprotected void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception {throw new SystemException("页面不存在");}
}

可以看到代码只有简单地一行,直接抛异常,为什么呢,因为这样子我们可以用统一异常处理来处理。

2,创建一个类并实现org.springframework.web.servlet.HandlerExceptionResolver

import com.alibaba.fastjson.JSONObject;
import com.chaofan.www.core.exception.*;
import com.chaofan.www.core.util.JsonResult;
import com.chaofan.www.core.util.ToolWeb;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** Created by junko on 2017/4/18.*/
@Component
public class MyExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {Map<String, Object> model = new HashMap<String, Object>();model.put("ex", ex);// 根据不同错误转向不同页面if(ex instanceof SystemException) {return new ModelAndView("error-system", model);} else {return new ModelAndView("error", model);}}
}

可以看到处理方式很简单,直接跳转到error-system.html页面(这里我的文件后缀是设置成.html的),当然你可以抛你想要的任何异常,也可以跳转到任意你想要的页面,方式都一个样。

error-system.html页面代码:

3,配置web.xml,如下:

<!-- Spring MVC servlet -->
<servlet><servlet-name>SpringMVC</servlet-name><servlet-class>...MyDispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported>
</servlet>
<servlet-mapping><servlet-name>SpringMVC</servlet-name><!-- /* 会出现跳转jsp页面渲染源码而不是解析后的页面--><url-pattern>/</url-pattern>
</servlet-mapping>

这里我们不再是DispatcherServlet了,而是我们上面自定义的MyDispatcherServlet,注意路径不要写错了。

4,配置spring-mvc.xml,如下:

<!--自定义dispatcherServlet后不能使用-->
<!--<mvc:default-servlet-handler/>-->
<!--静态资源映射-->
<mvc:resources mapping="/assets/**" location="/assets/"></mvc:resources>
<mvc:resources mapping="/file/**" location="/file/"></mvc:resources>
<mvc:resources mapping="/UI/**" location="/UI/"></mvc:resources>

这里要注意,因为我们试用了自定义的DispatcherServlet,所以<mvc:default-servlet-handler/>要注释掉,不然它还是走默认的DispatcherServlet请求,然后我们需要为静态资源配置路径映射,比如我们原来引入某个js的路径是这样的:/assets/backend/js/app.js,如下图:

现在我们需要配置映射,如下:

<mvc:resources mapping="/assets/**" location="/assets/"></mvc:resources>

可以看到,只要配置根目录即可,同理,其他的也是类似的写法。

启动项目,我们尝试访问一个不存在的资源路径:http://localhost:9090/wechat/user/add

可以看到,404已经成功跳转到我们配置的页面上去了。

附上SystemException代码:

public class SystemException extends Exception {public SystemException() {super();}public SystemException(String message) {super(message);}public SystemException(String message, Throwable cause) {super(message, cause);}
}

就这么简单!

转载于:https://my.oschina.net/junko2013/blog/909291

springmvc自定义404错误处理相关推荐

  1. 在ASP.NET MVC3项目中,自定义404错误页面

    在Web开发中,用户体验是至关重要的,一个友好的网站自然少不了自定义404错误页面. 让笔者为大家介绍404错误页面在ASP.NET MVC3项目中的配置: 第一步,在项目的Web.config文件中 ...

  2. 15个创意示例教您如何自定义 404 错误页面

    在这篇文章中,你会看到一组充满创意的404错误页面设计.我希望这个集合能够启发和帮助你设计自己的 404 错误页面.一个自定义的404错误页面将鼓励用户在您的网站上停留更长的时间. 404页面必须让访 ...

  3. cPanel设置自定义404错误页

    利用这个cpanel的错误页工具,你就可以定制错误页面了.设置自定义404错误页,有两种简单的方法. 一,利用cpanel后台控制面板添加设置404自定义错误页的方法 步骤        1.登录cP ...

  4. SpringMVC中404错误解决方法总结

    SpringMVC中404错误解决方法总结 参考文章: (1)SpringMVC中404错误解决方法总结 (2)https://www.cnblogs.com/shangjun/p/6411353.h ...

  5. iis php 404错误页面,IIS自定义404错误页面

    404.503错误相信大多数站长朋友很对很熟悉,网站刚刚搭建完成后我们一般都会做一个404和503错误页面.那么这是怎么操作的呢?熟悉我的朋友们一定会记得我前段时间写的一篇<Apache服务器实 ...

  6. android webview 自定义404错误页面!

    自定义404页面.android的webview 控件可以加载网页,webview有两个方法:webView.setWebChromeClient和webView.setWebViewClient. ...

  7. ASP.NET 自定义404错误页面

    默认情况下微软已经在 Web.config 加入了如下代码: <customErrors mode="RemoteOnly" defaultRedirect="Ge ...

  8. centos7 php 404,CentOS7 Apache环境配置自定义404错误页面怎么解决

    我的万云数据ECS用的 CentOS 7系统,我想在网站实现 自定义的 404页面,之前已经做了 伪静态,现在 修改了 根目录的 .htaccess, 也加了 404.html 在根目录,但是随机访问 ...

  9. android webview 加载进度和自定义404错误页面

    原帖地址:http://www.cnblogs.com/winxiang/archive/2012/10/25/2738320.html 自定义404页面.android的webview 控件可以加载 ...

最新文章

  1. mysql top 语句简介
  2. Java、Python、JS、C语言,哪个更值得学?
  3. Git之深入解析48个经典操作场景的分析和处理,专治不会合并代码
  4. 哈希表-set/数组
  5. 653. Two Sum IV - Input is a BST
  6. SELinux 案例 1
  7. 易筋SpringBoot 2.1 | 第三十篇:SpringBoot Reactor响应式编程介绍
  8. 数字信号处理matlab版答案,数字信号处理(MATLAB版)
  9. C++:深入理解C++11新特性:Chapter3:左值和右值
  10. office2019怎么在同一个窗口显示多个文件
  11. Web API-添加Swagger,SQL Server,记录并导出到Excel
  12. 跨平台桌面应用的开发框架——Electron
  13. 李阳疯狂英语-228句口语要素
  14. 拉勾数据分析实战训练营
  15. 干涉仪解模糊matlab,基于多级虚拟基线的干涉仪测向方法与FPGA仿真实现
  16. 基于32单片机的16通道ADC的数据采集
  17. Kaptcha验证码实现
  18. 解决samba文件共享服务因445端口被禁不能访问问题
  19. 数据结构在.net加密解密反流程混淆中的应用[看雪学院2006金秋读书季]
  20. 假期怕剧荒?五一假期追剧人正确打开方式

热门文章

  1. mysql主从的原理_Mysql主从的原理
  2. 计算机文化基础第二次答案,中国石油大学2020年秋计算机文化基础第二次在线作业答案...
  3. oracle rds 运维服务_从Oracle一条新闻说起,为什么我们需要更好更开放的RDS服务?...
  4. java easyui条件组合查询_EasyUi+Spring Data 实现按条件分页查询
  5. linux防火墙多个 多个ip配置,iptables一次性封多个ip,使用ipset 工具
  6. php ds扩展,PHP教程:老生常谈PHP中的数据结构:DS扩展
  7. java编写八数码_java实现八数码
  8. python json.dumps参数_json.dumps参数之解
  9. python到底是啥_Python语言中的__init__到底是干什么的?
  10. 数字计算机的分类依据,数字计算机模拟计算机分类依据