-1

次のように、サーブレットを使用してファイルのアップロードを処理する必要があります。

 package com.limrasoft.image.servlets;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.annotation.*;
    import java.sql.*;

    @WebServlet(name="serv1",value="/s1")
    public class Account extends HttpServlet{
        public void doPost(HttpServletRequest req,HttpServletResponse res)throws 
        ServletException,IOException{
            try{
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connecection con=null;
                try{
                    con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","sajid");
                    PrintWriter pw=res.getWriter();
                    res.setContentType("text/html");
                    String s1=req.getParameter("un");
                    string s2=req.getParameter("pwd");
                    String s3=req.getParameter("g");
                    String s4=req.getParameter("uf");
                    PreparedStatement ps=con.prepareStatement("insert into account(?,?,?,?)");
                    ps.setString(1,s1);
                    ps.setString(2,s2);
                    ps.setString(3,s3);
                    File file=new File("+s4+");
                    FileInputStream fis=new FileInputStream(fis);
                    int len=(int)file.length();
                    ps.setBinaryStream(4,fis,len);
                    int c=ps.executeUpdate();
                    if(c==0){pw.println("<h1>Registratin fail");}
                    else{pw.println("<h1>Registration fail");}
                }
                finally{if(con!=null)con.close();}
            }
            catch(ClassNotFoundException ce){pw.println("<h1>Registration Fail");}
            catch(SQLException se){pw.println("<h1>Registration Fail");}
            pw.flush();
            pw.close();
        }
    }

しかし、エラーページが表示されます:

HTTP ステータス 500 - Servlet3.java (指定されたファイルが見つかりません)

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

0

アップロードされたファイルのコンテンツを HTTP リクエストから抽出していないようです。ファイルのみを収集し、サーバーの現在の作業ディレクトリに対する相対パスでその周りにを構築しています。このコードを書いているときに何を考えていたのかわかりませんが、webbrowser が webserver とは物理的に異なるマシンで実行されている場合、同じローカル ディスク ファイル システムを共有しないため、単にファイル名を渡すだけでは機能しません。new File()

代わりに、リクエストでファイル コンテンツ全体を渡す必要があります。multipart/form-dataこれは、HTML フォームでエンコーディングを使用することで実現できます。

<form action="s1" method="post" enctype="multipart/form-data">

ここで、サーブレットに で注釈を付けて、サポート@MultipartConfigを有効にmultipart/form-dataします。

@WebServlet("/s1")
@MultipartConfig
public class Account extends HttpServlet {

次に、アップロードされたファイルを抽出するには、HttpServletRequest#getPart().

Part s4 = req.getPart("uf");

ファイルの内容InputStreamPart#getInputStream(). したがって、すべて、次のコード

String s4=req.getParameter("uf");
// ...
File file=new File("+s4+");
FileInputStream fis=new FileInputStream(fis);
int len=(int)file.length();
ps.setBinaryStream(4,fis,len);

に置き換える必要があります

Part s4 = req.getPart("uf");
// ...
ps.setBinaryStream(4, s4.getInputStream());

以下も参照してください。

于 2012-10-23T18:09:29.437 に答える