`
qq466862016
  • 浏览: 128542 次
  • 来自: 杭州
社区版块
存档分类
最新评论

有关springmvc3.1.3文件上传,出现400 的错误问题!

阅读更多

       使用SptingMVC3.1.3 对于文件上传提交的表单我们都会设置:enctype="multipart/form-data" 的一个设置, 那么值得注意的问题出现了, 对于表单post提交的数据无法绑定到后台的参数中, 紧接着服务器会向浏览器客户端抛HTTP STATUS 400 的错误, 或者出现 类型转换的的异常, 这个问题从开始一直困扰着我好些天,一直都不能解决这个问题,这个问题一直困扰自己好些天。 先贴出自己的错误的 服务器端会向Broswer返回 400 的bad request 的错误! 看看大家能否看出错误的地方?大家一起帮忙找找错误在哪里? 

贴以前的错误配置代码 :

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name>springmvc</display-name>	
  
  
  
  <filter>
  	<filter-name>characterEncoding</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>characterEncoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  <servlet>
  	<servlet-name>spring</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>spring</servlet-name>
  	<url-pattern>/spring/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:aop="http://www.springframework.org/schema/aop"
		xmlns:context="http://www.springframework.org/schema/context"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
				http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
				<!-- 启动配置包的扫描注解 -->
				<context:component-scan base-package="com.springmvc.simples"/>
				<!-- 配置springmvc的注解的配置的支持 -->
				<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
				<!-- 配置 文件上传的支持 -->
				<bean  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
					<property name="maxUploadSize" value="1024000000"/>
					<property name="resolveLazily" value="true"/>
					<property name="maxInMemorySize" value="4096"/>
					<property name="defaultEncoding" value="UTF-8"/>
				</bean>
				
				<!-- 配置视图解析器 -->
				
				<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
					<property name="basenames">
						<list>
							<value>views</value>
						</list>
					</property>
					<property name="defaultParentView" value="default"/>
				</bean>
				
				</beans>

 

default.(class)=org.springframework.web.servlet.view.JstlView
default.url=/jsps/index.jsp

 

package com.springmvc.simples.controller;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;


/**
 * 文件上传: 单个文件上传  与多个文件的上传
 * @version 1.0  @author 高元东
 *@mailto 466862016@qq.com
 * 2013-1-21
 */
@Controller
@Scope("prototype")
@RequestMapping("/fileupload")
public class FileUploadActionController {
	
	
	@RequestMapping(value ="/uploadOne",method=RequestMethod.POST)
	public String fileUploadOne(
		@RequestParam("file")	MultipartFile file) {
		
	/*	if(!file.isEmpty()) {
			
			System.err.println("file name :" +file.getOriginalFilename());
		}*/
		System.err.println("okokoko");
		return "default";
	}
	
}

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>首页</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    
    
    <center>
    
    	<a href="<c:url value='/spring/annotation/a'/>">springmvc注解的配置 无参数的测试</a>  <br>
    	<a href="<c:url value='/spring/annotation/b?name=tom'/>">springmvc注解的配置 无参数为字符串的配置</a><br>
    	<a href="<c:url value='/spring/annotation/JACK/c.info'/>">springmvc注解的配置 基于RESTFULL字符串的配置</a><br>
    	<a href="<c:url value='/spring/annotation/24/JACK/d_5.html'/>">springmvc注解的配置 基于RESTFULL多参数的配置</a>
    	
    	<hr>
    	<h2>文件上传部分</h2>
    	
    	<h3>单个文件上传.....</h3>
    	<form action="<c:url value='/spring/fileupload/uploadOne'/>" method="post" enctype="multipart/form-data">
    		<input type="file" name="file"><br>
    		<input type="submit" >
    	</form>
    </center>
  </body>
</html>

  代码上传完毕!看看能否看出哪里出错了 ,去网上求解, 网上有大量文件上传的例子, 都看和自己的配置差不多,都是大同小异 , 自己实在是没有办法, 自己只有跟源码一步一步的进行调试 跟下去,加上log4j日志。 对应Springmvc的调试跟代码 跟源码那也要有一个入口点, 就像Struts2一样 ,的有一个核心过滤器 StrutsPreparedAndExecuteFilter ,而对应我们的springmvc的核心类  那就是DispatcherServlet 此类就是Springmvc的核心, 学springmvc我们都知道这个servlet是做什么用的,简单的来说它是处理一个请求,并提供映射和异常处理的功能! 我们看看此Servlet的大纲视图  看看 有什么猫咪 ? 晕?? 这怎么有个成员变量 》???

 

 


 
 

哦  它的是从 这个命名空间中的bean的工厂中获取的bean的名称: ??  不敢确定  ? 

看着像我们在xml中配置的那个bean  ????  难道  ??? 真是? 看看能否有什么set  方法吗???

 我们继续往下找, 单可以肯定在启动项目的时候会进行一系列的初始化我们在 xml配置的那些处理器  也就是我们的handler  Resolver 



 

一大片都是 resolver  




 
 

 

直接把它卡在源代码的456行   :: 



 

不看什么 看logger日志我们都知道 , 要查找名称为:multipartResolver 的bean  再看我们的代码:  娘的, 真的少加id=“multipartResolver ”了。



 

那肯定是我们配置的org.springframework.web.multipart.commons.CommonsMultipartResolver 根本没有起到作用, 一定要加上id=“multipartResolver ” 不然, 在你的项目进行启动的时候会找不到这样的bean的。 小小的错误,小小的失误 真的很烦人。

  输出的日志::



 

很明显  我们配置的org.springframework.web.multipart.commons.CommonsMultipartResolver  根本没有起到作用!! 对应别人的代码我们只能参考吗, 不能一味的去copy  不跟自己有空自己去看看源码,

正确的是::

 



 

 

 

 

 

最后   要注意的是  : 在我们配置的bean中一定要加上 id ="multipartResolver"  不然你配置的也没有用的  。 不然你的表单设置成  multipart/form-data  是无法绑定参数的  会出现类型转换的异常!

在写的地方哪里有不清楚的地方,请见谅,我也是项目的需要 ,刚刚碰Springmvc 。把正确简单的demo 上传上去。

  • 大小: 11.3 KB
  • 大小: 9.9 KB
  • 大小: 19.4 KB
  • 大小: 19.7 KB
  • 大小: 20.6 KB
  • 大小: 6.8 KB
  • 大小: 9.7 KB
  • 大小: 9.7 KB
  • 大小: 8.9 KB
2
2
分享到:
评论
4 楼 qq466862016 2013-01-23  
从DispatcherServlet开始跟起源码 ,总算知道哪里出错了!问题已经解决。谢谢大家·!!
3 楼 beiyeren 2013-01-22  
我当时做这个的时候,直接看的官方文档。上边写的有明确介绍。建议大家不明白一个新功能的时候,以官方文档为主,如果不容易理解,可以根据其中的关键字段google。效果应该不错。当然了,官网可能也有错误,实践出真知把。
2 楼 qq466862016 2013-01-21  
我也是刚刚接触springmvc , 以后我们多多交流下!
1 楼 diaozhanming 2013-01-21  
我把你的代码和我们项目的比对了下,结果还是没发现这个问题。关于mvc,希望以后可以多交流。断断续续用了也一年多了。

相关推荐

    SpringMVC文件上传,多文件上传实例

    在这个“SpringMVC文件上传,多文件上传实例”中,我们将深入探讨如何在SpringMVC环境中实现文件上传功能,包括单个文件上传以及多个文件的批量上传。 1. **文件上传原理**: 文件上传是通过HTTP协议的POST请求来...

    IDEA SpringMVC 实现文件的上传下载

    在实际项目中,需要注意文件上传的安全问题,比如防止恶意文件上传、限制文件类型和大小、使用安全的文件命名策略等。此外,下载时应确保文件路径不会暴露敏感信息。 7. **IDEA的使用**: IntelliJ IDEA提供了...

    SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

    在SpringMVC框架中,文件上传和下载是常见的功能需求,尤其在...在实际项目中,还需要考虑错误处理、文件大小限制、安全性(防止路径遍历攻击等)等问题。在提供的链接中,有更详细的步骤和代码示例,可以参考学习。

    基于springmvc实现文件上传下载 基于AOP的日志功能

    基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于...

    springMvc单文件多文件上传

    springMvc 文件上传,springMvc 支持单文件和多文件上传,

    springMVC多文件上传demo

    在处理多文件上传时,可能遇到文件过大、文件类型不合法等问题,需要在代码中添加适当的异常处理机制。 8. **前端界面** 前端页面通常使用HTML5的`FormData`对象来构建上传请求。可以使用JavaScript库如jQuery、...

    基于springMVC的文件上传功能

    为了提高用户体验,应处理可能出现的异常,如文件过大、文件类型不匹配等,将错误信息返回给用户。 7. **安全考虑** 在实际应用中,要注意文件上传的安全性,防止恶意文件上传,比如通过限制文件类型、大小,以及...

    springMVC 上传文件方式

    springMVC 上传文件方式springMVC 上传文件方式springMVC 上传文件方式

    JavaEE企业级开发-----SpringMVC实现 文件的上传下载实验报告.docx

    在JavaEE企业级开发中,SpringMVC框架是广泛用于构建Web应用程序的工具,它提供了丰富的功能,包括处理文件上传和下载。本实验报告将详细阐述如何利用SpringMVC实现文件上传与下载的功能。 首先,文件上传的核心...

    SpringMVC上传文件 SSH上传文件

    4. **错误处理**:提供良好的错误处理机制,当文件不存在或下载过程中发生问题时,能够给用户清晰的反馈。 总的来说,SpringMVC和SSH都提供了完善的文件上传与下载功能。选择哪种方式取决于你的项目结构、团队熟悉...

    尚硅谷SpringMVC上传文件

    在使用springMVC进行系统实现时,springMVC默认的解析器里面是没有加入对文件上传的解析的,这可以方便我们实现自己的文件上传。但如果你想使用springMVC对文件上传的解析器来处理文件上传的时候就需要在spring的...

    SpringMVC文件上传Demo代码

    在SpringMVC中实现文件上传是一项常见的任务,它允许用户通过表单将本地文件发送到服务器进行存储或处理。这个"SpringMVC文件上传Demo代码"是一个实例,演示了如何配置和使用SpringMVC来实现这一功能。 首先,我们...

    SpringMVC+Ajax异步文件上传

    在现代Web应用中,文件上传是一项常见的功能,尤其是在多媒体丰富的平台。`SpringMVC`作为Java后端的一个强大框架,...在实际开发中,还需要考虑安全性、错误处理以及性能优化等问题,确保文件上传功能的稳定和高效。

    springmvc带进度条上传源码

    在Spring MVC框架中实现文件上传并提供进度条功能是一项实用且复杂的任务,涉及到前端与后端的交互以及数据传输过程的监控。以下是对这个主题的详细解析。 首先,我们需要理解Spring MVC的基本工作原理。Spring MVC...

    springMVC上传文件.zip_springmvc_上传文件_文件上传

    文件上传过程中可能会出现各种问题,例如文件过大、文件类型不受支持等。因此,需要捕获并处理`MultipartException`及其子类,向用户返回错误信息。 7. **配置** 在SpringMVC的配置中,需要启用MultipartResolver...

    springMVC文件上传所需jar包

    以上就是关于SpringMVC文件上传所需jar包的相关知识,这两个jar文件是实现文件上传功能的关键组件。使用它们,开发者可以方便地处理用户的文件上传请求,确保数据的安全传输和存储。在实际项目中,还需要注意文件...

    Springmvc上传文件.docx

    SpringMVC 上传文件详解 SpringMVC 框架中上传文件是非常常见的操作,今天我们来详细讲解 SpringMVC 中的文件上传过程。 文件上传的必要条件 在 SpringMVC 中,文件上传需要满足以下几个条件: 1. 表单的 ...

    springMVC文件上传demo(亲测有效)

    本示例是一个完整的SpringMVC文件上传的Demo,具有实用性,且经过测试有效。下面将详细介绍这个Demo的实现原理和关键知识点。 1. **文件上传组件** SpringMVC利用`CommonsMultipartResolver`来处理文件上传请求。...

Global site tag (gtag.js) - Google Analytics