tomcat 環境ができたので、簡単な動作確認用のコードを書いてみた。
使用したコードは GitHub で公開してますので、ポイントだけ解説していきます。
新しい環境になれる際にやることは、大抵、ハローワールドだと思う。
が、Web アプリの場合、実務的に重要なのはデプロイ時の
・コンテキストルートの癖
・url mapping の設定
あたりになってくると思うので、この点を意識して(いきなりだが)サーブレットファイルを3つ用意してみた。
ファイル1つだけだと遷移できるかどうか確認できないので。
だから、3ファイルには相互にリンクを張って狙った通りに遷移できるか試そうという意図です。
このうちの1つのファイルがこれ(Page1.java)。
シンプルな .html になるが、他の2つのページへのリンク入れてますね。
package info.phazor.link;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Page1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>link test"</title>);
out.println("</head>");
out.println("<body>");
out.println("<p>テストページ1</p>");
out.println("<p><a href=\"/link-1.0/page2\">テストページ2へ</a></p>");
out.println("<p><a href=\"/link-1.0/page3\">テストページ3へ</a></p>");
out.println("</body>");
out.println("</html>");
}
}
リンクの張り方を適当に変えて Page2.java と Page3.java も作成。
Mac なのでエスケープ文字は \ を使ってますが、windows の場合は ¥(半角)使えばコンパイル通ると思います。
これらのサーブレットから生成されるページが、リンク先に指定した URL に正しくマッピングされていないとブラウザ上でリンクをクリックしてもリンク先のページが表示されないことになる。
で、そのマッピングの設定は web.xml が担当している。
今回の場合は、以下(関係箇所を抜粋)のようになる。
<servlet>
<servlet-name>Page1</servlet-name>
<servlet-class>info.phazor.link.Page1</servlet-class>
</servlet>
<servlet>
<servlet-name>Page2</servlet-name>
<servlet-class>info.phazor.link.Page2</servlet-class>
</servlet>
<servlet>
<servlet-name>Page3</servlet-name>
<servlet-class>info.phazor.link.Page3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Page1</servlet-name>
<url-pattern>/Page1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Page2</servlet-name>
<url-pattern>/Page2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Page3</servlet-name>
<url-pattern>/Page3</url-pattern>
</servlet-mapping>
要するに
・上の3段でサーブレットの名前とクラスを対応づけ
・下の3段でサーブレットと URL を対応づけ
ているわけですね。
これで、生成したページとURLをマッピングさせているわけですね。
tomcat 上で動作させましたが、割とさくさく遷移してくれました。
あとは静的なファイルを用意して、これらの集積でサイトが構築できる、という理屈のようです。
Java のこういったクセのないアプローチはさすが Java って感じですね。
まあ、たぶん、アノテーションなどを使った「モダン」な書き方もあるんでしょうが(苦笑)。
なお、GitHub リポジトリにある link2 は、上のコードにユーザー認証(session を使ったパスワード認証)を付け加えたものです。
猪股弘明
“【Mac】ハロワールドっぽいページを複数作って遷移の確認【Servlet】” への1件の返信