Как отправить параметры портлету с помощью jquery

У меня есть форма на моей странице jsp. В этой форме я выбираю файл (zip-архив) и после нажатия кнопки «Отправить» вызываю сервлет, чтобы загрузить этот файл. Для загрузки файла я использую библиотеку Apache Commons FileUlpoad. После загрузки im распаковать архив. Их я переписываю на этот jsp.

код 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 из портлета?

person Kliver Max    schedule 27.06.2012    source источник


Ответы (1)


Используя 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. После того, как сервлет будет готов, просто используйте средство записи ответов, чтобы написать ответ обратно (если он содержит много данных, я бы рекомендовал отправить ответ в форме json, см. здесь), а затем вызывается обратный вызов успеха, и вы можете делать с этими данными все, что захотите.

ВАЖНО: поскольку вы отправляете форму, вам необходимо использовать e.preventDefault (), поэтому форма не будет фактически отправлена, а будет обработана вашим ajax.

person Tomer    schedule 27.06.2012
comment
Tnx для anawer. Подскажите еще кое-что. Что лучше использовать в портлете для загрузки файлов? org.apache.commons.fileupload.portlet или скрипт jquery? - person Kliver Max; 28.06.2012
comment
И что я напишу в портлете для анализа данных, отправленных jquery. - person Kliver Max; 28.06.2012
comment
Что касается загрузки файлов, я никогда этого не делал, поэтому не знаю. Что касается манипуляций с json в java, используйте Google Gson. Отметьте ответ, если он вам нравится. - person Tomer; 28.06.2012