頁面表單提交爲什麼會出現這個情況呢?
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);
}
}
大神知道的支點招