有几种方法可以实现这一点。
可能最简单的方法就是使用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.
}
下面这仅仅是不是版本y国际/维护友好。如果您需要以不同语言显示按钮或者在忘记考虑servlet代码的同时更改按钮值?
略有变化是给按钮自己固定和唯一的名称,以使得它作为请求参数存在可以进行检查,而不是它的值,该值将是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's job here.
} else if (request.getParameter("second") != null) {
// Invoke SecondServlet's job here.
}
末方式下面将到j最好使用一个像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.
}
}
哇,很全面的回答! – 2012-08-06 15:43:42
+ 1为回答越界:) – srk 2014-01-06 18:13:15
@BalusC你能解释如何调用servlet我试过像这样'RequestDispatcher rd = request.getRequestDispatcher(“/ servletName”); \t \t \t rd.forward(request,response);'。但它不工作 – spt 2015-07-01 09:13:29