サーブレットが必要です(<-- リンクをクリックしてください。装飾用に含まれているわけではありません)。
要するに、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();
}
}
そして、JSP を次のように修正<body>
します (JSP ファイルがサブフォルダーではなく Web コンテンツのルートに配置されている場合)。
<form action="hello" method="post">
<input type="submit" name="myButton" value="button" />
</form>
それでおしまい。
サーブレットは、コンテキスト ルートに関連@WebServlet
する の URL をリッスンするように登録されています。/hello
HTML フォームは、JSP ページ自体の URL に対して、正確にその URL に送信するように指示されます。method="post"
はサーブレットのメソッドを呼び出します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()
次に、サーブレットのメソッドで次のように押されたボタンを確認できます。
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.
}
まったく別の代替案は、 JSF、Spring MVC、Struts2など、このボイラープレートをすべて高度に抽象化する既存の MVC フレームワークを使用することです。
JSF を使用すると、次のようになります (従来の JSP をその後継の Facelets に置き換えるだけで済みます。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");
}
}