質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

getParameterの取得する値と型というのがよく分からない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 8,900

R.lawliet

score 52

前提・実現したいこと

サンプルソースを眺めている中で理解できない部分があるので、
理解を深めたい。

問題点

Servletの中にある、
(String)getParameter("contents")の(String)が何の役割を果たしているのか分かりません。
最初はStringに変換しながら取得でもしているのかと思ったのですが、
getParameterは値をStringで取得するとどこかで見ました。

そして、
値というのは僕の中で数値みたいな意味合いを含んでおり、
ぱっと連想してしまうのはint型です。

"contents"は、自由に入力出来るテキストBOXの中身で、String文字列が入力されるはず。
「文字列」の「値」というのがなんなのかよく理解が出来ません。

今回の質問にはあまり関係ないと思いますが、質問するときはソース全体を、
ということでBeanも載せておきます。

どうかよろしくお願いします。

ソースコード

Servlet
package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import bean.PlanBean;

public class Controller extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @SuppressWarnings("unchecked")
    public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        try{
            //リクエストの文字コードをセットする。
            request.setCharacterEncoding( "Shift_JIS" );

            /* クライアントから送信された入力情報を取得する */
            String sMonth = (String)request.getParameter("month");//★★これら
            String sDay = (String)request.getParameter("day");//★★
            String sStart = (String)request.getParameter("startTime");//★★
            String sEnd = (String)request.getParameter("endTime");//★★
            String sContents = (String)request.getParameter("contents");//★★
            String sCategory = (String)request.getParameter("category");//★★

            /* クライアントの入力情報を加工しPlanBeanにセットする */
            PlanBean pb = new PlanBean();
            pb.setDate( sMonth + "/" + sDay );
            pb.setTime( sStart + "-" + sEnd );
            pb.setContents( sContents );
            pb.setCategory( sCategory );
            /* requestスコープへクライアントの入力情報をセットする */
            request.setAttribute("PLANBEAN",pb);

            /* クライアントの入力情報をsessionスコープへ追加する 
             * sessionスコープがnullであれば
             * 初回リクエストと判断しインスタンスを生成する
             */
            HttpSession session = request.getSession();
            List<PlanBean> list =
                                 (ArrayList<PlanBean>)session.getAttribute("PLANBEAN_LIST");
            if( list==null ) list = new ArrayList<PlanBean>();
            list.add(pb);

            /* sessionスコープへクライアントの入力情報履歴をセットする */
            session.setAttribute("PLANBEAN_LIST",list);
            
        }finally{
            /* jspへ転送する */
        response.setContentType("text/html; charset=Shift_JIS");
        request.getRequestDispatcher("/jsp/output.jsp").forward(request, response);
        }
    }
}
Bean
package bean;

/* クライアントの入力情報を管理する */
public class PlanBean {
    
    private String date_;        // 日付
    private String time_;        // 開始時間-終了時間
    private String contents_;        // 内容
    private String category_;        // カテゴリ
    
    public PlanBean(){}
    
    /** getter */
    public String getDate() {
        return date_;
    }
    public String getTime() {
        return time_;
    }
    public String getContents() {
        return contents_;
    }
    public String getCategory() {
        return category_;
    }

    /** setter */
    public void setDate(String date) {
        this.date_ = date;
    }
    public void setTime(String time) {
        this.time_ = time;
    }
    public void setContents(String contents) {
        this.contents_ = contents;
    }
    public void setCategory(String category) {
        this.category_ = category;
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

こんにちは。

ServletRequest#getParameterメソッドはString型を返しますので、
 /* クライアントから送信された入力情報を取得する */
 String sMonth = (String)request.getParameter("month");//★★これら
 String sDay = ・・・
の部分のキャスト、つまり = と requestの間にある (String) は不要です。
それと
値というのは僕の中で数値みたいな意味合いを含んでおり、 
ぱっと連想してしまうのはint型です。
についてですが、前半の
値というのは僕の中で数値みたいな意味合い
というイメージは、プログラムのデータは最終的にはどれも2進数(の数値)である
という意味においても間違ってはいないと思いますが、そこで
int型

ぱっと連想してしまう
のが拙いかと思います。

たとえば、String型の変数 s があったとして、これが文字列"ABC"を
参照しているとき、つまり分かりやすくいえば、変数 s を
System.out.println(s);
で出力したら 
ABC
と表示される状況のときに

sの値は"ABC"  

という(便宜的な)言い方をして、プログラマ同士の会話として話が通じます。

期待されている答えと違っていたら、すみません。
参考になれば幸いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/09 17:18

    やはりこのキャストは不要でしたか、助かりました。

    >sの値は"ABC"
    凄く欲しかった回答です。
    言葉で表せませんが理解は出来ました!!ありがとうございます♪

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる