2012-06-27 1 views
0

내 JSP 페이지에 양식이 있습니다. 이 양식에서 파일 (zip 아카이브)을 선택하고 submmit call servlet을 클릭하여이 파일을 업로드하십시오. 파일 업로드에 대해서는 Apache Commons FileUlpoad 라이브러리를 사용하십시오. 업로드 후 메신저 아카이브 압축을 풉니 다. 저것은 내가이 jsp를 redict 않습니다.포틀릿 사용 매개 변수를 보내는 방법 jquery

JSP 코드 :

<form action="Upload_Servlet" method="post" enctype="multipart/form-data"> 
    <div id="up"> 
     <input id="fileUpload1" type="file" name="filename1"value="Browse..."/> 
    </div> 
    <div> 
     <input id="btnSubmit" type="submit" value="Загрузить"> 
     <input type="button" id="del" onclick="deleting()" value="Удалить"> 
    </div> 
</form> 

서블릿 코드 :

public class uploadfile extends HttpServlet 
{ 

public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, java.io.IOException { 
    System.out.println(response.getCharacterEncoding()); 
    response.setCharacterEncoding("UTF-8"); 
    System.out.println(response.getCharacterEncoding()); 
    response.setContentType("text/html"); 
    PrintWriter writer = response.getWriter(); 
    writer.println("wtpwebapps<br/>"); 
    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    if (!isMultipart) { 
     writer.println("<HTML>"); 
      writer.println("<HEAD <TITLE> Upload4 </TITLE> </HEAD>"); 
      writer.println("<BODY>"); 
      writer.println("<FORM action = \"Upload_Servlet\" method = \"post\" enctype = \"multipart/form-data\">"); 
      writer.println("<INPUT type = file name = ufile>"); 
      writer.println("<INPUT type = submit value = \"Attach\">"); 
      writer.println("<h1>its not multipart</h1>"); 
      writer.println("</FORM>"); 
      writer.println("</BODY>"); 
      writer.println("</HTML>"); 
      return; 
     }   
    FileItemFactory factory = new DiskFileItemFactory(); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    List<FileItem> list=null; 
    String mifpath= "1"; 
    String path = " "; 
    String mif = " "; 
    String from = "\\\\"; 
    String to ="/"; 
    String error=""; 
    try{ 
     list = upload.parseRequest(request); 
     Iterator<FileItem> it = list.iterator(); 
     response.setContentType("text/html"); 
     while (it.hasNext()) 
     { 

     FileItem item = (FileItem) it.next(); 
     File disk = new File("C:/uploaded_files/"+item.getName()); 

      path = disk.toString(); 

      String code = new String(path.substring(path.lastIndexOf("."), path.length()).getBytes("ISO-8859-1"),"utf-8"); 
      if (code.equalsIgnoreCase(".zip")) 
      { 
       mifpath=path; 
       mif = mifpath.replaceAll(from, to); 
       item.write(disk); 
       error=unzip.unpack(mif, "C:/uploaded_files"); 
      } 
      else 
      { 
       error = "Выбранный файл не является архивом zip"; 

      } 
     } 
    } 
    catch (Exception e) { 
     log("Upload Error" , e); 
    } 
    request.setAttribute("error", error); 
    request.getRequestDispatcher("/Home.jsp").forward(request, response); 

    // String redictedURL="http://localhost:8080/redicted_test/Home.jsp"; 
    // response.sendRedirect(redictedURL); 
    writer.close(); 
    } 
} 

이 지금은 포털에서이 작업을 수행 할 수. 그 파일을 업로드 한 후 내 JSP를 다시로드하고 싶지 않다는 뜻입니다. 그래서 Jquery를 사용해야합니다. 그리고 몇 가지 질문이 있습니다 :

  1. 내 경우에 jquery를 사용하여 양식을 제출하는 방법은 무엇입니까?
  2. 내 서블릿 코드가 포틀릿에서 작동합니까?
  3. 포틀릿에서 매개 변수를 jps로 보내는 방법은 무엇입니까?

답변

0

는 jQuery를 쉽게 수행 할 수 있습니다 사용 :

  1. (또는 양식에 제출) 제출 버튼에 클릭 이벤트를 설정합니다. 서블릿
  2. 포스트 데이터 : 서블릿이 완료

    $.ajax({ 
         url : base_url + 'Upload_Servlet', 
         type : "post", 
         data:$('form').serialize(),    
         cache : false, 
         success : function(data) { 
          //do some stuff 
    
        }, 
        error : function(xhr, status, err) { 
         //do error stuff 
        }, 
        timeout : 3000 
        }); 
        //End ajax call 
    
  3. 후, 그냥에서 응답을 전송하는 것이 좋습니다 것, 그것은 많은 양의 데이터가 포함되어있는 경우 (되돌려 aswer를 작성하는 응답 라이터를 사용 json의 형식, here 참조) 성공 콜백이 호출되고이 데이터로 원하는대로 할 수 있습니다. 중요

: 당신이 양식을 제출하기 때문에, 당신은 이렇게 양식이 실제로 제출되지 않습니다 e.preventDefault()를 사용하는 것이 아니라 당신의 아약스에 의해 handeled 할 필요가있다.

+0

anawer 용 Tnx. 한 가지 더 말해 줄 수 있어요? 파일 업로드를 위해 포틀릿에서 사용하는 것이 더 나은 점은 무엇입니까? org.apache.commons.fileupload.portlet 또는 jquery 스크립트? –

+0

jquery에서 보낸 데이터를 구문 분석하기 위해 포틀릿에 쓸 내용. –

+0

fileupload에 관해서는 나는 결코 그것을하지 않았다 그래서 나는 모른다. Java에서 json 조작에 관해서는 Google의 Gson을 사용하십시오. 원한다면 답을 표시하십시오. – Tomer