现在做一个项目,前台是显示是用jsp,但是实时数据的获取需要和c++通信.目前想到的方案是在jsp(servlet?)中运行一个线程c++通信,把获取的数据缓存在全局变量中,然后客户端和请求时把数据发送过去.但现在有问题:
1.jsp启动一个线程和c++通信,把获取的数据缓存在全局变量中,请问可以缓存到什么地方比较好?放到全局的javabean,application?
2.如何在jsp中启动一个线程?
3.tomcat在第一次接受到客户端请求的时候会实例化一个对应的类,而且在程序运行期间只有一个类的实例.每次客户端请求的时候在服务器端都发生了什么?
4.如果可以创建这个线程,应该在哪里启动这个线程?能咋jsp的<%%>之间吗?还是一定要在servlet中启动线程?

解决方案 »

  1.   


    不需要webservice的,呵呵虽然看懂了,但是没参与过这个领域,哈。
      

  2.   

    1.存放到什么位置和你的数据的生命周期有关系。你获取的数据到底能存活多久看你的应用。
    2.在jsp中启动线程和一般的java中启动线程方法是一样的。但是有可能你的servlet线程已经结束,但是你启动的线程仍然还存在着。
    3.服务器在干活。
    4.jsp和servlet在容器中运行时最终都是使用servlet技术规范。没有区别。
      

  3.   

    to:楼上
    可能我的问题没有描述清楚
    1.数据的生命周期是永久的,就是整个应用程序都得使用
    2.原来在servlet里面启动线程后等待的时间好像有点问题,待会儿去修正一下
    3.具体点的问题是:客户段请求了以后服务器的执行过程是什么?调用servlet内的哪些方法?执行顺序如何?
    4.启动的线程需要在整个应用程序运行期间都有效,怎么样保证被启动的线程有效?补充问题:
    5.如何在应用程序启动的时候就启动这个线程,而不用在servlet被访问的时候才启动?
      

  4.   

    楼主你的程序和c++通信主要是获得数据,这个读取数据的线程没必要放在jsp、servlet里,做一个读取数据的线程的类
    做一个存放数据的缓存类,存数据可以用list或map那个线程主要把数据读出来存入数据缓存类,然后你的jsp只要访问这个数据缓存类就好了
      

  5.   

    To:lazy122061517
    1.如果做一个读取线程的类应该在哪里启动这个线程呢?
    2.怎么把存放数据的缓存类设置成全局的?应为这个类要在整个web程序运行期间都执行的
      

  6.   

    信息太少,无法回答。获得的数据操作么?还是只是显示INFO?数据实时性重要么?数据是点共享还是面共享?
      

  7.   

    恩,数据就是要实时显示的,在web页面上刷新信息.客户端通过ajax刷新
    不清楚什么是点共享还是面共享,请指教
      

  8.   

    服务启动的时候就启动那个线程呀至于那个缓存类,里面数据存储容器定义成静态(static)的不就可以全局访问了吗?
      

  9.   

    建一个servlet,InitServletweb.xml配置这样:
    <servlet>
        <servlet-name>InitServlet</servlet-name>
        <servlet-class>
    InitServlet
        </servlet-class>
        <load-on-startup>10</load-on-startup>
    </servlet>然后在这个servlet的init()方法里启动这个线程