java spring mvc 404错误_springmvc自定义404错误处理

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

6936d1565ae689371725cdb5fc51c415.png

这里用到的处理方式是重写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 {

@Override

protected 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 {

@Override

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

Mapmodel = new HashMap();

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页面代码:

66d4f68f02cf67839ec827c1a020fefd.png

3,配置web.xml,如下:

SpringMVC

...MyDispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

true

SpringMVC

/

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

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

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

5ab3c9859ca0e9e6c451c8228d056df1.png

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

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

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

fdeef2edf5dbe2064a5d41e5bd9581d9.png

可以看到,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);

}

}

就这么简单!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值