2016-09-21 4 views
0

좋은 날, 팀,부두로 파일 전송

나는 jetty (proof of concept)로 간단한 파일 전송을 만드는 작업을했습니다. 아이디어는 내 자바 데스크톱 응용 프로그램 # 1에서 Jetty 웹 서버로 파일을 업로드 한 다음 응용 프로그램 # 2에서이 파일을 어딘가에 다운로드하는 아이디어입니다.

io와 nio (간단한 클라이언트 - 서버 - 클라이언트 응용 프로그램)를 사용하여 만들었습니다. Jettyweb 서버로 할 수 있습니까? 그 순간 나는 서버에 POST 요청을 보내고 응답을받는 클라이언트 응용 프로그램이 있습니다.

나는 http://www.eclipse.org/jetty에 관한 문서를 읽고 불행히도 내 질문에 대한 답변을 찾지 못했습니다. 어떤 도움을 주셔서 감사합니다.

답변

0

나는 그 자신과 그 대답을했다. 아래에 배치 된 서버의 코드 예 :

package Server.src; 

import ClientServer.model.Envelope; 
import org.apache.commons.codec.binary.Base64; 
import org.apache.log4j.Level; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 

import javax.servlet.AsyncContext; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.*; 
import java.util.ArrayList; 

public class WebServer { 

    public static class EmbeddedAsyncServlet extends HttpServlet { 
     Envelope envelope = new Envelope(); 
     public static ArrayList<Envelope> envelopeList = new ArrayList<>(); 
     public static int i; 
     public static int index; 
     @Override 
     protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { 
      final AsyncContext ctxt = req.startAsync(); 
      ctxt.start(new Runnable() { 
       @Override 
       public void run() { 
        System.err.println("Do get"); 
        String get = req.getParameter("UUID"); 
        try { 
          if (checkListForMessage(get)==true) { 
           try { 
            System.out.print("eeeeeeeeee"); 
            byte[] b = serialize(envelopeList.get(index)); 
            String encoded = new String(Base64.encodeBase64(b)); 
            resp.getWriter().append(encoded); 
            envelopeList.remove(index); 
           } catch (IOException e) { 
            e.printStackTrace(); 
           } 
          } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        ctxt.complete(); 
       } 
      }); 
     } 

     @Override 
     protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { 
      final AsyncContext ctxt = req.startAsync(); 
      ctxt.start(new Runnable() { 
       @Override 
       public void run() { 
        System.err.println("Do post"); 
        try { 
          String s = req.getParameter("key1"); 
          byte[] decoded = Base64.decodeBase64(s); 
          envelope = (Envelope) deserialize(decoded); 
          if (checkListForPair(envelope.userIdentifier, envelope.clientIdentifier) == false) { 
           envelopeList.add(envelope); 
           resp.getWriter().append("Approved"); 
          } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } catch (ClassNotFoundException e) { 
         e.printStackTrace(); 
        } 
        ctxt.complete(); 
       } 
      }); 
     } 

     public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException { 
      ByteArrayInputStream b = new ByteArrayInputStream(bytes); 
      ObjectInputStream o = new ObjectInputStream(b); 
      return o.readObject(); 
     } 

     public static byte[] serialize(Object obj) throws IOException { 
      ByteArrayOutputStream b = new ByteArrayOutputStream(); 
      ObjectOutputStream o = new ObjectOutputStream(b); 
      o.writeObject(obj); 
      return b.toByteArray(); 
     } 

     public static Boolean checkListForPair(String user, String client) { 
      for (Envelope envelope : envelopeList) { 
       if (envelope.userIdentifier.equals(user) & envelope.clientIdentifier.equals(client)) { 
        return true; 
       } 
      } 
      return false; 
     } 
     public static Boolean checkListForMessage(String client) { 
      i=-1; 
      for (Envelope envelope : envelopeList) { 
       i++; 
       if (envelope.clientIdentifier.equals(client)) { 
        index=i; 
        return true; 
       } 
      } 
      return false; 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     org.apache.log4j.LogManager.getLogger("org.eclipse.jetty").setLevel(Level.WARN); 
     Server server = new Server(1883); 
     ServletContextHandler context = new ServletContextHandler(); 
     context.setContextPath("/"); 
     context.setAllowNullPathInfo(true); 
     ServletHolder asyncHolder = context.addServlet(EmbeddedAsyncServlet.class, "/"); 
     asyncHolder.setAsyncSupported(true); 
     server.setHandler(context); 
     server.start(); 
     server.join(); 
    } 
}