Javaサーブレットで、404となったURLを取得する
2015 年 8 月 18 日 by sora404ページ(NotFoundページ)は、単に「このページはありません。」と表示すればよいと思っている方々も多いと思います。
しかし、404ページはSEO上重要なページなのです。
「Webサイトを訪れるがページがない」⇒「お客様が要求したことに応えられていない」
ということになります。
404ページで適切な別ページへの案内ができれば、そこからの離脱を防ぐことができ、かつ、コンバージョンへつなげることができるかもしれません。そのためには、どのURLにアクセスされたかを取得する必要があります。
Javaサーブレットの場合、リクエストされたURLを取得する場合は、通常、HttpServletRequestインタフェースの「getRequestURI」や「getRequestURL」メソッドを利用しますが、404ページで利用した場合、内部フォワードされているのでユーザからリクエストされたURLではなく404ページ自体のURLが返却されます。
では、404ページでユーザからリクエストされたURLを取得するにはどうすればよいでしょうか?
HttpServletRequestインタフェースの「getAttribute」を利用してフォワード前(ユーザからリクエストされた)のURIを取得することが可能です。
HttpServletRequest#getAttribute("javax.servlet.forward.request_uri")
他にもContextPathやクエリ文字列を取得することも可能です。
- javax.servlet.forward.context_path
- javax.servlet.forward.servlet_path
- javax.servlet.forward.path_info
- javax.servlet.forward.query_string
※但し、forwordの仕方によっては取得できない場合があります。Servlet2.4以降の仕様になります。
取得したURLから似たようなURLのページを案内したり、一つ上位階層のページがあればそのページを案内したりいろいろとできそうですね。