Я хочу спросить вас о MVC. Как это устроено. Итак, это простой пример (я не использую никаких фреймворков)
в контроллере (сервлете):
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
private void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String page = null;
AbstractCommand action;
action = ActionFactory.getAction(request);// get command from factory
page = action.execute(request, response);
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
для действий мы создаем общий интерфейс (шаблон стратегии):
public interface AbstractAction {
public String execute(HttpServletRequest request, HttpServletResponse response);
}
Простое действие (пример):
public class HelloAction implements AbstractAction {
@Override
public String execute(HttpServletRequest request,
HttpServletResponse response) {
//....(some actions to modify request)
String page = "/main.jsp";
return page;
}
}
А теперь наш завод:
public class ActionFactory {
private enum Actions{
HELLO;
}
public static AbstractAction getAction(HttpServletRequest request){
String action = request.getParameter("action");//take parameter from jsp
Actions actionEnum = Actions.valueOf(action.toUpperCase());
switch (actionEnum) {
case HELLO:
return new HelloAction();
}
}
}
Мы пришли к тому месту, где я в замешательстве. Сервлет инициализируется только один раз и только один для всех запросов. Просто перенаправляет запросы на действия, где мы изменяем запрос или ответ. Но мы создаем НОВЫЙ экземпляр класса для каждого запроса. Здесь может произойти переполнение памяти !? Или нет?
Можем ли мы сделать эти действия статическими (статический метод, один для всех запросов)? Если два запроса поступят одновременно, что с ними будет?
Что вы думаете по этому поводу, пожалуйста, поделитесь своим опытом.
P.S. извините за плохой английский.