web-dev-qa-db-ja.com

SpringMVCでのHTTPセッション管理

私はSpring MVCを初めて使用し、私が学んだことを実行してサンプルアプリケーションを作成し始めました。春のMVCでセッション管理を実装する予定です。私は this 役立つ情報を見つけました。

しかし、私はそれを明確に得ることができません。次のようにセッションに値を追加します

_HttpSession session = request.getSession(false);
session.setAttribute("key", value);
session.setAttribute("key1",  value1);
_

その後、次のようなキーに基づいて値をフェッチします

_session.getAttrubute("key");
_

しかし、春のMVCでは、似たようなものを見ることができず、完全に混乱しました。

_@Controller
@SessionAttributes("thought")
public class SingleFieldController {

    @RequestMapping(value="/single-field")
    public ModelAndView singleFieldPage() {
        return new ModelAndView("single-field-page");
    }

    @RequestMapping(value="/remember")  
    public ModelAndView rememberThought(@RequestParam String thoughtParam) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("thought", thoughtParam);
        modelAndView.setViewName("single-field-page");
        return modelAndView;
    }

}
_

上記のコードでは、@SessionAttributes("thought")はこのthoughtの定義と同様に完全に混乱しています。_backbone.marionette.js_を使用しているため、ModelAndViewを返す必要はありません。

それでは、セッションで値を設定し、必要なときにいつでもそれらを使用するにはどうすればよいですか?また、値を画面に返す間、セッションで使用可能なUserDefinedオブジェクトのリストのみを返すため、セッションオブジェクトをユーザー定義オブジェクトに変換する必要もあります。

それで、私がそれをよりよく理解するのを助けてください。多分私はjsp/servletの使い方に戸惑っています。

[〜#〜]更新[〜#〜]

以下は私が持っているコントローラーとコメントです

_package com.hexgen.puppet;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.hexgen.puppet.CreatePuppet;

import Java.util.ArrayList;
import Java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class PuppetService {

    @RequestMapping(method = RequestMethod.POST, value = "/create")
    public @ResponseBody
    void createOrder(@RequestBody CreatePuppet request) {
        //logic to add/update values in session
    }

    @RequestMapping(method = RequestMethod.GET, value = "/list")
    public @ResponseBody
    List<Puppet> getGroups() {
        //logic to retrive objects from session and convert it as List and send it back

        return puppets;
    }


}
_

必要に応じてオブジェクトを変換して続行します

13
Java Questions

@SessionAttributes 従来のものを完全に置き換えません HttpServlet セッション管理。 2つ以上のControllerメソッドがデータを通信する必要がある場合に使用します。ただし、これを使用すると、単一のコントローラークラス内でのみ通信を実現できます。を使用している場合は、明示的にセッションを読み書きするために使用しません @SessionAttributes。の使用法 @SessionAttributes 存続期間の短い通信にのみ推奨されます。セッションで長期データを保存する必要がある場合は、使用することをお勧めします session.setAttribute そして session.getAttribute 明示的に、代わりに @SessionAttributes。詳細については これをチェックしてください

14
Vaibhav Raj

このように、springmvcでセッション管理を処理できます。これはコントローラメソッドです

@RequestMapping(value = { "/login" }, method = RequestMethod.POST)
@ResponseBody
public String login(HttpSession session,String username,String password) throws Exception {
    Member member=userService.authenticateUser(username, password);
    if(member!=null) {
        session.setAttribute("MEMBER", member);
    } else {
        throw new Exception("Invalid username or password");
    }
    return Utils.toJson("SUCCESS");
}

springがセッション属性を自動的に挿入する間、ユーザーはユーザー名とパスワードを渡します。このユーザー名とパスワードをdbから認証します。このため、いくつかのサービスメソッドを使用します。このサービスメソッドは、リポジトリのいくつかのメソッドを呼び出して、Member of Memberクラスを取得し、ここでコントローラーに返します。アプリケーションメソッドで、セッションに保持されている情報が必要な場合はいつでも、引数にハンドラーに渡します。 http://faisalbhagat.blogspot.com/2014/09/session-management-with-spring-mvc.html で、すべてのメソッド呼び出しでこの情報を確認する方法の詳細を確認できます。

11
faisalbhagat