天天看點

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

使用SptingMVC3.1.3 對于檔案上傳送出的表單我們都會設定:enctype="multipart/form-data" 的一個設定, 那麼值得注意的問題出現了, 對于表單post送出的資料無法綁定到背景的參數中, 緊接着伺服器會向浏覽器用戶端抛HTTP STATUS 400 的錯誤, 或者出現 類型轉換的的異常, 這個問題從開始一直困擾着我好些天,一直都不能解決這個問題,這個問題一直困擾自己好些天。 先貼出自己的錯誤的 伺服器端會向Broswer傳回 400 的bad request 的錯誤! 看看大家能否看出錯誤的地方?大家一起幫忙找找錯誤在哪裡? 

貼以前的錯誤配置代碼 :

web.xml

Web.xml代碼:  

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  7.   <display-name>springmvc</display-name>       
  8.   <filter>  
  9.     <filter-name>characterEncoding</filter-name>  
  10.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  11.   </filter>  
  12.   <filter-mapping>  
  13.     <filter-name>characterEncoding</filter-name>  
  14.     <url-pattern>  
  15. @Controller  
  16. @Scope("prototype")  
  17. @RequestMapping("/fileupload")  
  18. public class FileUploadActionController {    
  19.     @RequestMapping(value ="/uploadOne",method=RequestMethod.POST)  
  20.     public String fileUploadOne(  
  21.         @RequestParam("file")   MultipartFile file) {  
  22.         System.err.println("okokoko");  
  23.         return "default";  
  24.     }     
  25. }  

Index.jsp代碼: 

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>首頁</title>  
  7.     <meta http-equiv="pragma" content="no-cache">  
  8.     <meta http-equiv="cache-control" content="no-cache">  
  9.     <meta http-equiv="expires" content="0">      
  10.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  11.     <meta http-equiv="description" content="This is my page">  
  12.     <!--  
  13.     <link rel="stylesheet" type="text/css" href="styles.css">  
  14.     -->  
  15.   </head>   
  16.   <body>   
  17.     <center>  
  18.         <a href="<c:url value='/spring/annotation/a'/>">springmvc注解的配置 無參數的測試</a>  <br>  
  19.         <a href="<c:url value='/spring/annotation/b?name=tom'/>">springmvc注解的配置 無參數為字元串的配置</a><br>  
  20.         <a href="<c:url value='/spring/annotation/JACK/c.info'/>">springmvc注解的配置 基于RESTFULL字元串的配置</a><br>  
  21.         <a href="<c:url value='/spring/annotation/24/JACK/d_5.html'/>">springmvc注解的配置 基于RESTFULL多參數的配置</a>  
  22.         <hr>  
  23.         <h2>檔案上傳部分</h2>  
  24.         <h3>單個檔案上傳.....</h3>  
  25.         <form action="<c:url value='/spring/fileupload/uploadOne'/>" method="post" enctype="multipart/form-data">  
  26.             <input type="file" name="file"><br>  
  27.             <input type="submit" >  
  28.         </form>  
  29.     </center>  
  30.   </body>  
  31. </html>  

  代碼上傳完畢!看看能否看出哪裡出錯了 ,去網上求解, 網上有大量檔案上傳的例子, 都看和自己的配置差不多,都是大同小異 , 自己實在是沒有辦法, 自己隻有跟源碼一步一步的進行調試 跟下去,加上log4j日志。 對應Springmvc的調試跟代碼 跟源碼那也要有一個入口點, 就像Struts2一樣 ,的有一個核心過濾器 StrutsPreparedAndExecuteFilter ,而對應我們的springmvc的核心類  那就是DispatcherServlet 此類就是Springmvc的核心, 學springmvc我們都知道這個servlet是做什麼用的,簡單的來說它是處理一個請求,并提供映射和異常處理的功能! 我們看看此Servlet的大綱視圖  看看 有什麼貓咪 ? 暈?? 這怎麼有個成員變量 》???

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

哦  它的是從 這個命名空間中的bean的工廠中擷取的bean的名稱: ??  不敢确定  ? 

看着像我們在xml中配置的那個bean  ????  難道  ??? 真是? 看看能否有什麼set  方法嗎???

 我們繼續往下找, 單可以肯定在啟動項目的時候會進行一系列的初始化我們在 xml配置的那些處理器  也就是我們的handler  Resolver 

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

一大片都是 resolver  

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

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

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

不看什麼 看logger日志我們都知道 , 要查找名稱為:multipartResolver 的bean  再看我們的代碼:  娘的, 真的少加id=“multipartResolver ”了。

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

那肯定是我們配置的org.springframework.web.multipart.commons.CommonsMultipartResolver 根本沒有起到作用, 一定要加上id=“multipartResolver ” 不然, 在你的項目進行啟動的時候會找不到這樣的bean的。 小小的錯誤,小小的失誤 真的很煩人。

  輸出的日志::

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

很明顯  我們配置的org.springframework.web.multipart.commons.CommonsMultipartResolver  根本沒有起到作用!! 對應别人的代碼我們隻能參考嗎, 不能一味的去copy  不跟自己有空自己去看看源碼,

正确的是::

有關springmvc3.1.3檔案上傳,出現400 的錯誤問題
有關springmvc3.1.3檔案上傳,出現400 的錯誤問題
有關springmvc3.1.3檔案上傳,出現400 的錯誤問題

 原文參考自站長網http://www.software8.co/wzjs/qtyy/2819.html

最後   要注意的是  : 在我們配置的bean中一定要加上 id ="multipartResolver"  不然你配置的也沒有用的  。 不然你的表單設定成  multipart/form-data  是無法綁定參數的  會出現類型轉換的異常!

在寫的地方哪裡有不清楚的地方,請見諒,我也是項目的需要 ,剛剛碰Springmvc 。把正确簡單的demo 上傳上去。

轉載于:https://www.cnblogs.com/wwwroot/archive/2013/01/22/2871560.html