2015年5月6日水曜日

[Java][Servlet]JSP・サーブレット間のパラメータ受け渡し

 Webアプリケーションではサイト内で入力した内容をサーブレットに渡し、データベース検索や登録などの処理を行う。ブラウザ上で入力した内容をサーブレットに渡す方法について、解説する。
 Webアプリケーションでユーザ入力をサーブレットに渡すためには、まずJSP内に入力用のタグを記述する必要がある。単純なテキストボックスを使った入力を行うためのタグ記述方法は、次の通り。

    <form action="/bbs/top/index.html" method="post">
        <input type="input" name="inputString">
        <input type="submit">
    </form>

 <form>は投稿するデータのフォームであることを示すタグである。<form>~</form>までで囲まれた範囲がフォームであることを示している。<form>タグのactionを "/bbs/top/index.html" としており、methodが "post" となっているが、これは当該フォームが「/bbs/top/index.html」というアクションをPOSTで実行することを示すものである。formタグの中に <input type="submit"> というタグがあり、当該アクションを呼び出すためのサブミットを行うボタンを画面上に配置している。このサブミットボタンが押されることで、アクションが実行される。このとき呼び出されるアクションは、前述した記事に掲載しているサーブレットである。
 <form>内にあるもう一つの<input type="input>というタグは、入力用のテキストボックスである。ブラウザ上にはテキストボックスが出現し、ユーザ入力を行うことができる。ここで入力した文字列は「inputString」という名前で、サーブレットにPOSTされる。
 サーブレットプログラム側ではHttpServletクラスのdoPostメソッドがTomcatから起動される。このとき「request.getParameter("inputString")」と記述して引数のHttpServletRequestから値を取得すると、画面で入力した値を取得できる。
 サーブレットで処理したデータを画面に渡す場合は、同じHttpServletRequestクラスに(レスポンスクラスではないので注意!)に「setAttribute([キー], [値]);」の形式で設定する。例えばトップページのサーブレット出力パラメータの場合「setAttribute("top", servletOutputParameter);」のように設定する。「servletOutputParameter」はgetter/setterから形成されるクラスで、Listなどの繰り返し項目も含めることができる。JSP側でサーブレットが設定した出力パラメータを取得する記述方法は、次の通り。

<input type="hidden" name="lastInputString" value="${top.lastInputString}">

 別記事で掲載したEL式を使えるweb.xmlの記述を行っておくことで、上記のようにservletOutputParameterクラスから値を取得することができる。上記記述の場合、hiddenに「lastInputString」というservletOutputParameter内のデータを設定していることになる。(内部的には「servletOutputParameter.getLastInputString();」を呼び出している)
 hiddenはサーブレット・JSP間で受け渡されるデータを保持しておきたい場合に使うもので、ユーザが入力した内容を保持しておくために用いられることが多い。(hiddenはブラウザ表示上は見えないが、実際には値を保持している)ただしユーザがURLを直接入力するなど、想定されていない画面遷移方法を行うとPOSTメソッドによる受け渡しがなされないため、保持していた内容は消えてしまう。

0 件のコメント:

コメントを投稿