• servlet错误:HTTP Status 405


    // 导入必需的 java 库
    import java.io.;
    import java.util.
    ;

    import javax.servlet.ServletConfig;
    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.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    public class UploadServlet extends HttpServlet {

    private boolean isMultipart;
    private String filePath;
    private int maxFileSize = 50 * 1024;
    private int maxMemSize = 4 * 1024;
    private File file ;

    public void init( ){
    // 获取文件将被存储的位置
    filePath =
    getServletContext().getInitParameter("file-upload");
    }
    public void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, java.io.IOException {
    // 检查我们有一个文件上传请求
    isMultipart = ServletFileUpload.isMultipartContent(request);
    response.setContentType("text/html");
    java.io.PrintWriter out = response.getWriter( );
    if( !isMultipart ){
    out.println("");
    out.println("");
    out.println("Servlet upload");
    out.println("");
    out.println("");
    out.println("

    No file uploaded

    ");
    out.println("");
    out.println("");
    return;
    }
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // 文件大小的最大值将被存储在内存中
    factory.setSizeThreshold(maxMemSize);
    // Location to save data that is larger than maxMemSize.
    factory.setRepository(new File("c: emp"));

      // 创建一个新的文件上传处理程序
      ServletFileUpload upload = new ServletFileUpload(factory);
      // 允许上传的文件大小的最大值
      upload.setSizeMax( maxFileSize );
    
      try{ 
      // 解析请求,获取文件项
      List fileItems = upload.parseRequest(request);
    
      // 处理上传的文件项
      Iterator i = fileItems.iterator();
    
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      while ( i.hasNext () ) 
      {
         FileItem fi = (FileItem)i.next();
         if ( !fi.isFormField () )	
         {
            // 获取上传文件的参数
            String fieldName = fi.getFieldName();
            String fileName = fi.getName();
            String contentType = fi.getContentType();
            boolean isInMemory = fi.isInMemory();
            long sizeInBytes = fi.getSize();
            // 写入文件
            if( fileName.lastIndexOf("\") >= 0 ){
               file = new File( filePath + 
               fileName.substring( fileName.lastIndexOf("\"))) ;
            }else{
               file = new File( filePath + 
               fileName.substring(fileName.lastIndexOf("\")+1)) ;
            }
            fi.write( file ) ;
            out.println("Uploaded Filename: " + fileName + "<br>");
         }
      }
      out.println("</body>");
      out.println("</html>");
    

    }catch(Exception ex) {
    System.out.println(ex);
    }
    }
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, java.io.IOException {

        throw new ServletException("GET method used with " +
                getClass( ).getName( )+": POST method required.");
    

    }
    }

    编译运行后,会出现

    如果注释掉最后的doGet方法,会报错

    错误原因:
    (一)出错原因是doPost方法用于处理前台提交的数据,当form表单属性method="post"时,doPost方法才被调用。当用servlet类的URL直接访问servlet时,发送的是HTTP请求,servlet默认调用doGet()方法,而源程序里没有重写父类的doGet()方法,父类的doGet()方法不被此种URL支持,所以出现HTTP method GET is not supported by this URL这种错误。
    (二)HTTP请求传参:路径+请求语句,例:http://localhost:8080/test/r?age=123&name=defbv

  • 相关阅读:
    for() 和$.each()的用法区别
    HTML5 UTF-8 中文乱码
    chrome,opera..通过file协议浏览html代码时,发送的ajax请求本地文件,会报跨域错误
    局部方法$("html").load()和全局方法$.get()、$.post()
    iOS开发--动画篇之layout动画深入
    iOS 开发--转场动画
    iOS开发--泛型
    Python十分钟学会
    iOS 开发--动画
    一个简单的ObjC和JavaScript交互工具
  • 原文地址:https://www.cnblogs.com/cyy-13/p/5711132.html
Copyright © 2020-2023  润新知