教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習
次のプログラム HelloWorld0.java は、指定したWebサーバ下の
ディレクトリ(アプリケーションのルートディレクトリ/build/web/WEB-INF/classes/パッケージ名)下に格納されているコンパイル済みのServletファイルを実行する
ことで、ブラウザ上にテキストを表示するプログラムである。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld0 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
// HTMLを出力するので、setContentTypeメソッドで
// CONTENT-TYPEにtext/htmlを指定
response.setContentType("text/html;charset=UTF-8");
// setContentTypeメソッドで設定した後、getWriterメソッドを
// 呼び出して、ブラウザへの表示に使うPrintWriterオブジェクト
// を取得
PrintWriter out = response.getWriter();
// PrintWriterオブジェクトのprintlnメソッドの引数で渡した
// メッセージがブラウザに表示される
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World!");
out.println("</body>");
out.println("</html>");
// closeメソッドを呼び出すと出力終了
out.close();
}
}
たとえば、Webサーバが動いているホストlocalhostのWebアプリケーションのルートディレクトリ下のbuild/web/WEB-INF/classes/パッケージ名 ディレクトリに
格納されているコンパイル済みのServletファイルHelloWorld0.class(テキストファイルはHelloWorld0.java)を実行する。そうすると、ブラウザ上に"Hello World"というテキストが表示される。
プログラム HelloWorld0.java の説明:
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;では、HelloWorld.javaにおいて、Java APIとServlet APIを構成する クラスライブラリ(パッケージ)を使えるように宣言している。
クラス定義は、次のようにおこなわれる。
public class HelloWorld0 extends HttpServlet {
ここでは、HelloWorld0クラスが定義される。通常のServletは、
HttpServletクラスを拡張して定義することが多く、HelloWorld0.java
でも、HttpServletクラスを拡張する。
HelloWorld0.javaでは、クライアントからの要求をGETメソッドで 受け取るために、doGetメソッドに処理を記述する。 POSTメソッドの場合には、doPostメソッドに処理を記述する。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
// HTMLを出力するので、setContentTypeメソッドで
// CONTENT-TYPEにtext/htmlを指定
response.setContentType("text/html;charset=UTF-8");
// setContentTypeメソッドで設定した後、getWriterメソッドを
// 呼び出して、ブラウザへの表示に使うPrintWriterオブジェクト
// を取得
PrintWriter out = response.getWriter();
// PrintWriterオブジェクトのprintlnメソッドの引数で渡した
// メッセージがブラウザに表示される
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World!");
out.println("</body>");
out.println("</html>");
// closeメソッドを呼び出すと出力終了
out.close();
}
以下では、doGetメソッドの内容を説明する。
doGetメソッドは、ServletにHTTPのGETメソッドで
アクセス時に、Servletコンテナから呼び出されるメソッドである。
ブラウザから普通にアクセスすると、このメソッドが呼び出される。
doGetメソッドは、引数にHttpServletRequest
オブジェクトとHttpServletResponseオブジェクトをとる。前者の
オブジェクトには、Servletの入力が格納され、後者のオブジェクト
には、Servletからの出力が格納される。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
このメソッドの処理を以下で説明する。 まず、Servletからの出力データ(ここでは、HTML文書)の形式を 指定するために、以下のように、HttpServletResponseオブジェクト のsetContentTypeメソッドを呼び出す。
response.setContentType("text/html;charset=UTF-8");
次に、setContentTypeメソッドで設定した後、以下のように、 getWriterメソッドを呼び出して、ブラウザへの表示に使う PrintWriterオブジェクトを取得する。
PrintWriter out = response.getWriter();
そして、以下では、上記で取得したPrintWriterオブジェクトの printlnメソッドが呼び出され、引数で渡したメッセージが ブラウザに表示される。
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World!");
out.println("</body>");
out.println("</html>");
出力が終わると、PrintWriterオブジェクトのcloseメソッドを呼び出し て、Servletからの出力を終了する。
このServletは、以下のようなHTML文を出力する。
<!DOCTYPE html> <head> <title>Hello World</title> </head> <body> Hello World! </body> </html>
次のプログラム HelloWorld1.java は、HelloWorld0.javaと同様に、指定したWebサーバ下のディレクトリ
(アプリケーションのルートディレクトリ/ソースパッケージ/パッケージ名)下に
格納されており、ブラウザ上にテキストを表示するプログラムである。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld1 extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and
* <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
// HTMLを出力するので、setContentTypeメソッドでCONTENT-TYPEに
// text/htmlを指定
response.setContentType("text/html;charset=UTF-8");
// setContentTypeメソッドで設定した後、getWriterメソッドを
// 呼び出して、ブラウザへの表示に使うPrintWriterオブジェクト
// を取得
PrintWriter out = response.getWriter();
// PrintWriterオブジェクトのprintlnメソッドの引数で渡した
// メッセージがブラウザに表示される
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World!");
out.println("</body>");
out.println("</html>");
// closeメソッドを呼び出すと出力終了
out.close();
}
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
}
プログラム HelloWorld1.java の説明:
以下では、HelloWorld0.javaと異なる部分のみ説明する。 processRequestメソッドは、doGetメソッドとdoPostメソッドで 呼び出されるメソッドを定義している。両者のメソッドでおこなう 処理を共通にするために、processRequestメソッドとしてひとつの メソッドとして実装している。
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequestメソッドの処理の詳細は、上述したHelloWorld0.javaの doGetメソッドの処理の定義と同様である。
通常、Servletでは、doGetメソッドとdoPostメソッドのどちら かは必ず存在すると考えられる。HelloWorld1.javaでは、 Servletでおこなう処理の内容を共通化して、同じ処理が doGetメソッドとdoPostメソッドでおこなわれるように している。
doGetメソッドは、上述したHelloWorld0.javaのdoGetメソッドと 同様に、引数にHttpServletRequestオブジェクトとHttpServletRequest オブジェクトを取る。前者のオブジェクトには、Servletへの入力が、 後者のオブジェクトにはServletからの出力が格納される。doGetメソッド の処理では、上述したprocessRequestメソッドを呼び出す。
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
doPostメソッドは、ServletにHTTPリクエストのPOSTメソッドで アクセスされた時に、Servletコンテナから呼び出される。 通常、HTMLフォームを使ってブラウザからアクセスする時に、 このメソッドが呼び出される。doPostメソッドの処理でも、doGet メソッドと同様に、上述したprocessRequestメソッドを呼び出す。
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
getServletInfoメソッドは、Servletに関する説明を表示する 場合に用いる。
public String getServletInfo() {
return "Short description";
}
問題-1
HelloWorld0.java をIDEとしてNetBeansを
使って実行してみよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-2
HelloWorld0.java で、ブラウザに出力
するテキストを"Hello Servlet!"、それからブラウザのタイトルを
"Servlet exercise”としたプログラムをHelloServlet.javaとして
実行してみよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-3
HelloWorld1.java をIDEとしてNetBeansを
使って実行してみよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-4
SumServlet.javaを作成し、
実行せよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-5
RandServlet.javaを作成し、
実行せよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-6
RandServlet1.javaを作成し、
実行せよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-7
EvenSumServlet.javaを作成し、
実行せよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。
問題-8
OddSumServlet.javaを作成し、
実行せよ。
ただし、NetBeansのServletテンプレートを使って、デフォルトの Servletクラスを作成、これを修正してプログラムを作成すること。