使用springmvc 统一异常时出现如下异常,是什么原因

15:11 提问
用springMVC框架做文件上传时遇到问题
我是基于red5服务器。来用springMVC框架做文件上传。在上传文件时遇到错误。
@RequestMapping(value = "/upload.do",method = RequestMethod.POST)
public String upload(HttpServletRequest request,
HttpServletResponse response, String string) {
System.out.println("==================run in import");
System.out.println("--------------" + request.getParameter("upload"));
// 创建一个通用的多部分解析器.
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 设置编码
commonsMultipartResolver.setDefaultEncoding("utf-8");
System.out.println("++++++commonsMultipartResolver.isMultipart(request) : " + commonsMultipartResolver.isMultipart(request));
// 判断是否有文件上传
if (commonsMultipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest = commonsMultipartResolver
.resolveMultipart(request);
Iterator&String& iter = multipartRequest.getFileNames();
System.out.println("+++++++++++iter = "+iter.toString());
// iter里面没有值
while (iter.hasNext()) {
MultipartFile file = multipartRequest.getFile((String) iter.next());
if (file != null) {
File localFile = new File("/WEB-INF/upload"
+ file.getOriginalFilename());
// file.transferTo(localFile);
System.out.println("=======1====");
file.transferTo(localFile);
System.out.println("====222=======");
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// 批量上传
// Map&String, MultipartFile& fileMap = request.getFileMap();
// for(Entry&String, MultipartFile& entry : fileMap.entrySet()){
// MultipartFile file = entry.getValue();
// file.transferTo(new File("/WEB-INF/upload" +
// file.getOriginalFilename()));
// } catch(IllegalStateException e){
// e.printStackTrace();
// }catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
return "up";
上传文件后,在我指定的地方没有找到文件。测试发现
if (commonsMultipartResolver.isMultipart(request)) 这个地方获得的是false,我这个action没有接收到上传的文件,但是通过System.out.println("--------------" + request.getParameter("upload"));获取到了我上传文件的文件名。
通过上网查找,我在配置文件中配置了MultipartResolver处理器
&!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --&
&!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 --&
&!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException --&
&!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 --&
&bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"&
&property name="exceptionMappings"&
&!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 --&
&prop key="org.springframework.web.multipart.MaxUploadSizeExceededException"&error_fileupload&/prop&
&/property&
如果我在代码最上面写
MultipartHttpServletRequest rrr = (MultipartHttpServletRequest)
他就会报转化错误
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
不知道现在是什么问题,求解啊!
按赞数排序
SpringMVC里面有个专门处理文件上传的请求参数(好像叫MultilePart什么),但是到达upload函数时,Spring自身已经吧临时文件储存到本地了,所以文件比较大就悲剧了,需要拷贝一次。
文件较大时,建议直接用Servlet处理,可以参考Stream 上传插件:
你前台的标签上要加上传递附件的声明
enctype就是对上传附件的声明
不然后台就会因为无法匹配附件资源 无法解析 而造成转换的异常
form标签 加上 enctype="multipart/form-data" 属性
其他相似问题
相关参考资料链接:/blog/1297746 (附源码)
链接:/blog/983801
链接:/xguo/p/3163519.html
链接:/blog/947191
链接:http://blog.csdn.net/FansUnion/article/details/
链接:/blog/1547197(附源码)
Spring3.0对异常的处理通过HandlerExceptionResolver来实现。HandlerExceptionResolver有4个实现类DefaultHandlerExceptionResolver、AnnotationMethodExceptionResolver、ResponseStatusExceptionResolver、SimpleMappingExceptionResolver。
Spring3.0对异常的处理主要可通过这两种方式:一种是使用HandlerExceptionResolver接口;一种是在@Controller处理器内部使用@ExceptionHandler注解。使用第一种方式可以实现全局异常控制,并且Spring已经提供了一个默认的实现类SimpleMappingExceptionResolver;使用第二种方式可以在Controller内部实现更个性化异常处理方式。
---方式一:HandlerExceptionResolver接口,复写resolveException()方法
springmvc通过HandlerExceptionResolver处理程序的异常,该接口仅有一个方法ModelAndView
resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)。我们可复写该方法实现全局异常的处理。
当发生异常时,springmvc会调用resolveException()方法,并返回一个ModelAndView对象。如果该方法返回了null,Spring会搜索所有注册在其环境中的实现了HandlerExceptionResolver接口的Bean,逐个执行,直到返回一个ModelAndView对象,最后转到ModelAndView对应的视图作为一个异常报告页面!
* 基于HandlerExceptionResolver接口的异常处理类
* 这个类必须声明到Spring中去,让Spring管理它,你可以使用@Component标签:
&context:component-scan base-package=&test.*& /&
* 或者使用在配置文件通过&bean/&节点配置:
&bean id=&exceptionResolver& class=&test.CustomExceptionHandler &/&
@Component
public class CustomExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
if(exception instanceof IOException){
return new ModelAndView(&ioexp&);
}else if(exception instanceof SQLException){
return new ModelAndView(&sqlexp&);
---区分ajax请求和普通http请求进行异常处理返回:
* 说明:当在系统应用中出现普通异常时,根据是系统异常还是应用异常,跳到相应的界面,
* 当ajax异常时,在ajax的error中可直接获得异常。普通的异常我们都配置好了界面,系统会自动跳转。
public class CustomSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver {
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// Expose ModelAndView for chosen error view.
String viewName = determineViewName(ex, request);
if (viewName != null) {// JSP格式返回
if (!(request.getHeader(&accept&).indexOf(&application/json&) & -1 || (request
.getHeader(&X-Requested-With&)!= null && request
.getHeader(&X-Requested-With&).indexOf(&XMLHttpRequest&) & -1))) {
// 如果不是异步请求
// Apply HTTP status code for error views, if specified.
// Only apply it if we&re processing a top-level request.
Integer statusCode = determineStatusCode(request, viewName);
if (statusCode != null) {
applyStatusCodeIfPossible(request, response, statusCode);
return getModelAndView(viewName, ex, request);
} else {// JSON格式返回
PrintWriter writer = response.getWriter();
writer.write(ex.getMessage());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
---方式二:@ExceptionHandler
AnnotationMethodExceptionResolver:springmvc也默认配置了AnnotationMethodExceptionResolver,它允许通过@ExceptionHandler指定处理特定异常的方法。@ExceptionHandler:处理同一个类内触发的局部异常(如果要让其处理多个需拦截异常的处理器,则可另其他类继承此类!)
@Controller
//可以被其他处理器继承
public class MyExceptionFilter {
//该处理器类中的所有方法抛出的异常都可由此方法捕获并处理
//该注解也可制定多个异常类,如@ExceptionHandler(value={IOException.class,SQLException.class})
@ExceptionHandler(Exception.class)
public String handleException(Exception e, HttpServletRequest req) {
System.out.println(&exception name: & + e.getClass().toString());//异常名
System.out.println(&exception cause: & + e.getCause());
System.out.println(&exception msg: & + e.getLocalizedMessage());
//e.printStackTrace();
StackTraceElement[] ste = e.getStackTrace();
StringBuffer sb_e = new StringBuffer();
for(int j=0;j&ste.j++){
if(ste[j].toString().contains(&xxxx&)) {
sb_e.append(ste[j].toString()+&,
System.out.println(&Exception detail: &);//异常详细信息
System.out.println(sb_e.toString());
StringBuffer sbUrl = new StringBuffer();//拼url
System.out.println(&request method: &+req.getMethod());//get,post
System.out.println(&request encode: & + req.getCharacterEncoding());//编码
System.out.println(&request mapping: &+req.getRequestURL().toString());//请求url方法
sbUrl.append(req.getRequestURL().toString());
Enumeration en = req.getParameterNames();//请求参数-值
for(int i=0; en.hasMoreElements(); i++){
String arg = en.nextElement().toString();
sbUrl.append(&?&);
sbUrl.append(&&&);
sbUrl.append(arg + &=& + req.getParameterValues(arg)[0]);
System.out.println(&request url: & + sbUrl.toString());
if(ex instanceof BusinessException) {
return &error-business&;
}else if(ex instanceof ParameterException) {
return &error-parameter&;
return &error&;
return &forward:error.jsp&;
---方式三:SimpleMappingExceptionResolver
SimpleMappingExceptionResolver:可对全局异常进行统一处理。
&bean class=&org.springframework.web.servlet.handler.SimpleMappingExceptionResolver&&
&!--设置日志输出级别,不定义则默认不输出警告等错误日志信息。链接:/blog/875830 --&
&property name=&warnLogCategory& value=&WARN& /&
&!-- 默认错误页面,就是不在exceptionMappings指定范围内 --&
&property name=&defaultErrorView& value=&error&&&/property&
&!-- 定义需要特殊处理的异常,如当发生IOException异常时跳转到error/ioexp视图--&
&property name=&exceptionMappings&&&span style=&font-family: Arial, Helvetica, sans-&&&!—key为异常类,可以是全路径,错误页面或Controller路径!会自动跳转到对应url --&&/span&
&prop key=&IOException&&redirect:/login&/prop&
&prop key=&java.sql.SQLException&&error/sqlexp&/prop&
&/property&
---方式四:&error-page&
DefaultHandlerExceptionResolver:Springmvc默认装配了DefaultHandlerExceptionResolver,它会将springmvc的异常转换成对应的响应状态码(500,404等)。对于Unchecked Exception而言,由于代码不强制捕获,往往被忽略,如果运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的404、500……等服务器内部错误提示页面。
我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在web.xml中通过&error-page&(Websphere/Weblogic)或者&error-code&(Tomcat)节点配置特定异常情况的显示页面。(springmvc)操作如下:
1.在web.xml中配置响应状态码对应的页面,如:
&error-page&
&error-code&500&/error-code&
&location&/WEB-INF/pages/error/500.jsp&/location&
&/error-page&
&!-- 未捕获的错误,同样可指定其它异常类,或自定义异常类 --&
&error-page&
&exception-type&java.lang.Exception&/exception-type&
&location&/uncaughtException&/location&
&/error-page&
2. applicationContext.xml中配置
&!-- 错误路径和错误页面,注意指定viewResolver --&
&mvc:view-controller path=&/404& view-name=&404&/&
&mvc:view-controller path=&/500& view-name=&500&/&
&mvc:view-controller path=&/uncaughtException& view-name=&uncaughtException&/&
附:.hk/search?newwindow=1&safe=strict&espv=210&es_sm=93&q=error+page%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8&revid=&sa=X&ei=ORwOU7K_INKbiQeTjIG4BA&ved=0CIcBENUCKAE&biw=1440&bih=737
---方式五:Spring3.2新注解@ControllerAdvice
链接:/blog/1866350
@ControllerAdvice,是spring3.2提供的新注解。会把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法(全局的)
有一次发现springmvc3.2.x的@ControllerAdvice注解不起作用,参考链接/linux/spring3_2_mvc__ControllerAdvice_buqizuoyong_5786240.html加上@EnableWebMvc后就可以了。但是,后来又发现会导致这个原因是因为项目的springmvc配置文件中没有配置&mvc:annotation-driven /&,于是将其配置上。但是配置上&mvc:annotation-driven /&后问题就来了,启动的时候就报异常,看了下原因,感觉是@EnableWebMvc注解导致的,于是将该注解删除掉,果然就正常启动了。不过,至于其中的原理还是理解不深刻,不知道内部是怎么调用的,只是发现当配置上&mvc:annotation-driven /&的时候不应该用@EnableWebMvc修饰@ControllerAdvice。(待研究)附链接:/blog/1738599。/?p=196。
测试后发现,当全局异常和局部异常都存在时,全局异常处理会被局部异常处理覆盖。
* 全局异常
//@EnableWebMvc
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception re, HttpServletRequest request) {
System.out.println(&error.......&);
return &forward:error.jsp&;
相关 [spring mvc 异常处理] 推荐:
- 编程语言 - ITeye博客
链接:/blog/1297746 (附源码). 链接:/blog/983801 . 链接:/xguo/p/3163519.html . 链接:/blog/947191 .
- 互联网 - ITeye博客
源:/blog/1547197. 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理. 每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大.
- 博客园_首页
Spring MVC中异常处理的类体系结构. 下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现HandlerExceptionResolver接口. AbstractHandlerExceptionResolver实现该接口和Orderd接口,是HandlerExceptionResolver类的实现的基类.
- CSDN博客架构设计推荐文章
Web层面的框架学习了三个Struts1和2,SpringMVC,那他们之间肯定存在一个优劣和适用的环境,Struts1和2的异同点我已经做过对比《
Struts1和Struts2》,这篇将对比下Struts2和SpringMVC的异同,下面数据基本来源于网络,本人是搜集整理所得,供大家参考. 一个项目使用什么样的技术,决定的因素很多,我所能想到的有:对系统的性能、开发的效率、团队学习的成本、业务场景等,下面尽量从这几个方面入手,来分析比较下他们之间存在的优劣.
- CSDN博客推荐文章
springmvc 框架围绕DispatcherServlet这个核心展开,DispatcherServlet是Spring MVC的总控制,它负责截获请求并将其分派给相应的处理器处理. SpringMVC框架包括注解驱动控制器、请求及响应的信息处理、视图解析、本地化解析、上传文件解析、异常处理以及表单标签绑定等内容.
- 码蜂笔记
项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开发环境,我会怎么做. 下面就是我的想法,只关注于 MVC 的 View 层. 现在基本上都是用 ajax 来调用后台接口,拿到 json格式的数据再展示,有的人直接返回数据,却没有考虑异常的情况,我觉得返回的报文里必须包含表示可能的异常信息的数据和业务响应数据.
- Java译站
10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准. 然而多年过后,我发现Spring MVC已经越来越流行了. 对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性. 从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误.
- 企业架构 - ITeye博客
大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了. Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 官方的下载网址是:
http://www.springsource.org/download
(本文使用是的Spring 3.0.5版本).
- 企业架构 - ITeye博客
Spring MVC Controller单例陷阱. 标签:Spring mvc. 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明. Spring MVC Controller默认是单例的:. 1、这个不用废话了,单例不用每次都new,当然快了. 2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例.
- 企业架构 - ITeye博客
一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理、后处理. Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度. Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&使用eclipse 导入maven项目spring-mvc-showcase出现如下错误
在使用eclipse导入maven项目spring-mvc-showcase的时候出现了错误:
Multiple annotations found at this line:
- Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:aspectj-maven-plugin:1.3:test-
compile (execution: default, phase: test-compile)
- Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:aspectj-maven-plugin:
1.3:compile (execution: default, phase: compile)
在eclipse运行 maven install的时候出现了如下错误log:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project spring-mvc-showcase: Error occurred in starting fork, check output in log -& [Help 1]
[ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
后来发现是pom.xml文件aspectj-maven-plugin插件的问题
然后把关于aspectj-maven-plugin的标签替换成下面的就解决了
&groupId&org.eclipse.m2e&/groupId&
&artifactId&lifecycle-mapping&/artifactId&
&version&1.0.0&/version&
&configuration&
&lifecycleMappingMetadata&
&pluginExecutions&
&pluginExecution&
&pluginExecutionFilter&
&groupId&org.codehaus.mojo&/groupId&
&artifactId&aspectj-maven-plugin&/artifactId&
&versionRange&[1.0.0,)&/versionRange&
&goal&some-goal&/goal&
&/pluginExecutionFilter&
&ignore /& or &execute /&
&/pluginExecution&
&/pluginExecutions&
&/lifecycleMappingMetadata&
&/configuration&
可能是插件的版本不对应
As for Maven/M2E, you need to familiarize yourself with . Then you need to add something like this to your pom.xml
参考/questions//cannot-run-spring-mvc-example
相关文章:spring mvc 的这个异常是什么原因导致的_百度知道
spring mvc 的这个异常是什么原因导致的
我有更好的答案
什么异常呢?
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 springmvc 自定义异常 的文章

 

随机推荐