テキストフィールドに何も入れない場合の動作について
現在サーブレットについて勉強しているものです。
身近に聞ける人がおらず、お手数ですがご教授願います。
分からないところは、JSPでテキストフィールドがあるページを作成し、そこに何も入れないまま送信した場合の動作についてです。
以下に載せているサンプルAの通りに作成し、何も入れないで送信したところ、if( (numberStr == null) || (numberStr.length() == 0) )の条件文の中の処理が走るようで、”何かいれて”というメッセージが表示されるのを確認しております。
しかし、私が作成したファイルを使い、テキストフィールドに何も入れないまま送信した場合はエクセプション画面(例外レポート)に飛んでしまいます。
同じ条件を使い、同じように表示させているつもりなのですが、私が作成したソースが上手くいかず、参考書のソースが上手く動作している理由がどうしてもわかりません。
恐らくソースを見た方が早い、という方が多いと思いますので、見栄えは悪いのですが、ソースを張らせていただきます。
また、入力文字数の制限より、import等は全て削除しました。
また、何も入力しない場合に用いられている、try、catchの必要性についても、いまいち分かりません。
ifとelseで全て網羅するようにせず、なぜtry,catchを使うのでしょうか?
ご存じの方、いらっしゃいましたら、是非教えて下さい。
サンプルA-start---------------------------------------------------------------------
public class GuessServlet extends HttpServlet {
/* 当たりの数字をランダムに決定 */
private int hit = new Random().nextInt(10);
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
/* jspファイルで入力した数字をひっぱってくる */
String numberStr = request.getParameter("number");
int input = Integer.parseInt(numberStr);
response.setContentType("text/plain; charset=Windows-31J");
PrintWriter out = response.getWriter();
if( (numberStr == null) || (numberStr.length() == 0) )
{
request.setAttribute("msg","何か入れて");
RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess.jsp");
dispatcher.forward( request, response);
}
else if(hit == input)
{
request.setAttribute("msg","当たり。数字=" + input);
RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess_hit.jsp");
dispatcher.forward( request, response);
}
else{
request.setAttribute("msg","はずれ。数字=" + input);
RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess.jsp");
dispatcher.forward( request, response);
}
}
}
サンプルA-end---------------------------------------------------------------------
私のソース-start---------------------------------------------------------------------
public class GuessServlet extends HttpServlet {
/* 当たりの数字をランダムに決定 */
private int hit = new Random().nextInt(10);
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
/* jspファイルで入力した数字をひっぱってくる */
String numberStr = request.getParameter("number");
String error = null;
int number = -1;
if( (numberStr == null) || (numberStr.length() == 0) )
{
error = "何か入れて";
}
if(error == null)
{
try{
number = Integer.parseInt(numberStr);
if(number < 0 || 9 < number)
{
error = "0~9を入れて";
}
}
catch(NumberFormatException e)
{
error ="数字を入れてください";
}
}
String path;
if(error != null)
{
request.setAttribute("msg", error);
path = "/reqattr/guess.jsp";
}
else
{
if(hit == number)
{
request.setAttribute("msg","当たり。数字=" + number);
path = "/reqattr/guess_hit.jsp";
}
else
{
request.setAttribute("msg","はずれ。数字=" + number);
path = "/reqattr/guess.jsp";
}
}
RequestDispatcher dispatcher = request.getRequestDispatcher(path);
dispatcher.forward( request, response);
}
}
私のソース-end---------------------------------------------------------------------
お礼
ありがとーございました!! 私の環境でも動きました。