解决方案 »

  1.   

    完全可以啊。
    你创建一个servlet的时候,添加一个init()方法,init方法中执行查询数据库的方法,把数据导入内存。
    默认情况下servlet被加载是在第一次请求访问到来得时候,不过可以使用xml文件中配置
    <load-on-startup>-1</load-on-startup>
    是其在启动tomcat服务的时候就加载servlet就可以了。
      

  2.   

    "init方法中执行查询数据库的方法,把数据导入内存"  把数据导入内存?能具体实例说明么?
    while (rs.next()){ls.setLsurl(rs.getString("aa"));} (ls是ArrayList) 这样把数据直接放在链表里? 还有另外一个程序怎么获取这些数据呢?急啊急~~~
      

  3.   

    追问的时候引用一下我的回复,这样我就能看见了。不用发私信。
    List<Item> list=new ArrayList<Item>();
    try {

    fr=new FileReader(file);
    br=new BufferedReader(fr);
    String str="";
    while((str=br.readLine())!=null){

    if(n==0){
    n++;
    continue;
    }
    n++;
    String[] s=str.split(",");
    Item item=new Item();
    item.setBrandname(s[0]);
    item.setClasses(s[1]);
    item.setClassesid(s[2]);
    item.setMjid(s[3]);
    item.setColorsize(s[4]);
    item.setSku(s[5]);
    item.setMarket_price(s[6]);
    item.setIn_price(s[7]);
    item.setOut_price(s[8]);
    item.setIfsuit(s[9]);
    item.setMarket_code(s[10]);
    item.setName(s[11]);
    item.setWeight(s[12]);
    item.setImgurl("null");
    item.setDescription(s[15]);
    list.add(item);
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    try {
    br.close();
    fr.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    当然我这个是从文件中读的,但是性质和从数据库中的差不多。
    放到list里面,内存中就已经有了,如果别的程序需要使用这个list,就需要把list传进去就可以了。
      

  4.   

    那这个list用什么传递?session???
      

  5.   

    可以做缓存吧~  要用数据了就从缓存里拿出来,还可以定时销毁..多好
    memcache楼主值得一试
      

  6.   


    你创建servlet的时候申明一个变量list并实例化。
    然后init里面对这个list进行赋值。
    用的时候直接使用这个list就可以了。。
    然后这个servlet结束的时候在destory清楚内存就可以了。
      

  7.   

    楼主的意思是想在初始化servlet的时候,执行数据库查询操作,将所需要的数据都缓存到内存中,之后查询数据不需要到数据库中.建立一个全局变量Arraylist,在serverlet的init()方法中写hibernate语句,然后将查询的结果集赋值给Arraylist,之后的查询只需要在调用的方法中去遍历Arraylist这个变量就行了。当然这只是在一个servlet中定义全局变量,如果需要在不同的jsp页面或是serverlet中也能遍历到Arraylist这个对象,就将Arraylist保存到httpsession对象中
      

  8.   

    单例 class 
    成员list
      

  9.   

    比如这样?:
    ArrayList<LL> ll;
    public void init() throws ServletException
    {
    try
    {
    ll= ListTest.authUrl(userId); //方法类,存储好了ArrayList的数据
    } catch (SQLException e)
    {
    e.printStackTrace();
    } catch (ClassNotFoundException e)
    {
    e.printStackTrace();
    }

    }
    那么,别的程序怎么获得链表里的数据呢?怎么调用啊??
      

  10.   

    放到内存?
    楼主可以定义一
    个pojo将查询出来的数据放到pojo里不就可以了吗?注意pojo单例模式或者利用ehcache放到缓存里面也行啊!!!!
      

  11.   

    当前程序里面直接调用就可以了。
    如果别的程序调用的话通过request放入session中别的程序就可以用了。
      

  12.   

    public class First_test extends HttpServlet {
    List<Object> list=null;
    ========================================public void init() throws ServletException {
    // Put your code here
    //init()中加载数据库中的查询到的数据
    Session session=(new Configuration()).buildSessionFactory().openSession();
    String hql="";/* 数据查询省略*/
    Query query=session.createQuery(hql);
    //这个list变量在sevelet开始就定义了
      list= query.list();
                     for(Object l:list){
    }
    =============================
    在doget或是dopost方法里面
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    HttpSession session2=request.getSession();
    session2.setAttribute("infomation", list);
     
    }
    =================
    之后不管是在jsp页面上取值还是在servlet中,都可以通过HttpSession 定义的对象调用getParameter("information")方法取得list,
      

  13.   

    如果init()里的程序实现:获取一个id匹配查询数据库。
    而这个id是存在session里的到的可以么?init()里可以接受HttpServletRequest之类的么?
      

  14.   

    试过一些方法都没能得到session,目前还不知道在init()里面如何获取获取session对象,你得去问高手了。servlet的内置对象作用好像是从servlet生命周期的执行开始的,在eclipse的编辑提示里面,都没有相关的对象出现,所以涉及到在会话传值方面的代码,我们尽量写在doget或是dopost方法里面。servlet的内置对象本身就是为了保存值,传值存在的。