2013-06-17 13 views
12

Sono nuovo di primavera MVC e ho iniziato a fare un'applicazione di esempio facendo quello che ho imparato. Sto pianificando di implementare la gestione delle sessioni in primavera MVC. Ho trovato uno this uno utile.Gestione Httpsession in primaveraMVC

Ma non sono in grado di farlo chiaramente. Aggiungiamo i valori alla sessione come

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

e più tardi abbiamo recuperare valori in base a chiavi come

session.getAttrubute("key"); 

ma in primavera MVC, non riuscivo a vedere nulla di simile ed è totalmente mi confonde.

@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; 
    } 

} 

Nel codice precedente @SessionAttributes("thought") è totalmente confondermi come quello che è questo thought definito anche io ho bisogno di restituire un ModelAndView dal momento che sto usando backbone.marionette.js

Così come posso impostare i valori in una sessione e usali quando richiesto? Devo anche convertire l'oggetto della sessione nell'oggetto definito dall'utente, poiché, restituendo i valori sullo schermo, restituisco solo un elenco di oggetti UserDefined disponibili nella sessione.

Quindi, per favore aiutami a capirlo meglio. Forse sono confuso dal modo in cui ho usato jsp/servlet.

UPDATE

Di seguito è il controller che ho e forniti commenti

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; 
    } 


} 

e convertire l'oggetto, se necessario, e continuare a

risposta

13

@SessionAttributes non si sostituisce in tutto il tradizionale HttpServlet gestione sessione. Usalo se due o più metodi di controller hanno bisogno di comunicare alcuni dati. Ma usando questo possiamo solo raggiungere la comunicazione all'interno della classe del controller singolo. Non si utilizza per leggere e scrivere esplicitamente da e verso la sessione se si utilizza @ SessionAttributes. L'utilizzo di @ SessionAttributes è consigliato solo per comunicazioni di breve durata. Se è necessario archiviare dati a lungo termine in sessione, si consiglia di utilizzare session.setAttribute e session.getAttribute in modo esplicito, invece di @ SessionAttributes. Per maggiori informazioni check this out.

8

È possibile gestire la gestione delle sessioni in springmvc in questo modo. ecco un metodo di controllo

@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"); 
} 

l'utente passerà nome utente e password mentre Spring inserirà automaticamente l'attributo di sessione. autenticheremo questo nome utente e password da db. Per questo useremo un metodo di servizio che a sua volta chiamerà qualche metodo di repository per ottenere la classe Object of Member e restituirlo nel controller qui . Ogni volta che nel tuo metodo di applicazione hai bisogno delle informazioni conservate nella sessione, passale nell'argomento al gestore.Potete trovare maggiori dettagli come queste informazioni possono essere verificate in ogni chiamata di metodo a http://faisalbhagat.blogspot.com/2014/09/session-management-with-spring-mvc.html

+0

grazie per le info –

+0

Questo esempio mi ha aiutato .. mi chiedevo come dichiarare e utilizzare 'HttpSession' e il codice di pace mi illumini, grazie tu ... –