GVKun编程网logo

spring – 从JSP文件中的会话范围bean访问数据(jsp+spring)

9

在这里,我们将给大家分享关于spring–从JSP文件中的会话范围bean访问数据的知识,让您更了解jsp+spring的本质,同时也会涉及到如何更有效地Bean的Spring会话范围如何工作?Web

在这里,我们将给大家分享关于spring – 从JSP文件中的会话范围bean访问数据的知识,让您更了解jsp+spring的本质,同时也会涉及到如何更有效地Bean的Spring会话范围如何工作?Web上下文中Bean的默认范围是什么?、Bean的会话范围在Spring MVC应用程序中如何工作?、IDEA整合Spring Boot项目访问jsp文件、java – JSF CDI:对话范围bean [s]最佳实践的内容。

本文目录一览:

spring – 从JSP文件中的会话范围bean访问数据(jsp+spring)

spring – 从JSP文件中的会话范围bean访问数据(jsp+spring)

我正在尝试在Spring Web MVC 3中开始使用会话范围的bean.我将此行放在我的调度程序配置中:

Box.sessionbeans.UserInfo" scope="session" />

这是net.sandBox.sessionbeans.UserInfo:

package net.sandBox.sessionbeans;

public class UserInfo {
    public String username;

    public UserInfo() {
        this.username = "Unregistered User";
    }
}

如何在代表我的应用程序的View部分的JSP文件中访问会话范围的bean?我试过这个……

……但这没有给我预期的结果,即

相反,我得到了

我究竟做错了什么?

最佳答案
您可以在问题中显示它.问题可能出在您的配置中.看看你是否在视图中公开你的bean,如下所示:

Bean的Spring会话范围如何工作?Web上下文中Bean的默认范围是什么?

Bean的Spring会话范围如何工作?Web上下文中Bean的默认范围是什么?

我正在研究Spring MVC,但有以下疑问:

  1. 会话范围的目的到底是什么?

阅读文档,我知道这将bean定义的范围限定为HTTP会话。仅在可感知网络的Spring
ApplicationContext上下文中有效。而且,每个用户会话一次创建一个新实例。

但是什么时候才使用呢?出于什么目的?你能举一个实际的例子吗?

  1. 在Spring MVC中,Web上下文的默认范围是什么?

我知道在Spring中,bean的默认范围是 单例, 但是在Web上下文中,bean的范围如何?

Bean的会话范围在Spring MVC应用程序中如何工作?

Bean的会话范围在Spring MVC应用程序中如何工作?

我在Spring MVC中还很陌生,我对bean 的 会话范围 有疑问。

进入一个项目,我有一个Cartbean,这个:

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Cart {


    private Map<Product,Integer> contents = new HashMap<>();

    public Map<Product,Integer> getContents() {
        return contents;
    }

    public Set<Product> getProducts() {
        return contents.keySet();
    }

    public void addProduct(Product product,int count) {

        if (contents.containsKey(product)) {
            contents.put(product,contents.get(product) + count);
        } 
        else {
            contents.put(product,count);
        }
    }


    public void removeProduct(Product product) {
        contents.remove(product);
    }

    public void clearCart() {
        contents.clear();
    }

    @Override
    public String toString() {
        return contents.toString();
    }

    public double getTotalCost() {
        double totalCost = 0;
        for (Product product : contents.keySet()) {
            totalCost += product.getPrice();
        }
        return totalCost;
    }

}

因此,容器会自动将该bean识别为组件,并通过以下方式将其设置为 会话bean

@Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode = ScopedProxyMode.TARGET_CLASS)

因此,据我了解,这意味着它将为每个用户会话自动创建一个bean。

在我的示例中,Cart该类表示购物车,已登录的用户将想要购买的物品放入其中。这是否意味着Cart每个登录的用户部分都存在一个bean
HttpSession?因此,此bean进入了会话,用户可以在会话中添加或删除项目。这种解释正确吗?或者我缺少什么?

另一个疑问与proxyMode = ScopedProxyMode.TARGET_CLASS属性有关。这到底是什么意思呢?为什么将它应用于此bean?

IDEA整合Spring Boot项目访问jsp文件

IDEA整合Spring Boot项目访问jsp文件

官方不推荐使用jsp文件作为视图!!!

配置如下:

1,Pom文件中添加依赖:

<!--添加jsp依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>

2,application.yml中添加相关配置:

server:
  port: 8080

  #设置mvc页面跳转
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

3,项目整体结构:

注:

1,webapp和java,resource是同级目录。

2,jsp页面的位置为:/WEB-INF/jsp   (jsp页面默认位置在WEB-INF下的jsp目录)

3,application.yml中对于页面位置的配置,prefix: /WEB-INF/jsp/,即使写为/jsp,也不能起作用,而是执行的/WEB-INF/jsp/

 

4,控制器Controller配置跳转:

 

注意:

 

1,@Controller不能写为@RestController,否则访问出错。

 

2,@RequestMapping(value = "index",method = RequestMethod.GET)可以简写为@RequestMapping( "index")

 

@Controller
public class IndexController {

    private static final String INDEX="index";

    @RequestMapping(value = "index",method = RequestMethod.GET)
    public String getIndex() {
        return INDEX;
    }
}

5,启动TraceabilityApplication,访问页面:

访问地址为:http://localhost:8080/index

页面效果为:

 

java – JSF CDI:对话范围bean [s]最佳实践

java – JSF CDI:对话范围bean [s]最佳实践

我目前正在学习JSF 2.0,并且对于这个会话范围功能的存在感到非常高兴,这对于在同一页面上打开一个新的选项卡或一个新窗口,并且具有单独的资源,而不是相互覆盖,这是非常有用的.

但是好奇的是如何实现这一点很好,关于什么时候开始对话,什么时候关闭它.

在我的情况下,我有每个JSF页面的每个CDI bean.让我们说我有一个菜单,当它被点击时,这将导致页面A,从A可以导致B,B可能导致C,C可以导致D,所有这4个页面都连接在一个链.

从B或C或D Bean访问A的bean属性是可能的,也可以从C或D bean访问B的属性等等.

现在我很困惑:

>所有这些A B C D是否应该
在会话范围内,或
也许只是A?因为我想
有时从另一个页面
在ABCD链之外,像一个页面
F,它可以导航到页面B,
虽然我不知道如何供应
数据到豆B还没有.
>所有这些A B C D是否应该
合并成一个豆
>哪里和什么时候开始
对话,我想到了
建设者,但我不认为这是一个
好主意,因为我喜欢开始
第一次访问时的对话
页面,而不是豆
>何时何地停止
对话,所以不会有
未使用的资源挂在身边

请分享你的想法.

解决方法

JSF 2提供请求,视图,会话和应用程序范围. CDI引入了对话范围,但更重要的是,它引入了一个标准,通过该标准可以向平台添加新的范围.

您所描述的范围可能更适合像窗口范围这样的自定义范围.实施这一范围的两个项目是:

> Apache MyFaces CODI
> IceFaces有一个JSF(非CDI)Window scope implementation.

不过,我鼓励你重新思考你的豆结构.我已经非常喜欢View范围,再加上JSF 2视图参数来将信息从一个页面传播到另一个页面(以及从一个View范围实例到另一个).

MyFaces“View Access”范围似乎是另一种整洁的方法,只要你浏览的页面保持对该范围的引用,那么bean就会保留在范围内.

关于spring – 从JSP文件中的会话范围bean访问数据jsp+spring的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Bean的Spring会话范围如何工作?Web上下文中Bean的默认范围是什么?、Bean的会话范围在Spring MVC应用程序中如何工作?、IDEA整合Spring Boot项目访问jsp文件、java – JSF CDI:对话范围bean [s]最佳实践等相关知识的信息别忘了在本站进行查找喔。

本文标签: