今日の学習時間。
- Day:17
- Today:2h
- Total:100h
学習内容について。
サーブレットを使う準備。
Eclipseの手順。
- 「ファイル」→「新規」→「動的webプロジェクト」
- Webアプリケーションを作るときは動的Webプロジェクトを選択
- プロジェクト名:任意
- デフォルト・ロケーションを使用:☑︎
- ターゲット・ランタイム:Tomcat8 (Java8)
- 動的webモジュール バージョン:3.1
- 構成:Tomcat8 (Java8) デフォルト構成
- EARメンバーシップ:◽︎
- ワーキングセット:◽︎
- コンテキスト・ルート:(プロジェクト名そのまま)
- コンテンツ・ディレクトリー:WebContent
- web.xml デプロイメント記述子の生成:◻︎
Javaで作ったWeb系プログラムのことをServlet(サーブレット)と呼ぶ。
サーブレットを作成してみる。
「Javaリソース」→「src」→「新規」→「サーブレット」
- Javaパッケージ:(任意)
- クラス名:(任意)
- その他はデフォルト
- URLマッピングが
/(クラス名)
であることを確認
- public:☑︎
- スーパークラスからのコンストラクター:☑︎
- 継承された抽象メソッド:☑︎
- doGet:☑︎
- doPost:☑︎
下記にようなコードが自動生成される。
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloServlet
*/
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Tomcatの設定。
「サーバー」タブを開き、「使用可能なサーバーがありません。このリンクをクリックして新規サーバーを作成してください…」をクリックする。
- 「Apache」→「Tomcat v8.0サーバー」を選択
- サーバーのホスト名:localhost
- サーバー名:ローカル・ホストのTomcat8(Java8)
- サーバー・ランタイム環境:Tomcat8(Java8)
- 「追加および除去」という画面が表示される
- Tomcatで動作させたいWebアプリケーションを選択し、追加ボタンをクリック
「ローカル・ホストのTomcat8(Java8)」の上で右クリックして「開始」をクリック
http://localhost:8080/first_webapp/HelloServletにアクセス。
Served at: /first_webapp
上記のように表示されればOK。
ブラウザにHTMLを表示させてみる。
HelloServlet
のdoGet
メソッドを下記のように変更する。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>はじめてのサーブレット</title>");
out.println("</head>");
out.println("<body>");
out.println("こんにちは、サーブレットの世界へ!!");
out.println("</body>");
out.println("</html>");
}
response.setContentType("text/html; charset=UTF-8");
上記コードで文字コードUTF-8のHTMLのデータを戻すと指定。
また、response.getWriter();
の入力でEclipseから警告が出るので、import java.io.PrintWriter;
を指定する必要がある。
それからは、Tomcatを再起動(右クリック→「再開」)させて先ほどのURLにアクセス。いちいち面倒ではあるがサーブレットを変更するたびに再起動させるのがルール。
Webモジュールから「自動再ロード」の設定項目を「使用可能」に変更すると再起動する必要はなくなる(上書き保存される度に自動でTomcatを再起動)。しかし、PCの負荷が重いなどの理由で自動で再起動されない場合がある。
こんにちは、サーブレットの世界へ!!
このように表示されればOK。
Java WebアプリケーションのURL構造。
http://localhost:8080/first_webapp/HelloServlet/id=12&s=abc
上記を分解して考える。
- プロトコル
http://
(https://
)- 通信手段の取り決め
- ホスト
localhost
- 通信先の名前を指定
localhost
は自分のPC上で起動したTomcatへのアクセス
- ポート
:8080
- 通常のインターネットアクセスでは番号は指定しない
http
は80、https
は443- 番号指定は不要
- Tomcatはデフォルトで8080番というポート番号で動作
- コンテキスト・パス
/first_webapp
- eclipseプロジェクトの名前
- 指定した文字列の先頭に
/
をつけたもの - Tomcatの設定ファイルの中にコンテキスト・パスの設定が保存されている
- モジュールタブを開く
- サーブレット・パス
HelloServlet
- 各プロジェクトで登録されているサーブレットを呼び出すのに必要
- 「URLマッピング」で指定した文字列
- クエリ・パラメータ
id=12&s=abc
名前=値
という形式で指定- サーブレットにデータを渡すことができる
- GETでの通信時しか使えない
- プロジェクトのクリーン
- 「プロジェクト」→「クリーン」
- Tomcatを再起動
- PCに負荷がかかったための動作不具合の場合
- Mavenで取り込むファイルを再ダウンロード
- ①:「Javaリソース」→「ライブラリー」→「Maven依存関係」
- ②:
.m2
フォルダを削除 - ③:Maven→「プロジェクトの更新」を選択
- ④:今利用しているプロジェクト、もしくはすべてのプロジェクトを選択
- ⑤:「pom.xml からプロジェクト構成を更新」「ローカル・ファイルシステムからワークスペース・リソースをリフレッシュ」「プロジェクトをクリーン」の3つにチェックを入れた状態で「OK」をクリック
- プロジェクトを削除→再作成
- 最後の手段
- 「ディスク上からプロジェクト・コンテンツを削除(元に戻せません)」:☑︎
今日の反省と明日の目標。
夕方に旅行から帰ってきて、それから2時間勉強しました。正直、遊び疲れてるけど気合で。
幸いにも今日の内容は設定だけだったので、特に悩むこともなくスイスイ進みました。Javaでどうやってアプリを作っていくのか疑問に思いながら今まで進めてきましたが、ようやく形になっていくので楽しみです。
明日はJSPについて学習していきます。