您的位置:首页 > 理论基础 > 计算机网络

HTTP method POST is not supported by this URL

2016-02-25 17:32 429 查看
页面表单提交为什么会出现这个情况呢?


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);

}

}

大神知道的支点招
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: