Java:我需要使方法对不同的请求表现不同

时间:2012-08-31 10:53:14

标签: java

class A 
if(userAuthenticated)
  ArrayList accounts = getAccountForUser(customerId);
UserInfo userinfo = new UserInfo();
userinfo.getUserInfo(accounts);
}

==============

class UserInfo 
{
public ArrayList<String> getUserInfo(ArrayList list) {
ArrayList useraccounts = list;
return useraccounts;
}
}

===============

现在在C类中我将有一个字符串,我需要检查,如果该字符串值存在,那么做其他事情做soemthing

问题是这是一个WebApplication,我不能在应用程序中使用实例varaibe。

class C 
{

public String makeDBCALL(String account)
{

Here i need to get that ArrayList  of UserInfo  and check if taht  list.contains(account)) 
could anybody please tell me how can do this .
}
}

1 个答案:

答案 0 :(得分:0)

<强>上下文

你需要背景。

需要为该上下文提供Servlet类。

数据库或内存

每次数据库都可以引用DB(数据源)和查询,或者在内存中有内容(通过示例列出)。

如果C是一个知道它在servlet环境中的servlet类,你可以要求提供应用程序上下文。如果它是一个商业类,一些更不可知的东西,那么最好通过参数或属性接收它所需的上下文。

设置背景

如果使用Spring配置(Spring IOC),您可以设置类需要编写正确的xml。

如果不这样做,那么,在某个地方你需要寻找数据库连接,或者初始化该列表并为其他类提供参考。

最后,一个具体的解决方案

编写一个上下文监听器,在初始化时生成这个所需的上下文(onContextCreated)并从应用程序上下文中挂起它:

class MyListener implements ServletContextListener
{
   contextInitialized(ServletContextEvent event) {
      // Create theObjWEhatYouNeed
      event.getServletContext().setAttribute("whatINeed", theObjWhatYouNeed);
   }
}

配置web.xml以使用MyListener

<listener>
    <listener-class>MyListener</listener-class>
</listener>

然后在你的servlet类中使用它(可能有很多相同servlet类的实例,请记住这一点)

doGet(...) {
   MyObj myObj = (MyObj) request.getSession().getServletContext().getAttribute("whatINeed");
}