我会尽量做到简短而且最具体。可以创建为每个请求创建的类,类属性或“东西”吗?我的意思是对整个容器(静态类属性)不会持久的东西。
我需要将内部标识符存储到类或属性中,这对于每个请求都是不同的,并且对于整个请求是持久的。我正在使用java过滤器,在doFilter之前我需要将该标识符保存在“某处”。因为我需要在应用程序中使用该标识符进行某些操作。在doFilter之后,我需要从“某处”获取该标识符并更新其他一些内容。
感谢您提出如何解决此问题的任何建议......
2011年5月24日上午10:25编辑
好的,我会尽力解释我的问题。
我正在使用Tomcat 6和BlazeDS utils。此服务器用作Flex应用程序的后端。 所以,如果我想向服务器发送一些消息或对象或其他任何东西,我只需要这样调用:
service.doSomethingWithThis( data )
在flex中,“service”属性映射到class,eq。 “foo.bar.BazService”和此服务的方法“doSomethingWithThis”带有参数“data”。当服务器收到请求时,使用参数“data”执行“doSomethingWithThis”方法。
public int doSomethingWithThis( Object data ) {
GenericDAO genDao = new GenericDao();
genDao.create( data );
}
因此,正如您所看到的,我无法访问请求属性。我在Flex方面称之为在Java端调用它。
另一个问题是DAO对象(在本例中为GenericDAO)。那些DAO对象有点具体。他们要求数据库连接,这个连接由一个单独的类提供,它保存整个应用程序的数据库连接。所以,我没有像往常那样将连接参数传递给DAO对象,但是他们自己要求连接。我知道这不是正确的做法:)。
现在我们正在尝试解决此问题,并且我们希望使用由Tomcat提供的池化数据库连接。而且有问题。如果我检索连接,我需要将该连接放回池中。但是我的DAO对象没有关闭数据库连接。解决方案可以是在调用服务方法时将连接参数传递给DAO对象,并在结束时关闭该连接,但是我有很多服务并且需要进行大量的重构。所以我试图找到另一种方式,当我能够封装整个请求(Java过滤器)并在某处“存储”数据库连接时。我的DAO对象可以从“某个地方”获取此连接。
在请求中存储数据库连接是一种解决方案,但正如您所看到的,我不知道如何在我的DAO类或服务类中访问此请求。其他方式是使用session,但也有问题。可以有多个服务器请求,并且将完成的第一个请求将关闭该连接。因此,其他请求不能再使用该数据库连接,因为它已返回到池中。
因此,当我能够为整个请求获得一个数据库连接时,我的目标是解决方案。
答案 0 :(得分:2)
如果我的请求在不同的线程中执行,您可以将变量存储在ThreadLocal
变量中,该变量对每个线程(以及请求)具有不同的值。
答案 1 :(得分:2)
request.setAttribute("name", variable);
将在请求的生命周期内持续存在,而不再存在。