Javaサーブレットで、404となったURLを取得する

2015 年 8 月 18 日 by sora

404ページ(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のページを案内したり、一つ上位階層のページがあればそのページを案内したりいろいろとできそうですね。

タグ: ,

TrackBack