リンクを張る
- 2010-11-26 Fri 15:59:45
- JSP事始め
JSPファイルにリンクを張る練習です。クリックすると別のページに移動する、HTMLではおなじみの機能です。ほとんどHTMLと同じなので、HTMLを知っている人にとっては復習になります。
まず、リンクを張る前提としてsirotoファイルの下にルートファイルになるindex.htmlを作っておきましょう。
<html>
<head><title></title></head>
<body>
ここがWebアプリケーションのルートです。
</body>
</html>
ちなみにですが、ルートファイルはHTMLファイルでもJSPファイルでもどちらでも大丈夫です。
また、何も書いていないのにヘッダータグとタイトルタグを入れていますが、これを書かないとEclipseが赤い×印でエラーを表示するからです。これは表示だけで、実質的な問題はありません(なお、JSPファイルはヘッダーやタイトルのタグがなくてもエラーは表示されません)。
ルートにリンク
ルートとは「根」ですが、「サーバのルート」と「Webアプリケーションのルート」の2種類あります。
サーバのルートは、Tomcatのページのことです。
http://localhost:8080/
Webアプリケーションのルートは、先ほど作ったindex.htmlです。sirotoプロジェクトのおおもとになるファイルです。
では、個々のページからルートにリンクするソースを作りましょう。「jsp_entry」ファイルの下に「LinkRoot.jsp」を作ってください。
<%@page contentType="text/html; charset=Windows-31J" %>
<html>
<body>
<p><h2>ルートにリンクしてみます。</h2>
<p><h3>絶対パス</h3>
<p><a href="http://localhost:8080/">サーバのルートへリンク</a>
<p><a href="http://localhost:8080/siroto/">Webアプリケーションのルートへリンク1</a>
<p><a href="http://localhost:8080/siroto/index.html">Webアプリケーションのルートへリンク2</a>
<p><h3>相対パス</h3>
<p><a href="/">サーバのルートへリンク</a>
<p><a href="/siroto/">Webアプリケーションのルートへリンク1</a>
<p><a href="/siroto/index.html">Webアプリケーションのルートへリンク2</a>
<p><a href="../">Webアプリケーションのルートへリンク3</a>
</body>
</html>
リンクの張り方には、絶対パスと相対パスの2つのやり方があります。同じサーバ内でリンクを張るのは絶対パスでも相対パスでも大丈夫ですが、違うサーバのファイルにリンクするには絶対パスでなければできません。
まず絶対パスですが、TomcatのURLは
http://localhost:8080/
なので、ここにリンクを張ります。
同様に、Webアプリケーションにもリンクを張ることができます。index.htmlは省略することも可能です。
次に相対パスですが、サーバのルートは "/" にリンクすれば済みます。自分の奥さんを呼ぶのに、名前でなくても「おい、あれ」で済むようなものです。
Webアプリケーションのルートは、サーバのルートの下のフォルダsirotoにありますから、
"/siroto/"
と指定します。ここでも、index.htmlを書かなくても可能です。
また、上のフォルダを示す "../" を指定することもできます。LinkRoot.jspファイルは「jsp_entry」フォルダにありますが、その上の「siroto」フォルダを指定するときに "../" を使います。
同じフォルダ内でリンク
次に、同じフォルダ内のファイルにリンクしてみます。
「jsp_entry」フォルダの下に、「LinkSame.jsp」というファイルを作り、ここから同じフォルダ内にある「Calendar.jsp」ファイルにリンクしてみましょう。
<%@page contentType="text/html; charset=Windows-31J" %>
<html>
<body>
<p><h2>同じフォルダのCalendarファイルにリンクします。</h2>
<p><h3>絶対パス</h3>
<p><a href="http://localhost:8080/siroto/jsp_entry/Calendar.jsp">
サーバのルートへリンク</a>
<p><h3>相対パス</h3>
<p><a href="/siroto/jsp_entry/Calendar.jsp">サーバのルートからリンク</a>
<p><a href="../jsp_entry/Calendar.jsp">
「jsp_entry」フォルダの上のフォルダを基準にリンク</a>
<p><a href="./Calendar.jsp">同じ「jsp_entry」フォルダ内でリンク その1</a>
<p><a href="Calendar.jsp">同じ「jsp_entry」フォルダ内でリンク その2</a>
</body>
</html>
絶対パスは問題ないかと思います。
相対パスですが、いろんな書き方があります。覚えておくべきは、"../" が上のフォルダを指し、"./" が同じ階層のフォルダを指すということです。
初めて勉強すると混乱しますが、徐々に慣れてパスをたどれるようにしましょう。
JSP独特のリンク方法
さて、ここからがようやく本題です(ええっ!?)。
メソッドを使ってリンクする方法を学習します。メソッド名は、getContextPath()です。
再び、「jsp_entry」フォルダ内にJSPファイルを作ってください。名前は「LinkMethod.jsp」としておきましょう。
<%@page contentType="text/html; charset=Windows-31J" %>
<html>
<body>
<p><h2>getContextPath()メソッドを使ってリンクしてみよう。</h2>
<p><a href="<%= request.getContextPath() %>">
Webアプリケーションのルートへリンク</a>
<p><a href="<%= request.getContextPath() %>/jsp_entry/Calendar.jsp">
カレンダーファイルへリンク</a>
</body>
</html>
エクスプレッション<%= ~ %>内で、
request.getContextPath()
というメソッドを実行しています。
いきなりrequestという変数が出てきましたが、これは、HttpServletRequestクラスを表す暗黙オブジェクトといわれ、JSPの中で宣言せずにいきなり利用することができます。
そしてこのメソッドを実行すると、コンテキストパスすなわちWebアプリケーションのルートを示す「siroto」という文字(String型)を返します。要するに、<%= request.getContextPath() %>で「siroto」になるということです。
なかなか歯ごたえのある内容だったのではないでしょうか。よく復習してください。
あ、ついでに言うと、JSP・サーブレットでは、getなんちゃら()というメソッドが死ぬほど出てくるので覚悟しておいてください(笑)。
スポンサーサイト
タグ :
Comments: