Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > обработка GET и POST запросов


Автор: Samotnik 22.10.2007, 15:10
Добрый день подскажите плз.
значит задание, примерно следущее
 - Создать index.html, который будет являться точкой входа в апликацию. Данный файл должен содержать две формы. Обе имеют текстовое поле ввода Name, но первая использует GET запрос для посылки данных на сервер (сервлет), а вторая POST.
  - Серверная часть (сервлет) должна быть модифицирована так, чтобы результатом сабмита любой из форм страницы index.html явилось отображение типа использованного запроса и фразы построенной на основе данных, введенных в поле Name на форме: Hello, <Name>. Например, "Hello, Robin Good"

 smile     Подскажите плз!!!

Автор: AlexeyVorotnikov 22.10.2007, 15:18
И что подсказать-то? Что именно не понятно?

Автор: Samotnik 22.10.2007, 15:28
чем отличается обработка пост запросов  от  гет  запросов ?

Автор: AlexeyVorotnikov 22.10.2007, 15:48
Цитата(Samotnik @ 22.10.2007,  16:28)
чем отличается обработка пост запросов  от  гет  запросов ?

Ничем

Автор: Samotnik 22.10.2007, 15:53
Цитата(AlexeyVorotnikov @  22.10.2007,  15:48 Найти цитируемый пост)
Ничем 

Не понял, это  как??    А какой смысл задания тогда ???   Зачем тогда писать гет запрос и пост запрос?

Автор: AlexeyVorotnikov 22.10.2007, 15:54
Цитата(Samotnik @  22.10.2007,  16:53 Найти цитируемый пост)
А какой смысл задания тогда ???

Ну это, наверное, надо спросить у того, кто это задание задал. smile

Автор: Samotnik 22.10.2007, 16:02
AlexeyVorotnikov,  да ну..., есть разница между гет и пост запросом. 
Я просто не помню какая точно, и как эта вся красота обрабатывается. 
Если я не ошибаюсь  гет запрос обрабатывает простые запросы типа  Имени, названия и т.д.
А пост запрос  обрабатывает  файлы, там приложения всякие!!
Разве не так?

Автор: AlexeyVorotnikov 22.10.2007, 16:21
Цитата(Samotnik @ 22.10.2007,  17:02)
AlexeyVorotnikov,  да ну..., есть разница между гет и пост запросом. 
Я просто не помню какая точно, и как эта вся красота обрабатывается. 
Если я не ошибаюсь  гет запрос обрабатывает простые запросы типа  Имени, названия и т.д.
А пост запрос  обрабатывает  файлы, там приложения всякие!!
Разве не так?

Вообще говоря, POST от GET отличается только способом передачи параметров запроса.
Некоторые типы параметров, например файлы smile, действительно трудновато передать в GET запросе. smile
В данном конкретном случае (один параметр-строка) с точки зрения сервлета разницы никакой нет.
Конечно у сервлета есть два разных метода doGet и doPost, которые обрабатывают, соответственно, GET и POST запросы. Но в обоих методах обращение к параметру Name будет происходить абсолютно одинаково: request.getParameter("Name").

Автор: Maksym 22.10.2007, 16:22
Цитата(Samotnik @  22.10.2007,  15:28 Найти цитируемый пост)
чем отличается обработка пост запросов  от  гет  запросов ? 

В этом разделе обсуждалось, не http://forum.vingrad.ru/index.php?showtopic=130597&view=findpost&p=986008 и не http://forum.vingrad.ru/index.php?showtopic=147186&view=findpost&p=1106010.

Автор: Samotnik 22.10.2007, 16:40
Maksym,  Прочитал обе статьи, но так и  не понял, чем отличается  Get запрос от  Post запроса

Автор: AlexeyVorotnikov 22.10.2007, 16:42
Цитата(Samotnik @ 22.10.2007,  17:40)
Maksym,  Прочитал обе статьи, но так и  не понял, чем отличается  Get запрос от  Post запроса

Чтобы это понять, надо прочитать описание HTTP.

Автор: Samotnik 22.10.2007, 16:47
AlexeyVorotnikov,  Т.е. получается, что нету конкретного определения, так?
Т.е.  на вопрос, типа "Принципиальные отличия GET и POST запросов как HTTP запросов"   ответить не реально?

Автор: AlexeyVorotnikov 22.10.2007, 17:23
Цитата(Samotnik @ 22.10.2007,  17:47)
AlexeyVorotnikov,  Т.е. получается, что нету конкретного определения, так?
Т.е.  на вопрос, типа "Принципиальные отличия GET и POST запросов как HTTP запросов"   ответить не реально?

Почему нереально?
Конкретные определения содержатся как раз в спецификации HTTP.

Автор: Samotnik 22.10.2007, 18:10
Ну пажалста, обьясните, или  хотя бы ссылочку дайте где почитать  !!  

Автор: Maksym 22.10.2007, 18:28
Samotnik
http://web-notes.ru/2006/03/get_or_post/ прочитал?

Автор: Samotnik 22.10.2007, 18:35
Да!   Хотелось бы по больше, по углубленее

Автор: _Michael 22.10.2007, 20:00
http://www.javaportal.ru/java/articles/java_http_web/article03.html#http
Вот отличная ccылка про HTTP протокол. думаю после нее все должно стать ясно smile

Автор: boevik 23.10.2007, 00:02
Очень напоминает первое задание какого нибудь курса по J2EE.

Отличие в сервлете в том, что есть две функции doGet and doPost, сотвественно каждая обрабатывает свого типа запрос.

И отличие в html файле в oдном месте, method=post или method=get

Автор: COVD 25.3.2008, 19:10
Хотел новую тему создать, да поиск подкинул этот топик. Сюда и пишу.

Если создавать новый сервлет в IDE, то, например, Netbeans создает заготовку, где и GET и POST обрабатываются одним методом, т.е. разницы сервлету практически никакой:

Код

public class NewServlet extends HttpServlet {
   
    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet NewServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet NewServlet at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
            */
        } finally { 
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}


Методы doGet и doPost формально есть, но они переадресуют запрос в processRequest(..). Его и надо модифицировать. В заготовке есть лишь закомментаренный вывод html страницы для примера. 

Однако сервлет также должен получать из запроса и параметры ( иначе смысла в нем нет ). 

Параметры в GET запросе включены в строку url (..?name=a&city=b&..) . Их извлекают как 
Код

      String name = request.getParameter("name"); 


В POST клиентское приложение пишет данные в outputstream, а в сервлете их можно прочитать из inputstream. Текст, например, читают так:

Код

      BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));                       
      String input = in.readLine();


Ничто, казалось бы, не препятствует посылке POST запроса, в котором строка url содержит также и параметры, как в GET. Что произойдет, если в сервлете (Томкат6) мы попытаемся прочитать все из запроса - и GET и POST. Если сначала прочитать GET параметры: 

Код

      String name = request.getParameter("name"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));                       
      String input = in.readLine();


, то POST параметры станут недоступны, и метод readLine вернет null, т.е. конец данных.

Но стоит поменять местами две строки, то прочитываются и GET и POST данные:

Код

      BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));                       
      String name = request.getParameter("name");       
      String input = in.readLine();


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


  



    

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)