【问题标题】:Using session attributes in spring MVC在 Spring MVC 中使用会话属性
【发布时间】:2012-08-02 00:58:42
【问题描述】:

我正在使用 Spring MVC 开发一个 Web 应用程序。我只想要一个简单的例子来说明如何进行会话管理。我看过很多论坛,但我无法清楚地了解这一点

我的要求是

我有一个对象,我希望在所有控制器和 JSP 中都可以访问它 想在控制器中设置它并在 JSP 中获取它

我正在寻找类似的东西

    Session.setAtribute(); 

能否请您告诉我一个非常简单的例子。谢谢

【问题讨论】:

    标签: spring jsp session


    【解决方案1】:

    在 Spring MVC 中有多种访问 servlet 会话的方法。但我认为这个是最适合你的问题的一个。您可以创建一个会话范围的 bean,其中包含您想要的信息:

    @Component("myObjectHolder")
    @Scope(WebApplicationContext.SCOPE_SESSION)
    public class MyObjectHolderImpl implements MyObjectHolder {
    
        private long userId;
        private String username;
        private Theme theme;
    
        // Getters & Setter
    }
    

    然后,您可以从其他 bean 访问它:

    @Controller
    public class MyController {
    
        @Autowired private MyObjectHolder myObjectHolder;
    
        @RequestMapping
        public ModelAndView switchTheme(String themeId) {
            ...
            Theme newTheme = themeService.get(themeId);
            myObjectHolder.setTheme(newTheme);      
            ...
        }
    
    }
    

    您也可以直接从您的视图中访问,但您必须对其进行配置:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        ...
        <property name="exposedContextBeanNames" value="myObjectHolder" />
    </bean>
    

    在你的 JSP 中:

    Hi ${myObjectHolder.username}, you switched 
    application theme to ${myObjectHolder.theme.name}
    

    【讨论】:

    • 谢谢你的回复。所以 MyObjectHolderImpl 是我设置我的视野对象的地方,我可以从任何地方获取它 rite ,.. 因为我不必多次设置会话对象,我只需要在我的一个控制器中设置一次
    • @user1562262:不,您可能并不真的需要访问会话对象。您可以在 MyObjectHolder 中保存所需的信息(例如用户 ID、名称、主题、偏好...)。我会更新我的答案。
    【解决方案2】:

    最简单的方法是通过将HttpSession 注入到您的处理程序方法中直接访问它:

    @RequestMapping("/page")           
    public ModelAndView page(HttpSession session) {           
        session.getAttribute("foo");
    }
    

    【讨论】:

    • 感谢您的回复.. 我只是想知道,我是否必须在设置会话的控制器中注入 HttpSession 会话,或者仅在获得会话的控制器中注入两者
    • @user1562262:在需要时注入HttpSession :-)。还要多读一点,在 Spring MVC 中访问 HTTP 会话属性有更方便的方法,但需要一些前期设置。
    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2014-04-18
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多