2014-02-20 3 views
0

Я привел этот пример из книги:doGet называет doPost или наоборот

protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException 
    ServletOutputStream out = resp.getOutputStream(); 
    out.setContentType(“text/html”); 
    out.println("<html><h1>Output to Browser</h1>"); 
    out.println("<body>Written as html from a Servlet<body></html>"); 
} 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException 
    doPost(req, resp); //call doPost() for flow control logic. 
} 

Вопросы:

  1. Почему doPost не можем назвать doGet?
  2. Что означает flow control означает? не
+3

Автор мог бы сделать doPost вызов doGet ИЛИ сделать запрос doPost, так как оба предназначены для выполнения той же задачи. Не имеет значения, какой из них он выбрал. –

ответ

1

doGet() от doPost() и наоборот. Без вопросов. Но вы не должны делать такие вещи. Оба метода имеют разные цели.

В идеале задача предварительной обработки должна быть выполнена в методе doGet(). Например, предположим, что вы хотите проверить, где пользователь вошел в систему или нет, перед отправкой запроса на домашнюю страницу пользователя, которую вы бы сделали в методе doGet(). Хотя задача пост-обработки должна быть выполнена в doPost(). Например, когда пользователь отправляет форму, вы хотите получить значения, которые находятся в форме, и проверить их. Такая логика идет по методу doPost().

Вы не должны смешивать их. Если бы они были одинаковыми, не было бы необходимости в обоих методах. Более подробную информацию об этих методах см. В нашей вики-ссылке .

2

Пример означает все запрос, является ли это GET или POST будет будет обрабатывать с помощью одного method.You можно перемещать doPost код doGet и вызвать doGet метод из doPost, Чета будет не вопрос.

+0

@jgitter hehhehe its ohk dear – Kick

1

Я знаю, что это старый, но все-таки ...

О Q1, каждый дает очень интересный и точный ответ, но истина где-то там ... Просто взгляните на это «уменьшенная» код, вам поймет:

protected void doGet(HttpServletRequest req, HttpServletResponse resp){ 
    doPost(req, resp); 
} 
protected void doPost(HttpServletRequest req, HttpServletResponse resp){ 
    // 
    //Do something 
    // 
    //Can I call doGet() ? 
} 

Да, это бесконечный цикл, если вы делаете так: doPost вызова doGet, что называют doPost, что называют doGet ...

0

Если вам нужен doGet вызывает doPost, то лучше используйте «сервис».

protected void service((HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    //do something you need 
} 
Смежные вопросы