页面表单提交为什么会出现这个情况呢?
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);
}
}
大神知道的支点招