K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>はじめまして。 > >>Henacat起動まではうまくできたのですが、掲示板のタイトル・ハンドル名 >>・メッセージの内のどこかが >>未入力のままで送信を押すと、リスト3-17のServletServiceの28行目で >>java.lang.ArrayIndexOutOfBoundsExceptionが発生します。 >>keyValue[0]に対するkeyValue[1]がない、ということだと思うんですが、 >>これはどこかコードを写し間違えているでしょうか? > >このケースでは、ServletServiceの20行目の param.split("=") のところで、 >split()メソッドの仕様上、「a=」という文字列をparam.split("=")のように >split()すると、 >・戻り値の配列の要素数は2で、[0]には「a」が、[1]には空文字が入る >のではなく、 >・戻り値の配列の要素数は1で、[0]にだけ「a」が入る >という仕様になっているためですね。 >https://docs.oracle.com/javase/jp/6/api/java/lang/String.html#split(java.lang.String) > >(試していませんが)param.split("=", -1) とすればよいかと思います。 > >Henacatはあくまでサンプル実装なので、こういうエラーケース的なものの >対処が甘いのはご容赦ください、と言いたいところですが、これはちょっと >実用上問題がありすぎるので、後ほど正誤表に上げさせていただきます。 >ご指摘ありがとうございました。 > >>あと、このstringToMapメソッド内のparameterMapに過去の投稿内容も >>保持しているという認識で合っているでしょうか? >>しかし毎回メソッドが呼ばれるたびにnewしていては過去の内容は >>保持できませんよね? > >parameterMapは毎回メソッドが呼ばれるたびにnewしていて、 >1回のリクエストごとに使い捨てです。 >リスト3-17 ServletService.javaの76行目で、 > >info.servlet.service(req, resp); > >としてサーブレットのservice()メソッドを呼んでいますが、 >この呼び出しが、リスト3-26のHttpServlet.javaの13行目のservice()メソッドを >呼び出すことになり、この中で、メソッドがPOSTの場合は(サブクラスの)doPost() >メソッドを呼んでいますから(19行目)、これはつまりリスト3-6のPostBBS.javaの >doPost()メソッドを呼び出しています。 >ここで、新たにMessageクラスのインスタンスをnewして、staticフィールドの >messageListにメッセージをつないでいます。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!