入力確認画面1
- 2010-12-22 Wed 16:08:38
- データのやり取り
会員登録画面で氏名を入力し、送信すると確認画面が現れ、入力した氏名が表示される…。

「送信」ボタンを押すと、

このよくあるフォームを作ってみます。
JSPファイルは、[siroto]→[form_entry]の下に、「Input.jsp」を入力画面、「InputConfirm.jsp」を確認画面とします。

サーブレットは、[siroto]→[WEB-INF/src]→[form_entry]の下に、「InputServlet.java」を作成します。
web.xmlを記述する
<servlet>
<servlet-name>InputServlet</servlet-name>
<servlet-class>form_entry.InputServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InputServlet</servlet-name>
<url-pattern>/InputServlet</url-pattern>
</servlet-mapping>
上のソースを書き加えます。
入力画面 Input.jsp を記述する
<%@page contentType="text/html; charset=Windows-31J" %>
<html><body>
<h3>氏名を入力してください。</h3>
<form action="../InputServlet">
<table>
<tr><th>氏名<th><td><input type="text" name="name"></td></tr><br>
</table>
<p><input type="submit" value="送信">
</form>
</body></html>
Tomcatを立ち上げ、
http://localhost:8080/siroto/form_entry/Input.jsp
にアクセスして表示を確認しましょう。
テキストボックスの名前を「name」とし、入力パラメータをInputServletに提出するようにしました。
本当は、この画面に「確認」ボタンを設置してデータベースに登録するようにできなければならないのですが、データベースとの連携についてはまだ学習していないので今回はここまでです。
InputServlet.javaを記述する
package form_entry;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InputServlet extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
common(request,response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
common(request,response);
}
private void common(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("Windows-31J");
String name=request.getParameter("name"); //(1)
request.setAttribute("name",name); //(2)
response.setContentType("text/plain;charset=Windows-31J");
RequestDispatcher dispatcher=request
.getRequestDispatcher("/form_entry/InputConfirm.jsp");
dispatcher.forward(request,response);
}
}
Input.jspからサーブレットで値を受け取ってからInputConfirm.jspに移動するので、ディスパッチが行われます(参考:血液型プログラム)。
今回は、JSPからサーブレットに値を受け渡すだけでなく、サーブレットからもJSPに値を受け渡すことになります。サーブレットには入力フォームがありませんから、JSPはgetParameter()メソッドでデータを受け取ることはできません。
サーブレットやJSPでデータをやり取りするとき、データの登録にsetAttribute()メソッドを、データの取得にgetAttribute()メソッドを使います。
今回は、入力フォームからデータをサーブレットがgetParameter()メソッドで受け取り、そのデータをsetAttribute()メソッドで登録し、確認画面にディスパッチで画面遷移を行います。確認画面のJSPファイルはgetAttribute()メソッドでデータを取得する、という流れになります。
ではソースの解説ですが、新たにインポートするクラスはありません。画面遷移するのでjavax.servlet.RequestDispatcherは忘れずにインポートしましょう。
(1) 「name」という名の入力パラメータの値をgetParameter()メソッドで受け取り、それをString型の変数nameに代入しました。共通する値は同じ名前にしておくと分かりやすいと思います。
(2) setAttribute()メソッドの登場です。このメソッドの形式は、
void setAttribute(String name , Object value)
となっており、(2)でいうと、nameの値を"name"という名前で登録するという意味になります。
たとえば、「おめでとう」という文字列を「message」という名前で登録するときは、
setAttribute("message" , "おめでとう");
ということになります。
この後、画面遷移を行えば、サーブレットのデータ中継はめでたく完了します。
入力確認画面 InputConfirm.jsp を記述する
<%@page contentType="text/html; charset=Windows-31J" %>
<html><body>
<h3>氏名を確認します。</h3>
<table>
<tr><th>氏名<th><td><%=request.getAttribute("name") %></td></tr><br>
</table>
</body></html>
上のソースの重要なのは、
<%=request.getAttribute("name") %>
の部分です。
前述のように、getAttribute()メソッドはsetAttribute()メソッドで登録されたデータを取得するメソッドです。
引数に指定された名前の値を取得します。
今回の場合は、サーブレットで「name」という名前が付けられたデータを取得します。
スポンサーサイト
タグ :
Comments: