JavaのHttpServletRequestWrapperとgetSessionメソッドを完全ガイド!初心者でもわかるセッション管理
生徒
「Javaでログイン情報や買い物かごの内容を保存しておくにはどうしたらいいですか?」
先生
「そういうときはセッションを使います。HttpServletRequestWrapperのgetSessionメソッドを使うと、セッションオブジェクトが取得できますよ。」
生徒
「セッションってどういう仕組みなんですか?」
先生
「セッションは、ユーザーごとに状態を保持する仕組みです。詳しく解説していきますね。」
1. javax.servlet.httpパッケージについて
javax.servlet.httpは、JavaでWebアプリケーションを作るときに欠かせないパッケージです。HTTP通信のリクエストやレスポンスを扱うためのクラスが多数含まれています。
HttpServletRequestやHttpSessionなどがよく使われます。
2. HttpServletRequestWrapperとは
HttpServletRequestWrapperはHttpServletRequestをラップして拡張できるクラスです。
元のリクエストの情報を保持しつつ、一部の動作を変更したり、追加の処理を加えたりすることができます。ログ出力やリクエスト情報の加工にもよく使われます。
3. getSessionメソッドの基本
getSessionメソッドは、ユーザーごとのセッションオブジェクトを取得するためのメソッドです。
セッションとは、一時的に情報を保持する仕組みで、ユーザーがログイン中であることを識別したり、ショッピングカートの中身を記憶したりするのに使われます。
getSession()を呼び出すと、サーバー側でHttpSessionオブジェクトが作られます。
4. getSessionの使い方
getSessionには次の2つの形式があります:
getSession():セッションがなければ新しく作成します。getSession(false):セッションがなければnullを返します。
たとえば、ログイン状態のチェックなどに使いたい場合はgetSession(false)を使って、セッションが存在しているか確認できます。
5. HttpServletRequestWrapperでgetSessionを使うサンプル
次のコードは、HttpServletRequestWrapperを使ってセッションに値を保存し、取り出す例です。
@WebServlet("/session-example")
public class SessionExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request);
HttpSession session = wrapper.getSession();
session.setAttribute("username", "taro");
response.setContentType("text/plain; charset=UTF-8");
response.getWriter().println("セッションに保存したユーザー名: " + session.getAttribute("username"));
}
}
6. 実行結果の例
このサーブレットにアクセスすると、サーバー側でセッションが作成され、「username」という名前で「taro」という値が保存されます。
ブラウザに表示される出力は次のとおりです:
セッションに保存したユーザー名: taro
7. セッションを使うときの注意点
セッションは便利ですが、使いすぎるとサーバーのメモリを圧迫する原因になります。また、個人情報などの重要なデータを保存する際はセキュリティにも注意が必要です。
必要なくなったセッションはsession.invalidate()で破棄しましょう。
8. セッションの実用例
セッションはログイン状態の維持、買い物かご、アクセス制限など、Webアプリケーションのあらゆる場面で使われます。
HttpServletRequestWrapperと組み合わせてセッションを操作することで、より柔軟で拡張性の高い処理が実現できます。