Code Bye

关于SpringMVC的自定义异常的问题

 

Spring的配置文件如下:

<!-- 全局异常配置 start 控制器异常处理 com.example.myexception.MyExceptionCustom-->  
    <bean id="exceptionResolver" class="com.example.myexception.MyExceptionCustom">
    
        <property name="exceptionMappings">
              <props>
                  <prop key="java.lang.Exception">500</prop>
                  <prop key="java.lang.Throwable">500</prop>
                  <prop key="java.sql.SQLException">sqlError</prop>
                   <prop key="java.net.ConnectException">showDBError</prop>
                   <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 --> 
                <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error</prop>   
            </props>
        </property>
        
        <property name="statusCodes">     
             <props>     
                <prop key="errors/error">500</prop>     
                 <prop key="errors/404">404</prop>     
             </props>     
         </property>     

       <property name="warnLogCategory" value="info"></property> 
        
      <property name="defaultErrorView" value="500"></property>   

      <property name="defaultStatusCode" value="500"></property>  
    </bean>
 	<!-- 全局异常配置 end --> 

异常类如下:


public class MyExceptionCustom extends SimpleMappingExceptionResolver implements
		HandlerExceptionResolver {
	private Logger log = Logger.getLogger(InitListener.class);
	@Override
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object arg2, Exception exception) {
		ModelAndView modelAndView = new ModelAndView();

		if (exception instanceof IOException) {
			System.out.println(1);
		} else 
			if (exception instanceof SQLException) {
			System.out.println(2);
			log.error("Fail to initial connect mysql Database.22 " );
		} else if (exception instanceof ConnectException) {
			modelAndView.addObject("msg", "连接失败!");
			modelAndView.setViewName("showDBError");
			log.error("Fail to initial connect mysql Database.33 " );
		} else if (exception instanceof JDBCConnectionException) {
			modelAndView.addObject("msg", "连接失败!");
			modelAndView.setViewName("showDBError");
			log.error("Fail to initial connect mysql Database.44 " );
		}

		PrintWriter writer;
		try {
			writer = response.getWriter();
			writer.write("ajax error info");
			writer.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return modelAndView;

	}

}

请问下为什么当系统产生异常之后,为什么根本都没执行到上面的方法里面来呢?
谢谢。

其实我想实现的就是,比如说链接不上数据库了,我就讲用户导航到错误页面,并提示数据库链接失败。

不通的异常导航到不同的页面。谢谢。

你xml内容是写在哪里的,貌似只能配置到spring mvc的配置文件里。
只有解析器,没有配处理器吧?Handler
你没有抛出异常把,抛出那里接收都没有写

10分
http://blog.csdn.net/lwphk/article/details/39500569
这个文章,看看就知道。
引用 1 楼 whos2002110 的回复:

你xml内容是写在哪里的,貌似只能配置到spring mvc的配置文件里。

跟这个配置到哪里是没关系的。

引用 3 楼 juanmiao 的回复:

你没有抛出异常把,抛出那里接收都没有写

比如我项目启动的时候, 

这时候我数据库是关闭的,
打开项目,访问,页面就要提示数据库连接失败!

引用 4 楼 lwphk 的回复:

http://blog.csdn.net/lwphk/article/details/39500569
这个文章,看看就知道。

我就是这样高的啊,(3)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; 

但是就是那个方法进不去。


10分
MyExceptionCustom你的这个要注入到spring容器里面  @Component 或者在文件里面配置

10分
引用 8 楼 lwphk 的回复:

MyExceptionCustom你的这个要注入到spring容器里面  @Component 或者在文件里面配置

@Component  

这个已经注入了 也还是一样的效果。。


20分
首先我试了你的那个,我这里完全可以进入方法,可能是你其他哪里的问题了。你的那个配置希望是配置在spring mvc的那个serlvet那个下面扫描的。 其次 ①你可以把你配置文件里面处理异常的配置删除了,直接使用MyExceptionCustom?实现HandlerExceptionResolver ,这个方式会优先的处理错误,如果在这里面跳转页面,配置文件里面的错误配置压根不会起作用
②你那里modelAndView.setViewName(“xx”) 意味着你已经在跳转页面了,你再用write输出毫无意义。
 ③:你可以直接在controller里面跑一个异常,然后访问他一步步调试,或许你的程序压根没有错误
引用 10 楼 lwphk 的回复:

首先我试了你的那个,我这里完全可以进入方法,可能是你其他哪里的问题了。你的那个配置希望是配置在spring mvc的那个serlvet那个下面扫描的。 其次 ①你可以把你配置文件里面处理异常的配置删除了,直接使用MyExceptionCustom?实现HandlerExceptionResolver ,这个方式会优先的处理错误,如果在这里面跳转页面,配置文件里面的错误配置压根不会起作用
②你那里modelAndView.setViewName(“xx”) 意味着你已经在跳转页面了,你再用write输出毫无意义。
 ③:你可以直接在controller里面跑一个异常,然后访问他一步步调试,或许你的程序压根没有错误

把我上面的那段xml的配置全删掉?我明天试试。谢谢。


50分
引用 11 楼 w156445045 的回复:
Quote: 引用 10 楼 lwphk 的回复:

首先我试了你的那个,我这里完全可以进入方法,可能是你其他哪里的问题了。你的那个配置希望是配置在spring mvc的那个serlvet那个下面扫描的。 其次 ①你可以把你配置文件里面处理异常的配置删除了,直接使用MyExceptionCustom?实现HandlerExceptionResolver ,这个方式会优先的处理错误,如果在这里面跳转页面,配置文件里面的错误配置压根不会起作用
②你那里modelAndView.setViewName(“xx”) 意味着你已经在跳转页面了,你再用write输出毫无意义。
 ③:你可以直接在controller里面跑一个异常,然后访问他一步步调试,或许你的程序压根没有错误

把我上面的那段xml的配置全删掉?我明天试试。谢谢。

 怎么样了?

引用 12 楼 lwphk 的回复:
Quote: 引用 11 楼 w156445045 的回复:
Quote: 引用 10 楼 lwphk 的回复:

首先我试了你的那个,我这里完全可以进入方法,可能是你其他哪里的问题了。你的那个配置希望是配置在spring mvc的那个serlvet那个下面扫描的。 其次 ①你可以把你配置文件里面处理异常的配置删除了,直接使用MyExceptionCustom?实现HandlerExceptionResolver ,这个方式会优先的处理错误,如果在这里面跳转页面,配置文件里面的错误配置压根不会起作用
②你那里modelAndView.setViewName(“xx”) 意味着你已经在跳转页面了,你再用write输出毫无意义。
 ③:你可以直接在controller里面跑一个异常,然后访问他一步步调试,或许你的程序压根没有错误

把我上面的那段xml的配置全删掉?我明天试试。谢谢。

 怎么样了?

可以 没问题,谢谢。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于SpringMVC的自定义异常的问题