フォーム作成において正規表現の使用は必須になってきます。
ネット上を検索してもjspファイルでの正規表現の受け取り方はちらほらあるのですが、
サーブレット上での正規表現での受け取り方が乗っておらず四苦八苦しながら正規表現でのフォーム受け取りを作成しました。
なので今回は私が活用したサーブレットでの正規表現をまとめて行きたいと思います。
なお初心者が四苦八苦しながら作成したのでもし間違っている等のご意見がある際は優しくご指摘下さい。
正規表現の仕方
サーブレットに組み込む前にどのようなプログラムとなっているかまず確認をしましょう。
//比較したい値を変数に代入します。
String str = "型に合っているか比較をしたい値";
// 正規表現のパターンを作成
//Patternクラスの変数にどんな決まりの型にするかを宣言します。
//下記の場合は4~12文字の半角英数字の型を作成しています。
Pattern pattern = Pattern.compile("^[0-9a-zA-Z]{4,12}$");
//patternのmacherメソッドにstrをセットして、Matcher クラスの変数として宣言します。
Matcher macher = pattern.matcher(str);
ここまではJavaのプログラムでも作成するのでネットを見たりすれば簡単に作成が可能となります。
この変数をサーブレットの中に挿入していきます。
サーブレットでの実際の書き方
今回はフォームからidを取得して、if文で正規表現の確認をおこない間違っていればエラーページを返すというプログラムを作成します。
if文の条件に、matcher.find()を挿入。
このメソッドはセットされた文字列が正規表現とマッチしているかを調べるMacherクラスのメソッドとなっています。
matcher.find()にて比較を行うことで合っていればture、間違っていればfalseを返します。
idで取得した値がfalseの場合は、エラーページに飛ぶように設定をしました。
実際のプログラムがこちら↓
//doPostでフォーム情報を取得
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String error = “”;
try {
request.setCharacterEncoding(“UTF-8”);
//idをフォームからパラメータで取得
String id = request.getParameter(“id”);
Pattern pattern = Pattern.compile(“^[0-9a-zA-Z]{4,12}$”);
//jspファイルへ値を受け渡す処理※今回の内容とはあまり関係無い
Entry entry = new Entry(id);
HttpSession session = request.getSession();
session.setAttribute(“entry”, entry);
//if文で条件を満たしているか確認
if(matcher.find() == false){
error += “idを4文字以上12文字以内の半角英数字で入力してください”;
request.setAttribute(“error”, error);
RequestDispatcher dispatch = request.getRequestDispatcher(“エラー先のjspファイルパス”);
dispatch.forward(request, response);
}
//trueの際の処理
} catch (Exception e) {
error = “予期せぬエラーが発生しました。<br>” + e;
} finally {
request.setAttribute(“error”, error);
request.getRequestDispatcher(“確認先のjspファイルパス”).forward(request, response);
}
こんな感じで作成し、
あとは2つのjspページを作成し終了です。
結果
もともと作成済みのフォームに「ひらがな」入力を行い送信をおこなう。
※送信ボタンは写ってません。
下記の入力エラーページに移行します。
フォームに「4文字以上の半角英数字」の入力を行い送信をおこなう。
登録確認をおこなうjspページへ移行します。
まとめ
Javaのロジックをうまくサーブレットへ埋め込むという技術がまだまだついてないのでこれから色々なプログラムに触ったりチャレンジしたいと思います。
最後までお読み頂きありがとうございます。
今回のプログラムは初心者が作成したものなので参考程度にお願い致します。
駆け出しエンジニア けいこ♂
コメント