HTTP method POST is not supported by this URL

来源:互联网 发布:win7公用网络无法修改 编辑:程序博客网 时间:2024/06/06 01:04

页面表单提交为什么会出现这个情况呢?

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






}


大神知道的支点招

1 0