Как правильно использовать сервлеты? - PullRequest
0 голосов
/ 23 февраля 2011

Я изучаю EJB3.

У меня есть сессионный компонент, который предоставляет сервисы для создания / обновления учетных записей клиентов.

Этот сессионный компонент предлагает услуги на линиях:

public void addCustomer(Customer c);
public void updateCustomer(Customer c);

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

Проблема в том, что у меня есть две JSP: UpdateAccount.jsp и CreateAccount.jsp. Обе эти JSP имеют форму с методом POST и действием «CustomerServlet».

Как я могу различить в сервлете клиента, какую операцию я должен выполнить: createAccount или updateAccount?

Полагаю, альтернативой является отдельный сервлет для каждой операции ...

Спасибо

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011

Я не совсем уверен насчет наилучшей практики для этого, но у меня есть пара советов, которые могут сработать:

  1. Если ваша форма отправляется с помощью кнопки отправки, вымог бы отличить запрос на основе стоимостипараметр.Поэтому, если ваши кнопки имели значения Update и Create и были названы account-submit, проверив значение, полученное с помощью request.getParameter('account-submit'), вы сможете определить, какая кнопка была нажата для создания этого запроса.Если вы назвали их по-разному, вы также можете просто проверить, какой из двух параметров не является нулевым, и вы будете знать, какую форму отправки вы обрабатываете.

    Обратите внимание, что если в вашей форме только одно текстовое поле и пользователь нажимает Enter вместо нажатия кнопки, вы получите null в своем сервлете!См. в моем блоге об этом поведении.

  2. Проверьте заголовок Referer - я бы не рекомендовал это, поскольку вы не всегда знаете контекстВ развернутом приложении это значение может присутствовать не всегда и может быть легко подделано.

  3. Добавьте еще одно сопоставление для вашего сервлета, чтобы оно было доступно как в http://myapp.example.com/context/create, так и http://myapp.example.com/context/update. Затем вы можете проверить ServletPath (request.getServletPath()), чтобы увидеть, для какого «сервлета» поступил запрос.Я бы, наверное, согласился с этим, поскольку он кажется мне наиболее надежным, но вы также можете добавить две другие проверки, чтобы убедиться.В вашем web.xml вы бы хотели что-то вроде

    <servlet>
        <servlet-name>CreateUpdateServlet</servlet-name>
        <servlet-class>my.package.CustomerServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CreateUpdateServlet</servlet-name>
        <url-pattern>/create</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>CreateUpdateServlet</servlet-name>
        <url-pattern>/update</url-pattern>
    </servlet-mapping>
0 голосов
/ 23 февраля 2011

Вам не нужен сервлет.JSP (или Facelets) могут напрямую общаться с компонентами через EL.

0 голосов
/ 23 февраля 2011

JSP являются сервлетами, просто в другой форме исходного кода, нет никаких оснований для POST для другого сервлета, вы можете просто POST вернуться к тому же JSP.

...