Linuxでサイトをつくる JSPでrewriteとAJPの連携でURLを加工

トップ ›  Linux

Linuxでサイトをつくる

JSPでrewriteとAJPの連携でURLを加工

2011年2月6日 

JSPを使ってページを作っても記事のURLが、たとえば「/index.jsp?id=01100」とかでは、何となく味気ないですよね。もちろん、検索など多くのパラメータを必要とするたとえば「/search.jsp?q=700&la=ja&api=10」といったように複数の値を渡す場合は有意義です。

しかし、何らかの一つのパラメータを渡すだけで記事の表示ができるなら「/01100.html」というようなJSPでも[?(クエッション)]を無くして表示がしたいですよね。

でも「そんなのJSPじゃ無理」ということにも。でもJSPでも可能なのです。それを実現するのがApacheの機能の一つ、mod_rewriteを使うのです。

■ mod_rewriteの設定作業

Apacheの設定ファイル「httpd.conf」を開いてください。

その中に「#LoadModule rewrite_module modules/mod_rewrite.so」という設定値があります。この「#」を消しコメントアウトして、設定値を有効にします。

その他、今回はajpと組み合わせて使用するので、下記のようにコメントアウトしてください。

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
↓コメントアウトします
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so

次にサイトのURLの構成です。

http://localhost/test2/location.html とか、http://localhost/test2/sitemap.html

といった「/test2/・・・」といったように「test2」を軸にしたURLにしたいとします。

今度は、Tomcat内の「webapps」内に新しく「test2」というディレクトリ(フォルダ)を作ります。

その「test2」内に次のコードで名前は「uri.jsp」でJSPを作成してください。

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.lang.*" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>テストページ</title>
</head>
<%
request.setCharacterEncoding("utf-8");

String sCode= request.getParameter("a");
%>
<body>
aのパラメータ値:<%=sCode%><br />

</body>
</html>

今度は、またApacheの設定に戻って、次の項目をhttpd.confの一番下に記述してください。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/test2/(.*)$ ajp://localhost:8009/test2/uri.jsp?a=$1 [P]
</IfModule>

それでは、Tomcatの再起動、Apacheの再起動をしてください。

■ 動作の確認

それでは、下記のようなURLでtest2にアクセスしてみてください。

http://localhost/test2/12221.html

そうすると下記のように表示されると思います。

aのパラメータ値:12221.html

■ 動作の原理

まず、「RewriteRule ^/test2/(.*)$ ajp://localhost:8009/test2/uri.jsp?a=$1 [P]」は、RewriteRule ^/test2/(.*)$の設定によって、/test2/以下の文字等をすべて値として、Tomcatの/test2/uri.jspへ、”a”の値として渡してください、という設定です。

そして、uri.jspでは、”a”の値として受け取った文字を変数sCodeで受け取って、それをブラウザ上に表示しています。

これを進化させていくと、”a”で受け取った値をSQLに渡すことによって、一つのJSPページで複数の記事を簡単に表示できるようになります。

その辺りは、また、別の記事でご紹介します。