您需要一个servlet(<--单击链接,它不包括仅用于装饰)。
至此,假设您的目标是 Servlet 3.0 容器(Tomcat 7、Glassfish 3 等),那么只需创建此类:
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
new MyClass().print();
}
}
<body>
并按如下方式修复您的 JSP (前提是 JSP 文件放置在 Web 内容的根目录中,而不是放在子文件夹中):
<form action="hello" method="post">
<input type="submit" name="myButton" value="button" />
</form>
就是这样。
servlet 通过@WebServlet
注册以侦听/hello
相对于上下文根的 URL。指示 HTML 表单准确地提交到相对于 JSP 页面本身的 URL 的那个 URL。这method="post"
将调用 servlet 的doPost()
方法,您可以在其中自由地写下所需的 Java 代码。
如果您想要根据按下的按钮进行更细粒度的控制,请为按钮指定一个唯一的名称。
<form action="hello" method="post">
<input type="submit" name="myButton1" value="button1" />
<input type="submit" name="myButton2" value="button2" />
<input type="submit" name="myButton3" value="button3" />
</form>
doPost()
那么您可以在 servlet 的方法中检查按下的按钮,如下所示:
if (request.getParameter("myButton1") != null) {
// button1 is pressed.
}
else if (request.getParameter("myButton2") != null) {
// button2 is pressed.
}
else if (request.getParameter("myButton3") != null) {
// button3 is pressed.
}
一个完全不同的选择是使用现有的 MVC 框架,该框架高度抽象所有这些样板,例如JSF、Spring MVC、Struts2等。
使用 JSF,它看起来像这样(您只需用其后续的 Facelets 替换旧版 JSP;Facelets 的外观在有点理智的 JSF 教程中进行了解释,再次单击上一段中的“JSF”链接以获取详细信息):
<h:form>
<h:commandButton value="button1" action="#{bean.button1}" />
<h:commandButton value="button2" action="#{bean.button2}" />
<h:commandButton value="button3" action="#{bean.button3}" />
</h:form>
只有这个类没有丑陋的 if/else:
@ManagedBean
@RequestScoped
public class Bean {
public void button1() {
System.out.println("button1 invoked");
}
public void button2() {
System.out.println("button2 invoked");
}
public void button3() {
System.out.println("button3 invoked");
}
}