Javaによる Webアプリケーション入門 第6回 Servlet Javaによる Webアプリケーション入門 第6回
ここでの内容 Servlet の概要について学ぶ。特に、HTTPの要求と応答との関係に着目する。 Servlet の動かし方を学ぶ。
Servletの基本
Servlet とは (1) JSPと同じく、Webブラウザからのリクエストを処理して動的なページを作成するためのもの。 JSPと同じく、Tomcat などの Webコンテナの内部で動く。
Servlet とは (2) HttpServlet というクラスを継承したクラス。必要なメソッドをオーバーライドする。 CGIと同じように、プログラムの中から HTML を出力できる。 JSPも、Tomcatの内部では Servlet に変換される。
Servlet のメソッド HTTPのGETメソッドに対して doGet public void doGet( HttpServletRequest req, HttpServletResponse res) HTTPのPOSTメソッドに対して doPost public void doPost( HttpServletRequest req, HttpServletResponse res)
HttpServletRequest と HttpServletResponse HTTPの「要求」に対応する HttpServletResponse HTTPの「応答」に対応する
HTMLの出力 HttpServletResponse 型のオブジェクトである response から PrintWriter オブジェクトを取り出す。 HTTPの応答で、HTMLの出力を行うから PrintWriter オブジェクトの println() あるいは print() メソッドで HTML を書き出す PrintWriter out = response.getWriter(); out.println(“<html>”);
Servletでの要求・応答の処理
HttpServletRequest と HttpServletResponse HTTPの「要求」に対応する HttpServletResponse HTTPの「応答」に対応する
要求のヘッダ情報の取得 HttpServletRequest 型のオブジェクトである request から ヘッダ情報の Enumeration を取り出す。 Enumeration e = request.getHeaderNames();
Enumeration について オブジェクトを「つぎつぎと」処理していくためのオブジェクト Enumeration e = request.getHeaderNames(); while (enum.hasMoreElements()) { String name = (String)enum.nextElement(); out.print(name + ": "); }
クエリーの処理 HttpServletRequest 型のオブジェクトである request を取得する。 request.getParameter(“familyName”) を実行。
Tomcat で Servlet を動かす
Servlet のコンパイル 次のパッケージはJ2SEには入っていない。 javax.servlet パッケージ javax.servlet.http パッケージ Tomcat 中のjarファイルにこのパッケージが含まれているので、classpath に含めてコンパイル javac –classpath “%CATALINA_HOME%\common\lib\servlet-api.jar” LoopServlet.java
Tomcat への配置 Servlet はコンパイルしておくこと。 WEB-INF/classes フォルダに置く。 WEB-INF/ --- web.xml |- classes/ --- LoopServlet.class | |- DateServlet.class |- lib/
web.xml の編集 Servlet を置いただけでは動かない。 web.xml を編集する必要あり。
web.xml の例 (抜粋) <servlet> <servlet-name>loop</servlet-name> <servlet-class>LoopServlet</servlet-class> </servlet> (中略) <servlet-mapping> <url-pattern>/loop</url-pattern> </servlet-mapping>
Servlet へのアクセス web.xml の url-pattern 要素で指定した URL にアクセスする。 http://localhost:8080/test/loop http://localhost:8080/test/date