Java 什么JAR包含getPart()方法?

Java 什么JAR包含getPart()方法?,java,mysql,jsp,Java,Mysql,Jsp,我试图从Apache7.0服务器上传一个文件到mySQL数据库。我写了html代码来上传一个文件 <form action="UploadValidate.jsp" method="post" enctype="multipart/form-data"> <fieldset> <legend><font size="4" color="white">File Upload</font></legend><

我试图从Apache7.0服务器上传一个文件到mySQL数据库。我写了html代码来上传一个文件

<form action="UploadValidate.jsp" method="post" enctype="multipart/form-data">
    <fieldset>
    <legend><font size="4" color="white">File Upload</font></legend><br/><br/>
    <font size="4" color="white"><b>
    <h3> Select File to Upload</h3> &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
    <input type="file"name="file" /><br/><br/>

    <center>
    <input type="submit" value="Upload File" /><br/><br/></center>

    </font>
    </fieldset>
</form>

文件上传

选择要上载的文件



这是UploadValidate.jsp

      <%@ page import="java.io.*,java.sql.*,java.lang.String.*,com.oreilly.servlet.*"%>
      <%
       InputStream inputstream=null;
       String str=request.getParameter("file");
       Part filePart=request.getPart(str);
       out.println(filePart);
       if(filePart!=null){
           out.println(filePart.getName());
           out.println(filePart.getSize());
           out.println(filePart.getContentType());
           //output the inputstream of uploaded file
           inputstream=filePart.getInputStream();
        }
       else{
       out.println("cannot execute if condition");
        }
      %>
     <%
    try{
    String message=null;
    int id=123;
    String url="jdbc:mysql://localhost:3306/Project";
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection(url,"root","admin");
    String sql="INSERT INTO uploadfile(id,file) VALUES(?,?)";
    PreparedStatement stmt=con.prepareStatement(sql);
    stmt.setInt(1,id);
    if(inputstream!=null){
        stmt.setBlob(2,inputstream);
    }
    int row=stmt.executeUpdate();
    if(row>0){
        out.print("<h3><font color=red> Success Welcome!!!!!<br><br> </font></h3>");
    }
}catch(Exception e){
    e.printStackTrace();
}
//session.setAttribute("Message",message);
//response.sendRedirect("Message.jsp");
   %>

0){
打印(“欢迎成功!!!

”; } }捕获(例外e){ e、 printStackTrace(); } //session.setAttribute(“消息”,消息); //sendRedirect(“Message.jsp”); %>
即使我选择了要上载的文件,filePart对象仍返回null event。如果bolck返回,它将终止
“如果条件为空,则无法执行空”作为输出。

要回答实际问题,获取空返回值的原因有两个。首先,守则:

   String str=request.getParameter("file");
   Part filePart=request.getPart(str);
应该是

   Part filePart = request.getPart("file");
但是,至关重要的是,
request.getPart
方法是一个Servlet3.0特性,它需要使用带有注释的Servlet(而不是JSP文件)

然而,该准则中充斥着不良做法

如评论中所述,十多年来一直不鼓励使用Scriptlet;您应该首先使用servlet作为某种控制器,然后使用如下方式(在内部)转发到JSP视图:

request.getRequestDispatcher("/WEB-INF/jsp/view.jsp").forward(request, response);
HTML元素也被弃用多年

最后,有很多库可以帮助上传文件。例如


这不是一个好主意。JSP中的Scriptlet代码在1999年过时了。不要这样做。调试器会很快告诉你哪里出错了。你为什么要重新发明轮子?网络上有很多例子。例如,请参阅,您可以看到如何处理“多部分/表单数据”我尝试使用Part filePart=request.getPart(“文件”);但无法获得结果。它返回null。我已编辑了我的答案,以解释为什么
request.getPart(“文件”)
也不起作用。您确实需要将代码从JSP移到Servlet中。如果您确实想将其保存在JSP中,则需要使用Apache Commons FileUpload来处理上载。