2015-04-10 2 views
0

В настоящее время я пытаюсь обрабатывать некоторые входящие запросы POST в Java.Java получить параметры из почтового запроса

Он работает частично до сих пор. Я могу получать запросы, но я не могу извлечь параметры и значения, отправленные с запросом.

Вот мой Java-код для приема запросов до сих пор:

public HybridRemoteReceiver() { 

try { 
    System.out.println("running..."); 
    ServerSocket ss = new ServerSocket(3434); 

    int i = 0; 
    while (true) { 
     Socket client = ss.accept(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     String line; 

     while ((line = in.readLine()) != null) { 
      if (line.length() == 0) 
       break; 
      i++; 
     } 
     in.close(); 
     client.close(); 
    } 


} catch (Exception e) { 
    e.printStackTrace(); 
} 

} 

Я знаю, что есть класс называется HttpServer, но это, как этот класс не существует в Java.

Я использую java 1.8 в eclipse кстати.

Однако я могу найти классы HttpExchange и HttpHandler, но, похоже, они не могут заставить их работать.

В основном я хочу получить данные, отправленные с почтовым запросом, и НЕ отправлять что-либо обратно клиенту.

Я действительно надеюсь, что кто-то может помочь мне с этим.

+0

Если бы я мог сказать вам, как использовать 'HttpServletRequest', вы бы хотели его использовать? –

+1

Вы действительно должны работать с контейнером сервлетов (Tomcat и т. Д.), А не пытаться изобрести колесо. Чтобы делать то, что вы хотите, вам нужно фактически разобрать строки, отправленные вам в POST в соответствии со стандартами.Кроме того, чтобы соответствовать стандартам, вам нужно будет отправить ответ, даже если у него нет тела, просто заголовки. – RealSkeptic

+0

Спасибо за ваши ответы. @Kevin Да, мне было бы очень интересно, если бы вы могли объяснить. Но прежде чем вы это сделаете, можно ли использовать сервлеты в стандартном java-приложении, используя swing (или подобное) как gui? Потому что мне нужно, чтобы оно было настольным приложением, получающим данные по запросу. Спасибо заранее – Langkiller

ответ

1

Используйте контейнер сервлетов, как tomcat.

Затем, исследуя сервлеты (расширяет HttpServlet), вы можете использовать его методы GET и POST.

Это ПОСТ.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     username = request.getParameter("username"); 

}

// имя пользователя является параметром, который был послан через POST из JSP.

+0

Спасибо за ваш ответ! Можно ли создать простое java-приложение с Swing (или аналогичным) с помощью Servlets. У меня нет большого опыта работы с сервлетами. – Langkiller

+0

Ofcourse. Здесь http://stackoverflow.com/questions/9090580/sending-data-from-swing-to-servlet Но зачем делать это на основе качания? Веб-приложение вашего приложения лучше, если только вы не хотите сделать его отдельным. – shepard23

+0

Прохладный! Но разве это не требует от меня сделать 2 разных приложения, которые общаются? Или я могу сделать это в отдельном настольном приложении? И знаете ли вы, сложно ли просто извлекать параметры сообщения из запроса? Потому что было довольно легко получить почтовый запрос непосредственно с кодом в моем вопросе. – Langkiller

0

Если вы хотите обрабатывать HTTP-запросы, было бы лучше использовать контейнер сервлетов, такой как Tomcat. Tomcat не будет реализовывать всю спецификацию Java EE, но предоставит вам реализацию контейнера сервлетов, который сможет легко обрабатывать запрос post. Это препятствует вам изобретать колесо и позволяет полагаться на проверенную технологию, включенную во многие проекты.

Как только библиотеки контейнеров сервлетов находятся на пути к классам, вы сможете использовать классы, такие как HttpServletRequest. У вас есть контейнер сервлетов, и Servlet объявлен и сопоставлен, его так же просто, как вызов метода HttpServletRequest#getParameter().

+0

Спасибо за ваш ответ! Можно ли создать простое java-приложение с Swing (или аналогичным) с помощью Servlets. У меня нет большого опыта работы с сервлетами. – Langkiller

0

Существует действительно класс HttpServer, он находится где-то в пакете sun.net.httpserver.

Пакет и подпакеты sun являются безопасными в использовании, в отличие от пакета и подпакетов com.sun, которые могут быть (пере) перемещены.

Редактировать: Если вы хотите, вы всегда можете написать свой собственный сервер. Если вы хотите сделать это, убедитесь, что он соответствует всем RFC, которые определяют версию HTTP, которую вы будете использовать. Некоторые вещи не нужны, и вы можете просто выбросить 501 Not Implemented на них.