まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:jetty

普段は Eclipse で Java のコーディングをしています。そして開発時のアプリケーションサーバーには Jetty を使っています。最近この開発環境を構築する際の手順を久しぶりに行ったのでまとめておきました:

まず Eclipse に Java EE の開発環境までは導入済みであると仮定します(或いは初めから Java EE 開発環境を選択して Eclipse をインストールします)。その Eclipse に Jetty のプラグインを導入して、開発環境を構築します。

Jetty プラグインをインストールするには、Eclipse のメニューから Help - Eclipse Marketplace を選択します:
2017013101


マーケットプレースのダイアログが開いたら、検索ボックスに "jetty" と入力して検索します。検索結果の中に
 ・Eclipse Jetty
 ・Run-Jetty-Run
が含まれているはずなので、これらを1つずつインストールします(まとめての導入はできないので、2回に分けてインストールを実行します)。インストールが完了したら Eclipse を再起動:
2017013102


これで開発用アプリケーションサーバーに Jetty を使った開発が可能になります。開発中のウェブアプリケーションをこの環境下で実行するにはプロジェクトを右クリックし、Run As を選ぶと、実行方法の選択肢の中に "Run Jetty" というものが追加されているはずです。これを選択します:
2017013103


すると選択中のウェブアプリケーションが Jetty に読み込まれた形で起動します。起動時のポート番号は 8080 番です:
2017013104


ウェブブラウザで http://localhost:8080/(プロジェクト名) にアクセスすると、開発中のウェブアプリケーションに試験アクセスすることができます:
2017013105


今はいちいち Jetty を別途インストールする手間とか不要になったんですね。こりゃ便利!

Tomcat や Jetty などの Java ウェブアプリケーションでエラーが発生した時に表示されるエラーページを独自のものにカスタマイズする方法の紹介です。もちろんエラーが発生しないことが望ましいのですが、万が一エラーが発生してしまった場合に、標準のエラーメッセージが出てしまうと、どのアプリケーションサーバーを使っているのかが分かってしまいます。その結果、そのサーバーのセキュリティホールを狙われる可能性もないわけではありません。あとエラーページにユーモアを交えるような目的でも有用だと思います。

ではその手順の紹介です。 まずアプリケーションの web.xml の最後に以下の青字の情報を追加します:
  :
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
  </error-page>
</web-app>

この例ではステータスコードが 404(ページが見つからないエラー)の時と、500(サーバー内部エラー)の時用のページをカスタマイズする前提で、その2つのページに関する情報を追加しています。他のエラー(認証など)についてもカスタマイズする場合は同様に追加してください。この例ではページが見つからない場合は /error/404.html に、Java コード等での内部エラー発生時には /error/500.jsp にそれぞれ飛ばすような指定をしています。もちろん静的な HTML ページでもいいのですが、今回は 500 エラーの時には JSP にして動的に作成してみます。

そしてこれらのページを作っていきます。/error/404.html は 404 エラー、つまり URL が間違っていることになるので、こんな感じの内容で:
<html>
<head>
<title>404</title>
</head>
<body>
<h1>見つからないよ~</h1>
</body>
</html>

一方、/error/500.jsp は 500 エラー、つまり Java の内部エラーなので、スタックトレースも表示するような内容にしてみます。試しにこんな感じにしました。また isErrorPage を true にしています:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="javax.servlet.*" %>
<% request.setCharacterEncoding("utf-8"); %>
<%@ page isErrorPage="true"%>

<html>
<head>
<title>500</title>
</head>
<body>
<h1>Internal な Server の Error だよ~</h1>

<% exception.printStackTrace(new java.io.PrintWriter(out)); %>


</body>
</html>

最後に、わざと 500 エラーを発生させるための JSP ページを作成します:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="javax.servlet.*" %>
<% request.setCharacterEncoding("utf-8"); %>

<%
String[] a = null;
for( int i = 0; i < a.length; i ++ ){ //. ここでぬるぽエラー
}
%>

<html>
<head>
<title>index</title>
</head>
<body>
<h1>Index</h1>

<% exception.printStackTrace(new java.io.PrintWriter(out)); %>


</body>
</html>

この状態で動かしてみます。まず存在しないページの URL を叩くとこんな感じのエラーになります:
2015012706


次に上記で作成したわざと NullPointer エラーがでるページにアクセスするとこんな感じに:
2015012707


できた!
 

CentOS で(Eclipseを使って) Java の開発環境を整備するまでの手順を紹介します。
Eclipse を使うので、CentOS には X Window やデスクトップといったモジュールが導入されていることが必要です。


まず Eclipse のインストールそのものは簡単です。JDK を導入した上で最新版をダウンロードして展開してもいいですし、最新版でなくてもよければもっと簡単に yum でインストールすることもできます(以下、こちらの手順を使っている前提で紹介を続けます):
# yum install eclipse

yum を使う場合であれば JDK ごとインストールされてます。なお、2014/10/22 現在ですが、この方法でインストールされる Eclipse のバージョンは 3.6.1(Helios) でした。


加えてウェブアプリケーションの動作確認のため FireFox も導入しておきます:
# yum install firefox

インストールが完了したら、デスクトップのメニューから アプリケーション > プログラミング > Eclipse で起動できます:
2014102101


初回起動時はワークスペースをどのディレクトリに作るか聞かれます。特に理由がなければデフォルトのままでも構いません。"Use this as the default and do not ask again" にチェックを入れておくと、次回起動時にこの質問は聞かれなくなります:
2014102102


Eclipse が初回起動した時の画面です。チュートリアルなどは飛ばして、"Workbench" をクリックし、実際の作業画面に移ります:
2014102103


実際にコーディングを行う作業画面がこちらです。最初の段階では何もプロジェクトがないのでのっぺらぼうですが、ここに作業するプロジェクトを追加していくことになります:
2014102104


ただ、この段階ではまだ Eclipse に充分なプラグインが導入されていないため、Java のウェブアプリケーションを作るウィザードも使えませんし、デバッグ用のウェブアプリケーションサーバーも含まれていません。最低限必要な環境を追加していく必要があります。

Eclipse 作業画面のメニューから Help > Install New Software を選択して、プラグインの更新ダイアログを表示します。そして Work with: 欄に使っている Eclipse のバージョンに合わせた更新サイト(3.6.1 であれば http://download.eclipse.org/releases/helios)を指定します。しばらく待つと下に更新可能なプラグインの候補がカテゴリーに分類されて表示されます:
2014102105


ここから必要なものを選択してチェックを付けていきます。まずは "General Purpose Tools" に分類されている "Marketplace Client" にチェック: 
2014102106


続けて "Web, XML, and Java EE Development" に分類されている "Eclipse Java EE Developer Tools" と "Eclipse Web Development Tools" の両方に(上記と併せて3つ)チェックします:
2014102107


そして Next ボタンを2度クリックし、使用条件を確認した上で accept して、最後に Finish ボタンをクリックすると選択した3つのプラグインの導入が開始されます。プラグインの導入が完了すると Eclipse の再起動を促されるので、再起動("Restart Now")します。再起動後はこの3つのプラグインが有効になった状態で起動します。

この時点では Java アプリケーションプロジェクトを作成することはできるようになっていますが、まだデバッグ用のアプリケーションサーバーが用意されていません。Apache Tomcat などを別途導入してもいいのですが、ここでは簡単に導入できる Jetty をインストールして Eclipse 内から使えるようにします。


Eclipse の再起動後、今度はメニューから Help > Eclipse Marketplace を選択します(Marketplace も上記で導入しているので、再起動後からは使えるようになっているはずです)。

Marketplace ダイアログが表示されたら Find 欄に "Jetty" と入力して、Jetty 関連のマーケットモジュールを検索します:
2014102108


この結果表示されるモジュールの中から、以下の3つをインストールします:
(1) Eclipse Jetty
(2) Run-Jetty-Run
(3) WebLauncher

Marketplace では3つまとめてインストールすることができないので、これらを1つずつ探して "Install" ボタンをクリックする、と繰り返します。そして3つ全てインストールし終わったら、再度 Eclipse を再起動します。これで準備完了です。


では改めてこの環境で Java アプリケーションを作って動かしてみましょう。Eclipse のメニューから File > New > Project を選択してプロジェクトウィザードを出し、Web の下にある "Dynamic Web Project" を選択して "Next" をクリックします。プロジェクトの名称は適当に("TestWeb" など)入力します。他はデフォルトのまま "Finish" をクリックしてプロジェクトを作成します:
2014102109


このプロジェクトにテスト用の JSP ファイルを1つ追加します。プロジェクト名部分を右クリックして New > File を選択し、このプロジェクトの WebContent フォルダ内に test.jsp というファイルを追加します:
2014102110


追加作成した test.jsp を選択してエディタで開き、以下の様な内容を記入します。単純に現在時刻を表示するだけのページですが、Java を使っているので一応 Java ウェブアプリケーションと言えると思います:
2014102111


では作成したこのアプリケーションを実際に動かしてみましょう。プロジェクトを右クリックして Run As > Run Jetty を選択します:
2014102112


Eclipse 内で Jetty が(デフォルトでは 8080 番ポートで)起動します。これでこのプロジェクトが Jetty から参照できるようになっているので、同一マシンで FireFox を起動し、http://localhost:8080/TestWeb/test.jsp にアクセスしてみます:
2014102113
動作が確認できました。ちゃんと Java ウェブアプリケーションの開発や動作確認までできる環境が揃いました!



以下はオマケですが、せっかく Linux 版 Eclipse をインストールしたので、Windows 版ではできない Terminal 機能を紹介します。Eclipse 内のビューを使ってターミナルコンソールを起動する、というものです。

先程と同様にメニューから Help > Install New Software を選択して、今度は "General Purpose Tools" 以下の "Local Terminal" をチェックしてインストールして、Eclipse を再起動します:
2014102114


再起動後、Eclipse のメニューから Window > Show View > Other を選択し、Terminal の下にある Terminal を選択して OK をクリックします:
2014102115


すると画面右下に "Terminal" という名前のタブが1つ追加されます。まだ有効になっていませんが、ここがターミナルコンソールとして使えるウィンドウになります:
2014102116


実際にコンソールを使うにはタブ内の一番右のアイコン(マウスオーバーすると "New Terminal Connection in Current View" と表示される所)をクリックして、接続設定ダイアログを表示します。特に変更の必要はないので、そのまま OK ボタンをクリックします:
2014102117


ターミナルコンソールが有効になり、シェルとして使えるようになります。これで別窓のシェルにいちいち移動する手間が省けます:
2014102118


ただこの機能がまだ Incubation 段階だからなのかもしれませんが、このターミナルコンソールでは日本語が化けて表示されてしまうようです。日本語の入出力に依存するような自由な使い方はまだできない、という認識の元で使えそうです。






このページのトップヘ