- ベストアンサー
サーブレットの動作
以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、simpleDB.jspに飛ぶようになっています。 疑問点は以下です。 ・GetやPostを使って送られてくるデータがないのに、なぜ 本プログラムが動くのか分かりません(根本的に分かって ないんですが)。 ・getServletContext().setAttribute("list", employeeList)で listに設定をしてますが、listは飛ぶ先のsimpleDB.jspで定義 されています。なぜこのサーブレットで定義されていないものを、 設定することが可能なのでしょうか? 以上、ご回答頂けると幸いです。 ---------- import java.io.IOException; import文以下略 public class EmployeeServlet extends javax.servlet.http.HttpServlet { /** * 初期化メソッド * 社員一覧をapplicationスコープにセットします */ public void init() { EmployeeDAO dao = new EmployeeDAO(); //EmployeeDAOクラスは他で定義済み ArrayList<Employee> employeeList = dao.findAll(); getServletContext().setAttribute("list", employeeList); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * リクエストを処理するメソッド * simpleDB.jspに移動し、社員一覧を表示します */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nextPage = "/view/simpleDB.jsp"; ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher(nextPage); rd.forward(request, response); } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>>> ただdoGetやdoPostはリクエストのHTTPメソッドがGetまたはPostメソッド >>> の時に呼ばれると理解している 仰るとおりです。 では、URLを http://............. とブラウザで入力するのはなんでしょうか。 実は、これもGetメソッドです。formタグや<a>タグだけではないんですね。 「直接呼び出すことが出来ます。」 といったのはこのことです。
その他の回答 (2)
- auty
- ベストアンサー率58% (284/486)
>>> ・GetやPostを使って送られてくるデータがないのに、なぜ 本プログラムが動くのか分かりません ・ サーブレットの仕様に基づいて作られたWebアプリケーションサーバ(例えばTOMCAT)が面倒を見てくれます。 呼び出し方は、web.xmlファイルの <servlet> <servlet-mapping> で指定できます。つまり直接呼び出すことが出来ます。 >>> ・getServletContext().setAttribute("list", employeeList)で listに設定をしてますが、listは飛ぶ先のsimpleDB.jspで定義 されています。なぜこのサーブレットで定義されていないものを、 設定することが可能なのでしょうか? ・ これはオブジェクトemployeeListに名前listを付けているだけで、後で利用するためのものです。simpleDB.jspでは、そのオブジェクトを探して使うだけです。
補足
ご回答ありがとうございます。助かります。 >・ サーブレットの仕様に基づいて作られたWebアプリケーションサーバ >(例えばTOMCAT)が面倒を見てくれます。 もう少し質問させてください。 init()メソッドは Servletプログラムに初めてリクエストがあったときに 呼ばれるものと記述がありましたので、動作は分かります。 ただdoGetやdoPostはリクエストのHTTPメソッドがGetまたはPostメソッド の時に呼ばれると理解しているので、なぜこれらのメソッドが呼ばれるのか分かりません。 追加の質問で大変申し訳ありませんが、ご回答頂けないでしょうか?
- _ranco_
- ベストアンサー率58% (126/214)
EmployeeServletをACTIONとして指定しているFORMとかあるわけでしょ?
補足
説明不足で申し訳ありません。 >EmployeeServletをACTIONとして指定しているFORMとかあるわけでしょ? ないです。JSPは上記の飛ぶ先のsimpleDB.jspだけで、htmlファイルはありません。データが飛んでこないのに、なぜ動作するのかが疑問になり質問をさせて頂いたわけです。 具体的には各メソッドがどういうタイミングでどこからどういう引数をもらって動いているのかがよく分からです。
お礼
なるほど、大変良く分かりました。 追加の質問にまでご回答頂きありがとうございます。