Ответ 1
Существует несколько способов достижения этой цели.
Вероятно, самым простым было бы использование JavaScript для изменения действия формы.
<input type="submit" value="SecondServlet" onclick="form.action='SecondServlet';">
Но это, конечно, не будет работать, если у enduser отключен JS (мобильные браузеры, программы чтения с экрана и т.д.).
Другой способ - поместить вторую кнопку в другую форму, которая может быть или не быть тем, что вам нужно, в зависимости от конкретного функционального требования, которое совсем не ясно из вопроса.
<form action="FirstServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" value="FirstServlet">
</form>
<form action="SecondServlet" method="Post">
<input type="submit"value="SecondServlet">
</form>
Обратите внимание, что форма будет отправлять только отправку входных данных, содержащихся в той же форме, а не в другой форме.
Опять же, еще один способ - создать еще один сервлет с одной точкой доступа, который делегирует дальнейшие правильные сервлеты (или, предпочтительно, правильные бизнес-действия) в зависимости от нажатой кнопки (которая сама по себе доступна как параметр запроса ее name
):
<form action="MainServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" name="action" value="FirstServlet">
<input type="submit" name="action" value="SecondServlet">
</form>
со следующим в MainServlet
String action = request.getParameter("action");
if ("FirstServlet".equals(action)) {
// Invoke FirstServlet job here.
} else if ("SecondServlet".equals(action)) {
// Invoke SecondServlet job here.
}
Это не очень дружелюбный i18n/обслуживание. Что делать, если вам нужно отображать кнопки на другом языке или изменять значения кнопок, забывая при этом учитывать код сервлета?
Небольшое изменение заключается в том, чтобы дать кнопкам собственное фиксированное и уникальное имя, чтобы его присутствие в качестве параметра запроса можно было проверить вместо его значения, которое было бы чувствительным к i18n/обслуживанию:
<form action="MainServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" name="first" value="FirstServlet">
<input type="submit" name="second" value="SecondServlet">
</form>
со следующим в MainServlet
if (request.getParameter("first") != null) {
// Invoke FirstServlet job here.
} else if (request.getParameter("second") != null) {
// Invoke SecondServlet job here.
}
Последний способ состоял бы в том, чтобы просто использовать инфраструктуру MVC, например JSF, чтобы вы могли напрямую привязывать javabean методы к кнопкам, но это потребовало бы радикальных изменений в вашей существующий код.
<h:form>
Last Name: <h:inputText value="#{bean.lastName}" size="20" />
<br/><br/>
<h:commandButton value="First" action="#{bean.first}" />
<h:commandButton value="Second" action="#{bean.Second}" />
</h:form>
с помощью только следующего javabean вместо сервлета
@ManagedBean
@RequestScoped
public class Bean {
private String lastName; // +getter+setter
public void first() {
// Invoke original FirstServlet job here.
}
public void second() {
// Invoke original SecondServlet job here.
}
}