HTTP method POST is not supported by this URL

頁面表單提交爲什麼會出現這個情況呢?

HTTP Status 405 - HTTP method POST is not supported by this URL

jsp頁面跳轉到servlet,

jsp 頁面代碼如下:

<%@ page language="java" pageEncoding="UTF-8"%>
  <!DOCTYPE HTML>
  <html>
    <head>
      <title>文件上傳</title>
    </head>
    
    <body>
     <form action="${pageContext.request.contextPath}/send" enctype="multipart/form-data" method="post">
        上傳用戶:<input type="text" name="username"><br/>
         上傳文件1:<input type="file" name="file1"><br/>
         上傳文件2:<input type="file" name="file2"><br/>
         <input type="submit" value="提交">
     </form>
   </body>
 </html>


servlet中代碼如下:

package org.ht.logistic.action;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;


import java.net.SocketTimeoutException;




import java.util.Iterator;
import java.util.List;




import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;


import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
  


//import org.apache.tomcat.util.http.fileupload.FileItem;
//
//import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
//import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
//import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;








public class UpLoadFileAction extends HttpServlet{//實現文件上傳


public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{


 
System.out.println("你妹的我擦");

//得到上傳文件的保存目錄,將上傳的文件存放於項目中的upload文件夾下
        String savePath =  request.getSession().getServletContext().getRealPath("../../webapps/upload");
         System.out.println(savePath); 
       
    
       //上傳時生成的臨時文件保存目錄
      String tempPath =  request.getSession().getServletContext().getRealPath("../../webapps/temp");
    
       File tmpFile = new File(tempPath);
       if (!tmpFile.exists()&&!tmpFile.isDirectory()) {
      System.out.println("臨時存放目錄不存在,須創建");
          //創建臨時目錄
           tmpFile.mkdir();
           
       }
     
     
      
       String message = "";
          
        try{  
       
         
            //使用Apache文件上傳組件處理文件上傳步驟:
              //1、創建一個DiskFileItemFactory工廠
             DiskFileItemFactory factory = new DiskFileItemFactory();
              //設置工廠的緩衝區的大小,當上傳的文件大小超過緩衝區的大小時,就會生成一個臨時文件存放到指定的臨時目錄當中。
             
            // factory.setSizeThreshold(1024*100);
             //設置上傳時生成的臨時文件的保存目錄
             factory.setRepository(tmpFile);
              //2、創建一個文件上傳解析器
             ServletFileUpload upload = new ServletFileUpload(factory);
       
       
            //監聽文件上傳進度
          System.out.println("setProgressListener begin");
          upload.setProgressListener(new ProgressListener(){
                public void update(long pBytesRead, long pContentLength, int arg2) {
                   System.out.println("文件大小爲:" + pContentLength + ",當前已處理:" + pBytesRead);
                   /**
                     * 文件大小爲:14608,當前已處理:4096
                                                                                       文件大小爲:14608,當前已處理:7367
                                                                                      文件大小爲:14608,當前已處理:11419
                                                                                         文件大小爲:14608,當前已處理:14608
                    */
               }
           });
           
          System.out.println("setProgressListener end");
           //解決上傳文件名的中文亂碼
            upload.setHeaderEncoding("UTF-8"); 
            
            //設置上傳單個文件的大小的最大值,目前是設置爲1024*1024字節,也就是10MB
            upload.setFileSizeMax(1024*1024*10);
           //設置上傳文件總量的最大值,最大值=同時上傳的多個文件的大小的最大值的和,目前設置爲5000MB
            upload.setSizeMax(1024*1024*50*10);
            
          //3、判斷提交上來的數據是否是上傳表單的數據
           if(!ServletFileUpload.isMultipartContent(request)){
                   //按照傳統方式獲取數據
          System.out.println("不執行以下內容");
                       return;
                     }
            
            //4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合
           


            StringBuffer url = request.getRequestURL();
             if (request.getQueryString() != null) {
             url.append("?");
             url.append(request.getQueryString());
            }
            System.out.println("url="+url);
            
            System.out.println("進入超時前");
            
//            try{
            
            List<FileItem>  list =(List<FileItem>)upload.parseRequest(request);
              
                     System.out.println("進入超時後");
           
           System.out.println("圖片大小是"+list.size());//打印獲得文件圖片的大小
           
for (FileItem item : list) {
// 如果fileitem中封裝的是普通輸入項的數據
if (item.isFormField()) {
String name = item.getFieldName();
// 解決普通輸入項的數據的中文亂碼問題
String value = item.getString("UTF-8");
// value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
} else {// 如果fileitem中封裝的是上傳文件
// 得到上傳的文件名稱
String filename = item.getName();// 獲取上傳文件名,包括路徑


System.out.println(filename);


if (filename == null || filename.trim().equals("")) {
continue;
}
                
                   filename = filename.substring(filename.lastIndexOf("\\")+1);
                   //得到上傳文件的擴展名
                   String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
                   //如果需要限制上傳的文件類型,那麼可以通過文件的擴展名來判斷上傳的文件類型是否合法
                    System.out.println("上傳的文件的擴展名是:"+fileExtName);
                  
                   
                  
                   
                  
                   //創建一個文件輸出流
                   //FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
                   FileOutputStream out=new FileOutputStream(new File(savePath,filename));
                   //獲取item中的上傳文件的輸入流
                   InputStream in = item.getInputStream();
                   
                   System.out.println("item.size="+item.getSize());
                   
                   
                   //創建一個緩衝區
                   byte buffer[] = new byte[1024];
                    //判斷輸入流中的數據是否已經讀完的標識
                    int len = 0;
                   //循環將輸入流讀入到緩衝區當中,(len=in.read(buffer))>0就表示in裏面還有數據
                    while((len=in.read(buffer))>0){
                       //使用FileOutputStream輸出流將緩衝區的數據寫入到指定的目錄當中
                        out.write(buffer, 0, len);
                    }
                    
                    in.close();  
                    out.close(); 
                    message = "文件上傳成功!";
                           
             } 

}

//        }catch(FileUploadException e){
//             e.printStackTrace();
//             System.out.println("讀取上傳文件失敗");
//            
//            }  

        }catch(SocketTimeoutException e){  
            e.printStackTrace();  
            System.out.println("讀取超時");
        }catch(Exception ex){
       
        System.out.println(ex.toString());
       
        } 



//
//       //使用Apache文件上傳組件處理文件上傳步驟:
//     //1、創建一個DiskFileItemFactory工廠
//    DiskFileItemFactory factory = new DiskFileItemFactory();
//     //設置工廠的緩衝區的大小,當上傳的文件大小超過緩衝區的大小時,就會生成一個臨時文件存放到指定的臨時目錄當中。
//   
//   // factory.setSizeThreshold(1024*100);
//    //設置上傳時生成的臨時文件的保存目錄
//    factory.setRepository(tmpFile);
//    //2、創建一個文件上傳解析器
//    ServletFileUpload upload = new ServletFileUpload(factory);
//
//
//
// List list=null;
//
// try {
// System.out.println("開始執行");
// list = upload.parseRequest(request);
//
//        
// System.out.println("文件是" + list);
// } catch (Exception e) {
// System.out.println("讀取前端所傳圖片失敗");
// e.printStackTrace();
// }
// Iterator iter = list.iterator(); // 依次處理每個上傳的文件
// while (iter.hasNext()) {
// FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表單信息
// if (!item.isFormField()) {
// String name = item.getName();// 獲取上傳文件名,包括路徑
// name = name.substring(name.lastIndexOf("\\") + 1);// 從全路徑中提取文件名
// System.out.println("文件名是:" + name);
// long size = item.getSize();
// if ((name == null || name.equals("")) && size == 0)
// continue;
// // int point = name.indexOf(".");
// // name=(new
// // Date()).getTime()+name.substring(point,name.length())+index;
// // index++;
// File fNew = new File(savePath, name);
// try {
// item.write(fNew);
//
// } catch (Exception e) {
//             
// e.printStackTrace();
// System.out.println("上傳圖片至服務器失敗");
// }
//
// } else// 取出不是文件域的所有表單信息
// {
// String fieldvalue = item.getString();
// // 如果包含中文應寫爲:(轉爲UTF-8編碼)
// // String fieldvalue = new
// // String(item.getString().getBytes(),"UTF-8");
// }
// }
//       
//       
//       
//       
       
       
       
        request.setAttribute("message",message);
        request.getRequestDispatcher("pages/message.jsp").forward(request, response);
        
       //response.sendRedirect("pages/message.jsp");
       
       
       
       
}


public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{


doGet(request, response);
}






}


大神知道的支點招

發佈了23 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章