有几种方法可以实现这一目标。
可能最简单的方法是使用JavaScript来更改表单的操作。
<input type="submit" value="SecondServlet" onclick="form.action='SecondServlet';">
但是,当最终用户禁用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>
请注意,表单在提交时仅发送同一表单中包含的输入数据,而不发送其他表单中包含的输入数据。
同样,另一种方法是创建另一个单入口点servlet,该服务根据按下的按钮(它本身可用作请求参数)进一步委托给正确的servlet(或者最好是正确的业务操作):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's job here.
} else if ("SecondServlet".equals(action)) {
// Invoke SecondServlet's job here.
}
这只是不是很i18n/维护友好。如果您需要用其他语言显示按钮或更改按钮值,而忘记考虑 servlet 代码,该怎么办?
稍作更改是为按钮指定其自己的固定和唯一名称,以便可以检查其作为请求参数的存在,而不是其值,这对 i18n/maintenance 敏感:
<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's job here.
} else if (request.getParameter("second") != null) {
// Invoke SecondServlet's job here.
}
最后一种方法是只使用像JSF这样的MVC框架,这样你就可以直接将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 而不是 servlet
@ManagedBean
@RequestScoped
public class Bean {
private String lastName; // +getter+setter
public void first() {
// Invoke original FirstServlet's job here.
}
public void second() {
// Invoke original SecondServlet's job here.
}
}